概述:配置系统定时器实现延时闪烁开发板上的led2灯
PA1引脚连接led灯2,给PA1一个低电平,led2灯就会亮
![](https://img-blog.csdnimg.cn/img_convert/0f5975ca28b885978bfb43077db73a6f.png)
SysTick寄存器介绍
![](https://img-blog.csdnimg.cn/img_convert/784f789fe0bed737b9eeff1d95b7cedd.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/fb5c73b92e708fc58c7b511f28218989.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/e13fc8168fcdac31fd7c08562c76a254.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/791dec986dfc60023f9feb6fc91489d5.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/d57903f1f9a3f480362a9aba9a94a8be.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/260c284f8ec68f98e72138f63afb2239.jpeg)
编程要点
1)设置重装载寄存器的值。
2)清除当前数值寄存器的值。
3)配置控制与状态寄存器。
硬件:
1.stm32f10xc8t6开发板
![](https://img-blog.csdnimg.cn/img_convert/f47eda15b35281c2f4673a2ebf5c0592.png)
2.type c数据线
源代码:
main.c
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "SysTick.h"
int main()
{
LED_Init();
GPIO_SetBits(GPIOA , GPIO_Pin_1);
while(1)
{
GPIO_ResetBits(GPIOA , GPIO_Pin_1);
ms_delay(500);
GPIO_SetBits(GPIOA , GPIO_Pin_1);
ms_delay(500);
}
}
main.h
#include "stm32f10x.h"
void delay(uint16_t time);
led.c
#include "led.h"
#include "stm32f10x.h"
void LED_Init(void){
GPIO_InitTypeDef led_init;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
led_init.GPIO_Mode = GPIO_Mode_Out_PP;
led_init.GPIO_Pin = GPIO_Pin_1;
led_init.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&led_init);
}
led.h
#include "stm32f10x.h"
void LED_Init(void);
systick.c
#include "SysTick.h"
#include "stm32f10x.h"
void ms_delay(uint32_t ms)
{
uint32_t i;
SysTick_Config(72000);
for(i=0;i<ms;i++)
{
while( !((SysTick->CTRL)&(1<<16)));
}
SysTick->CTRL &=~ SysTick_CTRL_ENABLE_Msk;
}
void us_delay(uint32_t us)
{
uint32_t i;
SysTick_Config(72);
for(i=0;i<us;i++)
{
while( !((SysTick->CTRL)&(1<<16)) );
}
SysTick->CTRL &=~ SysTick_CTRL_ENABLE_Msk;
}
systick.h
#include "stm32f10x.h"
void ms_delay(uint32_t ms);
void us_delay(uint32_t us);
效果展示:
![](https://img-blog.csdnimg.cn/img_convert/cf672f27add1f56bad964ca993f3652c.gif)