首页 > 代码库 > STM32跑马灯

STM32跑马灯

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "sys.h"
int main(void)
{
delay_init();
LED_Init();
while(1)
{
LED0=0;
LED1=1;
delay_ms(300);
LED0=1;
LED1=0;
delay_ms(300);
}

}

代码包含了#include "led.h"这句,使得 LED0、LED1、LED_Init 等能在 main()函数里被调用。这里我们需要重申的是,在固件库 V3.5 中,系统在启动的时候会调用 system_stm32f10x.c 中的函数 SystemInit()对系统时钟进行初始化,在时钟初始化完毕之后会调用 main()函数。 所以我们不需要再在 main()函数中调用 SystemInit()函数。当然如果有需要重新设置时钟系统,可以写自己的时钟设置代码,SystemInit()只是将时钟系统初始化为默认状态。
main()函数非常简单,先调用 delay_init()初始化延时,接着就是调用 LED_Init()来初始化GPIOB.5 和 GPIOE.5 为输出。最后在死循环里面实现 LED0 和 LED1 交替闪烁,间隔为 300ms。上面是通过位带操作实现的 IO 操作,我们也可以修改 main()函数,直接通过库函数来操作IO 达到同样的效果.

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "sys.h"
int main(void)
{
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);//PB5输出低,LED0=0;
GPIO_SetBits(GPIOE,GPIO_Pin_5);//PE5输出高,LED1=1;
delay_ms(300);//延时300ms
GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5输出为高,LED0=1;
GPIO_ResetBits(GPIOE,GPIO_Pin_5);//PE5输出为低,LED1=0
delay_ms(300);//延时300ms
}
}

将主函数替换为上面代码,然后重新执行,可以看到,结果跟用位带操作一样的效果。

STM32跑马灯