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。
我最近买了一块 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。