寄存器版本跑马灯实验
调用库函数本质上也是修改寄存器特定位的值来实现功能的,库函数能实现的操作,寄存器基本上都可以完成。下面我们用寄存器操作实现跑马灯功能。
创建工程等与之前工程创建相同,注1:寄存器操作要尽量不影响其他位的值,如:要使能APB2,在stm32f10x.h中查找到RCC_TypeDef结构体:
那么,怎么只改变这一位呢?应该采用或运算来置1。(A|=B 意为A=A|B –C语言位或运算)
代码实现如下:
附对照表:
接下来设置IO口输入/出方式(参照参考手册):
将GPIOE.5 GPIOB.5设为普通推挽输出(注:0011为普通推挽输出 50Hz),同时输出高电平,初始灯熄灭:
在main.c中编写跑马灯程序,调用delay_ms()和led_init()函数:
应注意箭头所指位置,使用非操作将第五位置0,即1左移5位:00100000,取反11011111,再做与运算。最后,ODR寄存器操作可以换为BRR和BSRR寄存器操作,有时间想尝试一下。以上为寄存器操作实现跑马灯实验。