SysTick_Config配置systic中断间隔时间

本文解析了STM32中SysTick_Config函数的工作原理及应用,介绍了如何通过设置参数实现精确延时,并提供了选择不同时钟源的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很奇怪Systic_Config(unit32_t ticks)这个函数在mdk里面找不到定义但是编译却没有问题。但是这个配置还是相当有用的,可以通过设置时间进入systic中断实现精准延时等功能。于是在网上找到了Systic_Config的描述,解决了心中的疑惑。

SysTick_Config(uint32_t ticks):设置系统嘀嗒时钟并使能中断:

         STM32中与CM3内核描述不太一样,这个时钟源有两个选择:AHB/8AHB,在该函数中是选择了HCLK(SysTick_CTRL_CLKSOURCE_Msk),所以定时时间=ticks HCLK,当要定时10ms,而HCLK24MHz时,ticks 10000 24 240000

         如果需要选择HCLK/8,可以直接修改这个函数,或在这个函数后跟随misc中的SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)来设置。

### STM32 SysTick_Config 函数详解 #### 配置与初始化 SysTick是一个24位向下计数的定时器,广泛用于嵌入式系统中的延时和周期性事件触发。`SysTick_Config()`函数用来设置SysTick定时器的时间间隔以及启动它。 对于运行频率为72MHz的STM32F1系列微控制器而言,当调用`SysTick_Config(SystemCoreClock/1000)`时,意味着每毫秒产生一次中断[^1]。这表明如果希望实现精确到毫秒级的操作控制,可以通过此方法来达成目的。 #### 实现细节 具体来说,在执行如下代码片段之后: ```c if (SysTick_Config(SystemCoreClock / 1000U)){ /* 如果配置失败则进入死循环 */ while (1){ ; } } NVIC_SetPriority(SysTick_IRQn, 0x00U); ``` 这段程序不仅完成了对SysTick定时器的基本设定——即让其每隔一毫秒触发一次中断;还设置了该中断优先级为最低级别(数值越低代表优先级越高),从而确保其他更高优先级别的ISR能够得到及时响应[^3]。 #### 应用实例 下面给出了一段完整的应用示例,展示了如何利用上述提到的功能完成简单的LED闪烁操作: ```c int main(void) { RCC_Configuration(); LED_Init(); // 设置SysTick定时器为1ms中断一次 SysTick_Config(72000); while (1) { if (yTime > 5000) { // 每隔5秒切换LED状态 GPIO_WriteBit(LEDPORT, LED1, Bit_RESET); } else { GPIO_WriteBit(LEDPORT, LED1, Bit_SET); } if (yTime > 10000) yTime = 0; if (!X0) { GPIO_WriteBit(LEDPORT, LED2, Bit_SET); } else { GPIO_WriteBit(LEDPORT, LED2, Bit_RESET); } } } // 中断服务例程 void SysTick_Handler(void) { yTime++; } ``` 在此基础上,通过调整传递给`SysTick_Config()`参数的不同值可以改变定时器溢出时间长度,进而影响整个系统的反应速度或特定功能模块的工作模式[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值