stm32 - 使用通用定时器延迟 - 比预期的要快
问题描述
我已经使用我的 nucleo-g070 板上的一个基本计时器(不是 systick)编写了一个延迟函数。默认时钟为 16MHz(如果我查询 APB1 频率,我得到 16000000)。但是,LED 闪烁的速度太快(几乎看不到),所以确实出了点问题。
这是代码:
void delay_setup(void) {
rcc_periph_clock_enable(RCC_TIM6);
timer_set_prescaler(TIM6, rcc_apb1_frequency / 1000000 - 1);
timer_set_period(TIM6, 0xffff);
timer_one_shot_mode(TIM6);
}
void delay_us(uint32_t us) {
TIM_ARR(TIM6) = us;
TIM_EGR(TIM6) = TIM_EGR_UG;
TIM_CR1(TIM6) |= TIM_CR1_CEN;
while (TIM_CR1(TIM6) & TIM_CR1_CEN);
}
我也尝试过其他计时器,结果相同。然而,发生了一件奇怪的事情——我错误地写了 TIM2(不知道 MCU 没有它),我得到了预期的 1s 延迟。同样,在数据表中没有指定 TIM2。那么这里发生了什么?
解决方案
推荐阅读
- postgresql - PostgreSQL 用于 64 位数字的按位移位运算符
- php - 基于 PHP 的混合移动应用的 Google AdMob
- git - 解决生产中子模块中的手动覆盖文件
- javascript - 与 Leaflet Markercluster 开玩笑
- postgresql - Postgresql 13 存储过程问题
- javascript - Django-autocomplete-light==3.8.2 & Dajngo formset 渲染问题
- kubernetes - 不同 Mutating Webhook 的顺序是什么,如何在另一个之前添加新的 mutating webhook?
- amazon-web-services - 如何获取与 AWS SAM 的本地调用关联的账户 ID?
- python - 如何在python中扫描像素数据框中的平方区域以找到最高值?
- ansible - Ansible playbook 用于创建用户友好的应用程序