STM32:利用寄存器点亮lLED

今天在学习普中的STM32开发教程是写一个点亮LED的程序,但其中下面这一句没想明白有什么用处。

img

之后就是移位给对应端口设置配置输出模式:

img


把第一句注释之后LED也能闪烁。
所以谁能告诉我第一句有什么用吗?

把第一句注释之后LED也能闪烁,这是巧合
GPIOC_CRL 寄存器用来初始化GPIO的工作方式,要点亮 LED ,就需要将 STM32 接LED的 GPIO 管脚设置成输出模式。
被注释掉的第一句是将 GPIOC_CRL 低 4 位清 0 ,别的位不变等
效于 GPIOC_CRL = GPIOC_CRL & 0xfffffff0; //低 4 位清
是为下一句 GPIOC_CRL 赋值配合。
第二句等效于 GPIOC_CRL = GPIOC_CRL ! 0x03;//低 2 位置 1
你需要看 STM32 寄存器手册关于 GPIOC_CRL 寄存器的描述会进一步理解

首先,一个定义变量可能是32位或16位,而要进行置位的可能是其中的某一位或几位。
第一行的作用是:把需要置位的进行清零,而其他位与 1 相与。保证原来的 1 还是1, 0 还是 0。
第二行的作用是:对需要操作的位进行置 1 。
第一行的作用,也可以没有,但是有第一行的作用,对原始数据起到保护作用,还有就是对操作位置零,以待下一步操作。