stm32f4通过配置寄存器和位操作实现跑马灯
寄存器实现
如下图所示为LED和stm32f4的硬件连接图,在此通过配置GPIOF_9输出高低电平以实现LED0的闪烁:
在配置GPIOF_9之前需要先使能GPIO的外设时钟,可以通过配置RCC AHB1寄存器实现,RCC AHB1寄存器如下图所示:
从图中可以看出,要使能GPIOF只需要对该寄存器的第5为置位即可,对于置位操作,只需要将该位与1相或即可,即:
RCC->AHB1ENR |= 1<<5;
接下来就该初始化GPIOF_9了,上一篇文章说到,stm32f4单片机拥有7组GPIO,每一组GPIO都含有16个IO口,且每一组GPIO都拥有10个寄存器,其中有4个寄存器用于对GPIO的模式进行配置,这四个GPIO寄存器分别是分:GPIOx_MODER,GPIOx_OTYPER
GPIOx_OSPEEDR,GPIOx_PUPDR,分别对应模式控制寄存器,输出类型寄存器,输出速度寄存器和上下拉寄存器,下面分别对4个GPIO寄存器进行配置:
- GPIOx_MODER
要实现LED0的闪烁,需要GPIOF_9在一定时间内循环输出高低电平,为此需要设置GPIOF_9为通用输出模式,从上图可以看出,我们需要配置该寄存器第19和18位为:0和1
GPIOF->MODER &= ~(3 << (2*9)); //先将19和18位清零
GPIOF->MODER |= 1 << (2*9); //对18位置1
这样便实现了配置GPIOF_9位通用输出模式了
- GPIOx_OSPEEDR
在这里配置GPIOF_9的输出速度为25MHz,从图中可以看出,和GPIOx_MODER寄存器的配置是一样的
GPIOF->OSPEEDR &= ~(3 << (2*9)); //先将19和18位清零
GPIOF->OSPEEDR |