Порты ввода/вывода
Органы чувств человека переоценить невозможно..без слуха, зрения, осязания человек становится...в общем порты ввода/вывода - это органы чувст любого контроллера.
Без них эта штуковина мигом превратится в хлам, посему мне кажется логичным начать с записи о портах ввода/вывода (GPIO - general port input/output). Максимально порт
может состоять из 16 пинов.
В микроконтроллере stm32 за настройку любого из портов отвечает 7 регистров:
GPIO_CRL - configeration register low
GPIO_CRH - configeration register high
GPIO_IDR - input data register
GPIO_ODR - output data register
GPIO_BSRR - bit set/reset register
GPIO_BRR - bit reset register
GPIO_LCKR - lock register
За настройку любого пина отвечает 4 бита: CNF0, CNF1, MODE0, MODE1.
Эти биты находятся в регситрах GPIO_CRL( 0-7 пин ) и GPIO_CRН ( 8-15 пин ). Любой пин можно настроить на один из режимов работы, глобально это ВХОД или ВЫХОД.
Пины одного и того же порта между собой не зависят, т.е. пины конфигурируются абсолютно произвольно.
Итак, начнем с простого:
MODE0 и MODE1
отвечают за частоту тактирования порта. Раз уж я в начале статьи провел параллель с человеком, то и тут не отступлю. Тактирование в микроконтроллерах - это пульс
человека. Чем он быстрее, тем человек энергичнее, шустрее и прожорливие, аналогичнее и с переферией МК(микроконтроллера).
MODE1 MODE0 Результат
0 0 Вход
0 1 2 МГц
1
0 10 МГц
1 1
50 МГц
Второе, режимов работы хоть отбавляй.
CNF1 CNF0 Результат
ВЫХОД
0 0
Двухтактный ( общего назначения )
0 1 С открытым стоком
( общего назначения )
1 0 Двухтактный ( подключен к периферии )
1 1 С открытым стоком ( подключен к периферии )
ВХОД
0 0
Аналоговый
0 1 Свободный
1
0 Прижатый к земле
1 1
Притянутый к питанию
Примеры:
Прим. При включении все биты регистров настроек сброшены в 0.
Настроить пин 4 порта А на двухтактный выход с частотой 10 МГц:
Настроить пин 10 порта В на вход с подтяжкой к питанию: