STMCU小助手
发布时间:2022-5-18 21:00
|
一、Systick滴答定时器是什么? Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。 定时器既是在规定时间之后执行某个操作。 Systick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。比如UCOS中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统中,都采用Systick做UCOS心跳时钟。 二、Systick一般用来做延时,精确延时 一共4个Systick寄存器 CTRL SysTick 控制和状态寄存器 LOAD SysTick 自动重装载初值寄存器 VAL SysTick 当前值寄存器 CALIB SysTick 校准值寄存器 三、systick定时器原理 这个定时器是设置一个初值,然后这个初值减数到0,就是定时完成,完成之后可以产生中断,也可以不使用中断。
第0位是使能位,可以使能或者使能定时器 第1位是使能中断位,减数结束之后是否产生中断。 第2位是时钟选择位,可以选择外部的或者内部时钟作为时钟源。 第16位是标志位,减数到0之后该位被置位1,读取过后自动清清零。 四、uSysTick 重装载数值寄存器-LOAD
当当前值寄存器减数到0,自动会将把这个RELOAD的值赋给当前值寄存器。 if(VAL == 0) VAL = RELOAD 五、SysTick 当前值寄存器- VAL
VAL就是从初值(RELOAD)一直减一,倒数到0的时候,重新将初值(RELOAD)赋给VAL。 六、滴答定时器的实现 对于STM32,外部时钟源是HCLK(AHB总线时钟)的1/8内核时钟是HCLK时钟 1、选择时钟源 SysTick_CLKSourceConfig();//选择时钟源 misc.c文件中
SysTick_Config(uint32_t ticks) //初始化systick,时钟为HCLK,并开启中断 core_cm4.h文件中
2、编写延时函数 3、设置中断优先级分组 NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2); 一般使用中断都需要在最开始对我们的优先级进行分组,分好之后再进行优先级的设置。 尽量不要在同一个程序里面频繁的改变分组,频繁切换分组可能会使程序出现不可预料错误。 七、用中断的方式实现delay延时 Systick中断服务函数:void SysTick_Handler(void);
注意: uCortex-M系统中,Systick代码可以通用。 如果使用中发现延时不一致,问题一般都是因为不同内核时钟不一样而已。修改ticks值即可。 参考代码如下:
|
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
OpenSTLinux 6.1发布:M33-TD加持+安全升级,STM32MPU开发效率翻倍!
【经验分享】STM32CubeIDE汉化
手把手教你VSCode搭建STM32开发环境
RTOS在STM32中的应用
【下载有礼】STM32 Finder华为应用商店正式上线!移动选型工具助力开发效率升级
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
微信公众号
手机版