STM32F10x порты PD0, PD1, PB3, PA15

В процесе изучения микроконтролеров STM32F10x, выясилось что порты PD0, PD1, PB3, PA15 не работают. Сначала грешил на кривую разводку по питанию, ведь порты в STM32 питаются отдельно от процессорного ядра. Но глянув в даташит на таблицу описания пинов, выяснил интересные особености. По умолчанию (после перезагрузки микроконтроллера) вывод PD0 это вход тактирования кварца OSC_IN, PD1 выход тактирования OSC_OUT, PB3 это JTDO, PA15 - JTDI, два последних работают на JTAG.

Чтоб перевести пины в режим потров ввода-вывода, нужно сделать ремап пинов, а для этого есть специальный регистр - MAPR. Устанавка битов в этот регистр, переназначает кучу выводов для переферии контроллера. Так как в STM32F10x есть довольно стабильный 1% RC-генератор, можно перенаправить порты PD0, PD1 на пины для внешнего кварца OSC_IN OSC_OUT, вот такой строчкой:

// Ремап PD0, PD1 на OSC_IN, OSC_OUT.
AFIO->MAPR |= AFIO_MAPR_PD01_REMAP;

JTAG я вобще не использую, порты PB3, PA15 перенавравляем на JTDO, JTDI, отключая JTAG

// Ремап PB3, PA15 на JTDO, JTDI. JTAGDISABLE
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;

Еще есть возможность отключить SWD, но через что шить тогда :) один раз сделал это поглупости.

Разделы Сайта