STM32F103C8Tx. 0 - включает PC13, 1 - выключает. Почему?

Всем привет. Почему через HAL, Atollic TrueStudio STM32 на плате STM32F103C8Tx при подаче питания HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); - светодиод включается, а если HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); - выключается. Китайская подделка? На статьях у людей по-другому - 0 - выкл., 1 - вкл.


Ответы (1 шт):

Автор решения: maestro

Чтобы это понять, надо сначала выяснить, каким образом контроллер устанавливает на своём выводе высокий или низкий уровень. Имеются два способа: Push-pull и Open Drain.

Push-Pull

Порт в режиме Push-Pull

Прямоугольником показано внутреннее устройство контроллера. Стрелочка - место подключения напряжения питания (плюса), горизонтальная черта - точка подключения нулевого потенциала (минуса, земли, GND). Когда вы записываете в регистр этого порта единицу, замыкается верхний ключ, когда ноль - нижний ключ. Так на порту окажется высокий или низкий логические уровни.

Здесь важно понимать, что при подаче высокого уровня порт напрямую подключается к напряжению питания, а поэтому при подключении к порту какого-либо устройства (например, светодиода), важно рассчитать ток, так как при его превышении порт может сгореть. Максимально допустимый ток смотрите в документации на ваш контроллер.

Open Drain

Open Drain

В этом режиме в контроллере работает только один ключ, который подключает порт к земле. Высокий уровень устанавливается с помощью внешнего подтягивающего резистора (или иного устройства, как скоро увидим). Когда ключ замкнут, на порту устанавливается низкий логический уровень. Когда ключ разомкнут, устанавливается высокий уровень.


Схемы подключения светодиодов

LED

На левом рисунке используется режим Push-Pull. Когда вы устанавливаете логическую единицу (пишете HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);), светодиод загорается. Когда устанавливаете 0, гаснет.

На правом рисунке используется режим Open Drain. Когда устанавливаете единицу, ключ разомкнут, ток через светодиод не течёт, светодиод не горит. Когда устанавливаете ноль, ключ замкнут, ток течёт, светодиод горит.

Сопротивление резистора нужно рассчитать исходя из требуемого тока потребления светодиода и внутреннего сопротивления светодиода. Ток не должен превышать максимальный ток порта, но если у вас получается превышение, используйте другой светодиод, или сделайте подключение с внешним транзистором.

Подключение с внешним транзистором

Led-Mosfet

Схем подключения через транзистор достаточно много. Приведём здесь схему с одним полевым транзистором. Затвор подключается к выводу микроконтроллера, а порт контроллера может быть настроен в любом режиме. Подаём высокий уровень - светодиод горит, подаём низкий уровень - не горит.

→ Ссылка