2023版 STM32实战4 滴答定时器精准延时
  fLutY3C6VwgE 2023年11月24日 15 0

SysTick简介与特性

-1- SysTick属于系统时钟。

-2- SysTick定时器被捆绑在NVIC中。

-3- SysTick可以产生中断,且中断不可屏蔽。

SysTick的时钟源查看

通过时钟树可以看出滴答的时钟最大为72MHZ/8=9MHZ

2023版 STM32实战4 滴答定时器精准延时_系统时钟

2023版 STM32实战4 滴答定时器精准延时_#include_02

代码编写(已经验证,可直接拷贝使用)

SysTick源文件

#include "Systick.h"

static u8  fac_us=0;										   
static u16 fac_ms=0;							

void Sys_Tick_Init(void)
{
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
	fac_ms=SystemCoreClock/8000;
	fac_us=SystemCoreClock/8000000;
}


void Delay_Ms(u16 nms)
{
	u32 temp;
	//倒数值,fac_ms代表一毫秒所需节拍数,与形参乘法运行得到所需的全部节拍数
	SysTick->LOAD=(u32)nms*fac_ms;
	//清空计数器
	SysTick->VAL =0x00;		
	//对控制寄存器第0位写1代表始能
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;
	//这句话的意思控制寄存器是使能的且时间还未到达,就会一直卡在此处
	do
	{
		temp=SysTick->CTRL;
	}while((temp&0x01)&&!(temp&(1<<16)));	
	//对控制寄存器第0位写1代表示除能
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;	
	//清空计数器
	SysTick->VAL =0x00;	
	
}

void Delay_Us(u32 nms)
{
	u32 temp;
	//倒数值,fac_ms代表一毫秒所需节拍数,与形参乘法运行得到所需的全部节拍数
	SysTick->LOAD=(u32)nms*fac_us;
	//清空计数器
	SysTick->VAL =0x00;		
	//对控制寄存器第0位写1代表始能
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;
	//这句话的意思控制寄存器是使能的且时间还未到达,就会一直卡在此处
	do
	{
		temp=SysTick->CTRL;
	}while((temp&0x01)&&!(temp&(1<<16)));	
	//对控制寄存器第0位写1代表示除能
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;	
	//清空计数器
	SysTick->VAL =0x00;	
	
}



主函数

#include "stm32f10x.h"
#include "Systick.h"

void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	GPIO_Init(GPIOE, &GPIO_InitStructure);

}



int main(void)
{	
	Sys_Tick_Init();
	LED_Init();
	while(1)
	{
		GPIO_ResetBits(GPIOB,GPIO_Pin_5);
		GPIO_ResetBits(GPIOE,GPIO_Pin_5);
		Delay_Ms(500);
		GPIO_SetBits(GPIOB,GPIO_Pin_5);
		GPIO_SetBits(GPIOE,GPIO_Pin_5);	
		Delay_Ms(500);		
	}	
}

工程获取

三连后私信获取

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月24日 0

暂无评论

推荐阅读
  QtpjMRSUUfXb   2023年12月08日   36   0   0 引脚#include看门狗
  tprTMCWDkFAR   2023年12月07日   11   0   0 头文件#include初始化
  QtpjMRSUUfXb   2023年12月06日   16   0   0 卷积#includeCUDA
  UYSNSBVoGd8R   2023年12月08日   12   0   0 引脚#include#define
fLutY3C6VwgE