В стандартной периферийной библиотеке STM32 нам необходимо настроить GPIO.
Но есть 3 функции, которые я не знаю, как их настроить;
- GPIO_InitStructure.GPIO_Speed
- GPIO_InitStructure.GPIO_OType
- GPIO_InitStructure.GPIO_PuPd
В GPIO_Speed есть 4 настройки для выбора
GPIO_Speed_2MHz /*!< Low speed */
GPIO_Speed_25MHz /*!< Medium speed */
GPIO_Speed_50MHz /*!< Fast speed */
GPIO_Speed_100MHz
Как узнать, какую скорость выбрать? Есть ли какие-либо преимущества или недостатки при использовании высокой скорости или низкой скорости? (например: энергопотребление?)
В GPIO_OType есть 2 настройки для выбора
GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain
Как узнать, из чего выбрать? а что такое открытый сток и двухтактный?
В GPIO_PuPd есть 3 настройки для выбора
GPIO_PuPd_NOPULL // No pull
GPIO_PuPd_UP // Pull up
GPIO_PuPd_DOWN // Pull down
Я думаю, что эти настройки связаны с начальной настройкой двухтактного.
Ответы:
GPIO_PuPd (Pull-up / Pull-down)
В цифровых цепях важно, чтобы сигнальным линиям никогда не разрешалось «плавать». То есть они должны всегда находиться в высоком или низком состоянии. При плавающем состоянии состояние не определено и вызывает несколько различных типов проблем.
Способ исправить это - добавить резистор из сигнальной линии к Vcc или Gnd. Таким образом, если линия активно не приводится в действие на высоком или низком уровне, резистор вызовет дрейф потенциала до известного уровня.
ARM (и другие микроконтроллеры) имеют встроенную схему для этого. Таким образом, вам не нужно добавлять другую часть в вашу схему. Например, если вы выберете «GPIO_PuPd_UP», это равносильно добавлению резистора между сигнальной линией и Vcc.
GPIO_OType (Тип вывода):
Push-Pull: это тип вывода, который большинство людей считает «стандартным». Когда выходной сигнал становится низким, он активно «тянется» на землю. И наоборот, когда выходной сигнал установлен на высокий уровень, он активно «подталкивается» к Vcc. Упрощенно это выглядит так:
Выход Open-Drain, с другой стороны, активен только в одном направлении. Он может тянуть штифт к земле, но он не может вести его высоко. Представьте себе предыдущее изображение, но без верхнего MOSFET. Когда он не тянет на землю, полевой МОП-транзистор просто непроводящий, что приводит к плавающему выводу:
Для этого типа выхода в цепь должен быть добавлен подтягивающий резистор, который приведет к тому, что линия станет высокой, когда она не будет переведена в низкий уровень. Вы можете сделать это с внешней деталью или установив значение GPIO_PuPd равным GPIO_PuPd_UP.
Название происходит от того факта, что утечка MOSFET внутренне не связана ни с чем. Этот тип вывода также называется «открытый коллектор» при использовании BJT вместо MOSFET.
GPIO_Speed
По сути, это контролирует скорость нарастания (время нарастания и спада) выходного сигнала. Чем выше скорость нарастания, тем больше шума излучается от цепи. Хорошей практикой является замедление скорости нарастания и увеличение ее только при наличии конкретной причины.
источник
Скорость GPIO - это максимальная частота, которую может воспроизводить GPIO. Более низкие настройки могут экономить энергию.
Тип выходного сигнала - это то, утверждает ли вывод максимумы и минимумы (двухтактный), или выход поворачивает затвор полевого транзистора, который прикреплен к выводу на стоке (открытый сток). Это может быть удобно, если вам нужен какой-либо прикрепленный штырь, чтобы можно было тянуть шину на низком уровне без короткого замыкания в других штырьках.
Поднимите резисторы, прикрепите вывод штыря к шине питания, и потяните вниз, прикрепив через резистор к земле. Это, помимо прочего, будет контролировать напряжение на выводе, даже если бит находится в состоянии высокого импеданса. Это важно для таких вещей, как использование точечного переключателя для изменения значения цифрового входа. Даже при открытом переключателе вход предсказуем.
источник