寄存器版本跑马灯实验

         调用库函数本质上也是修改寄存器特定位的值来实现功能的,库函数能实现的操作,寄存器基本上都可以完成。下面我们用寄存器操作实现跑马灯功能。

         创建工程等与之前工程创建相同,注1:寄存器操作要尽量不影响其他位的值,如:要使能APB2,在stm32f10x.h中查找到RCC_TypeDef结构体:

STM32学习之路(三)

那么,怎么只改变这一位呢?应该采用或运算来置1。(A|=B 意为A=A|B  –C语言位或运算)

代码实现如下:

STM32学习之路(三)

附对照表:

STM32学习之路(三)

接下来设置IO口输入/出方式(参照参考手册):

STM32学习之路(三)

将GPIOE.5 GPIOB.5设为普通推挽输出(注:0011为普通推挽输出 50Hz),同时输出高电平,初始灯熄灭:

STM32学习之路(三)

在main.c中编写跑马灯程序,调用delay_ms()和led_init()函数:

STM32学习之路(三)

应注意箭头所指位置,使用非操作将第五位置0,即1左移5位:00100000,取反11011111,再做与运算。最后,ODR寄存器操作可以换为BRR和BSRR寄存器操作,有时间想尝试一下。以上为寄存器操作实现跑马灯实验。

相关文章: