三 STM32F4使用Sys_Tick 实现微秒定时器和延时

本文详细介绍了时钟在STM32中的作用,特别是SysTick定时器的配置、使用及其在实现毫秒和微秒级定时与延时中的应用,包括节能管理和避免高频率中断的影响。

更多细节参考这篇

1. 什么是时钟以及作用

1.1 什么是时钟

  1. 时钟是由电路产生的周期性的脉冲信号,相当于单片机的心脏

1.2 时钟对于STM32的作用

  1. 指令同步:cpu和内核外设使用时钟信号来进行指令同步
  2. 数据传输控制: 时钟信号控制数据在内部总线上的传输时机
  3. 外设操作:很多外设比如 GPIO USART ADC等需要时钟来控制频率和时序
  4. 节能管理: 调整时钟的频率,可以管理MCU的功耗,实现节能

2. 关于Sys_Tick 定时器

Sys_Tick 是 ARM Cortex-M4 内核的一部分, 他提供24位递减计数器, 可以用来生成周期性的中断,适合用来左滴答定时器或者提供时间基准

2.1 Sys_Tick 定时器配置步骤

  1. 首先初始化SysTick : 调用
    SysTick_Config(SystemCoreClock/1000 ) ;  //位与CMSIS 下的core_cm4.h 1760 行

函数来配置SysTick定时器的重载值
,该值基于系统时钟频率和中断频率所需的值来确定
我这里设置的是1ms中断一次(STM32F4 的系统时钟是100MHZ 一个时钟周期有 1 / 100 000 000 s 也就是10 ns ,实现1ms 需要 100 000 个 10ns )
2. 选择时钟源 : 选择SysTick的时钟源 , 一般选择系统时钟
2. 中断使能

extern volatile uint32_t SysTickUptime  ;
void SysTick_Handler(void)
{
   
   
  SysTickUptime++ ; 
}

2.2 使用 SysTick 实现毫秒级定时器以及延时

/* 毫秒级运行定时器 , 返回的是毫秒 
SysTickUptime 溢出时间大概49天 */
uint32_t millis(void) 
{
   
   
    return SysTickUptime ; 
}

/* 毫秒级延时函数  */
void delay_ms(uint32_t ms)  
{
   
   
    uint32_t now_time = millis();
    while(millis() - now_time  < ms) {
   
    }  
    
}

2.3 使用 SysTick 实现微秒级定时器以及延时

  1. 使用 SysTick 实现微秒级定时器以及延时 为什么不直接SysTick_Config(SystemCoreClock/1000000 ) ;来实现呢
  • 中断开销 : 如果SysTick定时设置成微妙产生一次中断 , 那么中断的频率会非常高,可能导致花大量的时间处理中断从而影响程序的执行效率。对于一个100MHz的系统时钟
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值