Developer от Бога

DV

четверг, 6 июля 2017 г.

STM32. Адресация регистров

Прежде чем приступить к написанию программы для микроконтроллера, нужно подключить тактирование нужных блоков, за это отвечает регистр RCC, находим его в документации, и ищем биты , установка которых включает тактирование для нужных портов. Находим регистр RCCAHB1ENR который тактирует порты и некоторые другие блоки. Регистр RCCAHB1ENR как мы видим имеет адрес смещения 0x30. Сам блок тактирования RCC занимает в адресном пространстве некоторый диапазон памяти для своих регистров управления, поэтому мы ищем адрес первого регистра RCC и складываем его с адресом смещения того регистра который нам нужен:


Данный порядок вычисления адресации нужно хорошо запомнить, так как он будет использоваться часто и для разных блоков: адрес первого регистра нужного блока + число смещения, которое указывает на адрес нужного регистра. Числа с нужными битами можно указывать в любом исчислении, а для перевода можно использовать калькулятор windows.
В действии высше мы использовали запись и заносили число по указателю на адрес регистра. Для лучшей читаемости можно указатели заменить словами названиями регистров:



#define RCC_GPIO *((uint32_t*)0x40023830)
И для присваивания числа, уже можно записывать любое удобное имя: RCC_GPIO=0x3, RCC_PORTS=0b1000; ...

Внимание! При установлении значений в регистры, нужно смотреть, нет ли каких-нибудь значений по умолчанию в каждом регистре. Если регистр имеет значение сброса, следующая установка значений происходит через оператор "ИЛИ":



Из документации видно, что порты GPIOA и GPIOB уже имеют значения по умолчанию, поэтому установка значений будет проходить следующим образом:



GPIOA_MODER|=0x80;
GPIOB_MODER|=0x80;



Комментариев нет:

Отправить комментарий