Начало работы с STM32 - запись в BSRR - PullRequest
0 голосов
/ 17 апреля 2020

Недавно я купил ядерную плату STM32f031K6 и программирую ее с помощью STMcubeIDE. У меня есть опыт программирования 8-битных AVR, поэтому я пытаюсь преодолеть разрыв между этим и этим.

Мне сообщили, что я могу записать биты GPIOA->BSRR &= 1<<0;, но я не уверен, что делает этот синтаксис, - я записываю в регистр GPIOA или BSRR? Какой регистр мне нужно посмотреть, чтобы увидеть это изменение?

что означает синтаксис ->?

Ответы [ 2 ]

3 голосов
/ 17 апреля 2020

Вы пишете в регистр BSRR в периферийном устройстве GPIOA.

Оператор -> имеет синтаксис C для доступа к элементам из указанного на структуру, в вашем случае GPIOA является указателем, (*GPIOA).BSRR будет эквивалентно без оператора ->.

Периферийные устройства в STM32, такие как GP IOs, отображены в памяти, GPIOA указывает на базовый адрес эта периферия в пространстве памяти микроконтроллеров. Это показано на следующем рисунке, взятом из Справочного руководства для вашего процессора.

enter image description here

Как вполне справедливо говорит @P__J__ в его ответе регистр BSRR предназначен только для записи, поэтому не следует использовать оператор &=, опять же, это описано в приведенном выше связанном справочном руководстве.

2 голосов
/ 17 апреля 2020

Вы используете регистр BSRR неправильно. Это регистр только для записи Вы можете только писать в него, не читая его. Если вы записываете первые 16 бит этого регистра, вы устанавливаете контакты. Если вы записываете последние 16 бит, вы сбрасываете контакты. Нулевые записи игнорируются.

Поэтому не используйте ничего, кроме = при доступе к этому реестру.

->, если вы не знаете, что он делает, я могу только посоветовать вам начните с хорошей C книги. Вы не можете программировать ОК, если не знаете основ.

...