c - 带寄存器的 Stm32 定时器计数器
问题描述
我尝试在 STM32f103c8t6 (bluepill) 上使用 timer1。我阅读了数据表和互联网响应/问题。但是我无法理解“如何使用寄存器调整周期值”。我正在使用带有 HAL 库的计时器并计算时序计算、周期和预分频器值等。
(period)*(prescaler) / (clock Speed) = second
这是我已经知道的公式。
我的时钟速度是 72Mhz,我将预分频器调整为 1000。我想将周期值设置为 72000,我将有 1 秒计时器。但我不知道如何调整周期值,它在哪里。
void TIM1_Config(){
RCC-> APB2ENR |= 0x00000400; //TIM1 CLK Enable
TIM1-> CR1 |= 0x0083; //Auto Reload,Update Request Source, Counter Enable
TIM1-> DIER |= 0x0003; //CC1 Interrupt Enable, Update Interrupt Enable
TIM1-> ARR = 0x0064; //100 is set as Auto Reload Value
TIM1-> PSC |= 0x03E8; //1000 is set as Prescaler Value
TIM1-> (period value I need it)???? // it will set 72000
}
解决方案
首先,请注意 TMR 时钟可能与您的系统时钟不同。因此,请确保您正确调整了 APB2 时钟。
假设您的 APB2 时钟也是 72 MHz,对于 1 秒周期,您需要以某种方式将其除以 72000000 (72e6)。您需要使用 ARR 和 PSC 寄存器,这样(ARR + 1) * (PSC + 1) = 72e6
. 请记住,这些寄存器是 16 位的,因此它们不能大于 65535。
一种可能的组合是:
TIM1->PSC = 1124;
TIM1->ARR = 63999;
请注意,我没有检查您的代码/TMR 设置。
推荐阅读
- javascript - 仅显示该日期的信息
- r - 这个混合效应模型的最佳“公式”是什么
- python-3.x - 在 Strava API v3 中获取所有运动员活动的问题
- javascript - 转换对象的json数组
- java - 如何更改按下按钮时 recyclerView 项目的颜色?
- python - 如何自动将数据推送到我的网站并相应地重新呈现?
- java - CompletableFuture - 并行运行多个休息调用并获得不同的结果
- c# - 使用 LINQ 如何从列表中的列表中进行选择
- sql - 使用集合运算符查询来查找给定问题的结果
- ms-access - MS ACCESS - 如何通过多个组合框值过滤拆分表单的数据表