STM32入门——写入BSRR

Getting started with STM32 - writing to BSRR

我最近买了一块 STM32f031K6 核板,我正在使用 STMcubeIDE 对其进行编程。我有编程 8 位 AVR 的经验,所以我试图弥合这两者之间的差距。

有人建议我可以通过 GPIOA->BSRR &= 1<<0; 写入位,但我不确定这种语法在做什么,- 我是在写入寄存器 GPIOA 还是 BSRR?我必须查看哪个寄存器才能看到发生这种变化?

-> 语法表示什么?

您正在写入 GPIOA 外围设备中的 BSRR 寄存器。

-> 运算符是 C 语法,用于从指向的结构访问成员,在您的实例中 GPIOA 是一个指针,(*GPIOA).BSRR 相当于没有 -> 运算符。

STM32 中的外设,例如 GPIO 是内存映射的,GPIOA 指向微控制器内存中该外设的基址 space。如下图所示,取自您的处理器的 Reference manual

正如@P__J__ 在他的回答中非常正确地说的那样,BSRR 寄存器是只写的,所以你不应该使用 &= 运算符,这再次在上面链接的参考手册。

您使用错误的方式使用 BSRR 注册。它是 write-only register 你只能写它不能读它。如果您写入该寄存器的前 16 位,则可以设置引脚。如果写入最后 16 位,则会重置引脚。零写入被忽略。

所以当你访问这个寄存器时不要使用除=以外的任何东西。

->如果你不知道它的作用我只能建议你从一本好的C书开始。如果你不了解基础知识,你就无法编写 uCs。