历史上的今天
今天是:2024年09月02日(星期一)
2021年09月02日 | STM32—SysTick系统定时器
2021-09-02 来源:eefocus
SysTick是STM32中的系统定时器,利用SysTick可以实现精确的延时。
SysTick—系统定时器
属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复。因为 SysTick 是属于 CM3 内核的外设,所以所有基于 CM3 内核的单片机都具有这个系统定时器,使得软件在 CM3 单片机中可以很容易的移植。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。
延时模式:
SysTick的延时可以有俩种模式:
1.单纯递减延时
2.利用void SysTick_Handler(void) 中断函数延时
俩种方法都涉及到一个函数,那就是SysTick 配置库函数 ,
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
// 不可能的重装载值,超出范围
if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
{
return (1UL);
}
// 设置重装载寄存器
SysTick->LOAD = (uint32_t)(ticks - 1UL);
// 设置中断优先级
NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);
// 设置当前数值寄存器
SysTick->VAL = 0UL;
// 设置系统定时器的时钟源为 AHBCLK=72M
// 使能系统定时器中断
// 使能定时器
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk;
return (0UL);
}
其主要任务是装填计时器初始值、设置时钟源、设置中断源优先级。初始值不能超过2^24,时钟源一般为72M。

1.单纯递减延时
毫秒级延时
void SysTick_Delay_ms(uint32_t ms)
{
uint32_t i;
SysTick_Config(72000); /* 设置初始值为72000 */
for(i=0;i while(!((SysTick->CTRL) & (1<<16))) ; /* 检测一次计时完成 */ } SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; /* 操作寄存器 */ } 2.利用void SysTick_Handler(void) 中断函数延时 毫秒级延时 volatile uint32_t isr_ms; void SysTick_Delay_ms_INT(uint32_t ms) { isr_ms = ms; SysTick_Config(72000); while(isr_ms); /* 在中断里递减 */ /* 失能systick */ SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } 在stm32f10x_it.c中的代码如下: extern volatile uint32_t isr_ms; /* 这个变量在bsp_systick.c里面定义 */ void SysTick_Handler(void) { isr_ms--; }
下一篇:STM32—DMA存储器到外设
史海拾趣
|
北京时间10月29日消息,据国外媒体报道,谷歌周三推出了一款免费手机导航应用,该款应用可向用户提供建议路线(turn-by-turn)。谷歌此举被认为可能会向GPS设备制造商发起攻击。 谷歌推出的新应用谷歌地图导航(Google Maps Navigation)是其手机版 ...… 查看全部问答> |
|
怎样知道已经编译好的windows ce核心是包含了.net框架的? 怎样知道已经编译好的windows ce核心是包含了.net框架的? 怎样知道.net框架的版本。 不看开发环境,只看板子上跑起来的windowsce… 查看全部问答> |
|
用USB连接的。 运行Windows CE Test Kit Server -〉connection ->start client...->connect 设备端,clientSide.exe 开始运行。(说明连接正常) 但是Quick Start 后,PC端跳出应用程序错误。 定制镜像时已经添加了cetk ,是不是SDK要重新制作的 ...… 查看全部问答> |
|
我现在用TCPMP播放视频,当TCPMP正在播放的时候,我拔掉卡,系统会给我一个拔卡事件,之后我关闭TCPMP播放。这样理论是应该是没有问题的,但是实际上操作,却偶尔发现播放器会死掉(系统还没死,只是TCPMP被卡住了)。我对播放进行跟踪,发现是播放器 ...… 查看全部问答> |
|
void Menu::OnStatic11() { // TODO: Add your control notification handler code here AfxMessageBox(_T(\"DAFAFA\")); } 在静态控件中点击时间不起作用是什么原因啊?… 查看全部问答> |




