Stm32-标准库-定时器定时

定时器是如何定时的呢

我们知道芯片是有工作频率的

而工作频率是什么呢

就是一秒钟工作多少次

比如工作频率为1hz相当于每秒工作1次,1Mhz相当于每秒工作100万次

那么工作频率是72Mhz就相当于每秒工作72百万次,也就是72000000次

而分频就是降低频率

什么意思呢

就比如说2分频就相当于把当前频率除以2

也就是72Mhz进行2分频就变成了36Mhz

进行72分频就变成了1Mhz

如果进行7200分频的话

工作频率就会变成了10000hz,也就是每秒工作10000次

那么这个频率怎么用来计数呢

就比如说工作频率是10000hz,也就是每秒工作10000次

如果这个时候,专门有个机器去数他工作了多少次

那么当数到10000的时候,是不是就正好过去了一秒钟

那么当数到20000的时候,是不是就正好过去了两秒钟

这就是定时器定时的原理

也就是说定时器就是可以数这个工作次数的存在

理论结束,开始实践

首先,stm32里面不止一个定时器,我们要选择使用哪个

比如说使用6号定时器,又因为定时器是一个设备

所以给个时钟先

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);

因为定时器是通过数频率工作的,那么这个频率是从哪来的呢

我们选择这个频率来自内部时钟

不用管内部时钟是什么,只需要知道他可以提供72Mhz的频率给6号定时器

TIM_InternalClockConfig(TIM6);

也就是说每数72

STM32微控制器系列中,想要定时1us(微秒),通常会利用其丰富的定时器资源,比如SysTick定时器或者通用定时器如TIM1、TIM8等。这里以TIM1为例说明如何设置基本的1us定时: 1. **启用SysTick定时器**(如果你需要精确到1us,推荐使用SysTick,因为它有更高的精度和较低的中断开销): - 首先,需要配置SysTick的工作模式,例如每1000个系统周期更新计数器,这样大约对应1us时间间隔。 ```c // STM32F10x中,启用SysTick定时器 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SYSTICK, ENABLE); SysTick_Config(SystemCoreClock / 1000); // 设置计数值,SystemCoreClock是CPU频率 ``` 2. **配置定时器中断**: - 为了让定时器触发中断,在必要的中断管理函数里开启SysTick中断,并连接适当的回调函数处理1us事件。 ```c NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = SYSTICK_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); ``` 3. **编写回调函数**: - 创建一个空的回调函数,用于处理1us定时器到期的事件。 ```c void SysTick_Handler(void) { /* 这里可以添加你的1us时间相关操作 */ // 如果你需要准确到1us,那么这里的代码应该尽可能简单快速 // 例如计数器加1或者其他简单的任务 } ``` 4. **定期检查和调整时间间隔**: - 如果系统性能稳定,通常不需要调整。如果系统负载变化,可能需要动态调整SysTick的分频系数来保持1us的准确性。 注意:实际使用时,由于硬件寄存器和时钟频率的不同,可能会有一些误差,所以测试是非常重要的。另外,对于其他型号的STM32定时器,配置过程可能会有所差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值