SysTick系统定时器

1. 使用系统定时器实现流水灯效果。

2. 代码:

  main.c

#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_systick.h"

int main(void)
{		
	LED_GPIO_Config();
	while(1)
	{
		//方法1
		/*绿灯*/
		GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);	/*开灯*/
		SysTick_Delay_ms(500);
		GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);	//关灯
		SysTick_Delay_ms(500);	
		
//		//方法2
//		LED_G(OFF);	//关灯
//		SysTick_Delay_ms(500);
//		LED_G(ON);		/*开灯*/
//		SysTick_Delay_ms(500);
	}

}

  

  bsp_systick.c

#include "bsp_systick.h"

void SysTick_Delay_us(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; 
}

void SysTick_Delay_ms(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; 
}

  

  bsp_systick.h

#ifndef __bsp_systick_h
#define __bsp_systick_h
#include "stm32f10x.h"
#include "core_cm3.h"

void SysTick_Delay_us(uint32_t us);
void SysTick_Delay_ms(uint32_t ms);


#endif /*__bsp_systick_h*/

  

  bsp_led.c

#include "bsp_led.h"

void LED_GPIO_Config(void)
{
	GPIO_InitTypeDef	GPIO_InitStruct;
	
	RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK,ENABLE);
	
	GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
	
}

  

  bsp_led.h

#ifndef __bsp_led_h
#define __bsp_led_h

#include "stm32f10x.h"
//方法1
#define LED_G_GPIO_PIN			GPIO_Pin_0
#define LED_G_GPIO_PORT			GPIOB
#define LED_G_GPIO_CLK			RCC_APB2Periph_GPIOB

//方法2
#define ON	1
#define OFF 0
#define LED_G(a)	if(a)	GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);	\
									else GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
									

void LED_GPIO_Config(void);

#endif /*__bsp_led_h*/

  

3. 参考资料

  • SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。
  • 因为 SysTick 是属于 CM3 内核的外设,所以所有基于 CM3 内核的单片机都具有这个系统定时器,使得软件在 CM3 单片机中可以很容易的移植。
  • 编程要点
    • 设置重装载寄存器的值
    • 清除当前数值寄存器的值
    • 配置控制与状态寄存器
  • 原理图
  •  
  •  


4. 总结

 

posted @ 2022-02-17 22:41  JRS077  阅读(118)  评论(0编辑  收藏  举报