当前位置:   article > 正文

搭建Stm32遇到的问题汇总_stm32常见问题

stm32常见问题

问题一:右侧watch窗口无法显示数据动态变化

现象:在main循环中加入累加的数值都不变化

 现象2:单步执行卡在如下函数

原因:一般是因为没有用微库进入半主机模式

解决措施:

措施一:打开勾选下面的。

措施二:上面没办法解决就检查板子供电,不能只是仿真器供电,可能是这个供电功率不足。

措施三:有可能是cubeMx的版本有bug,然后重新安装一个版本的CubeMx。

问题二:CubeMx生成代码卡死

解决措施:打开工程源文件夹,要删除其他所有文件仅保持如下圈圈里文件。

问题三:PWM周期计算不准

为什么时钟频率为18M,经过18倍分频,设置触发值为20000时,周期不是20ms,而是21ms?

此时我的定时器时钟为18M,分频系数为18,counter period为20000,经过18分频后,定时器时钟为1M,电平反转周期等于 20000/1000000 = 1/50 = 0.02s,约为20ms,单个电平持续时间为20ms,两个电平则为40ms左右,因此基本符合,但是为什么不是精确的20ms呢?

而将分频数PSC改为17,counter period的值改为19999后就是正好的20ms,这是为什么呢?

原因是:

1).TIM Period:定时周期,实质是存储到重载寄存器TIMx ARR 的数值,脉冲计数器从0累加到这个值上溢或从这个值自减至0下溢。这个数值加1然后乘以时钟源周期就是实际定时周期。本实验中向该成员赋值为 999,即定时周期为 (999+1) * T为时钟源周期

2).TIM Prescaler:对定时器时钟 TIMxCLK 的预分频值,分频后作为脉冲计数器 TIMxCNT 的驱动时钟,得到脉冲计数器的时钟频率计算方式是 :

fcnt = ftim_clk/ (N+1)

本实验给分频为18分频,即N=18-1 = 17,这个N就是填入到寄存器PSC中的值。已知AHB 时钟频率为18 MHz、TIMxCLK 为1 8MHz,所以输出到脉冲计数器TIMx CNT 的时钟频率为

f_CNT=18 MHz/(17+1)=1 MHz。

最终得到的分频后时钟频率为1MHz

总而言之。STM32存在1分频,分频数 = PSC寄存器值+1,填入寄存器的值是分频数减一。脉冲计数器又是从0开始累加而不是从1开始累加,所以计数20000次的寄存器值为19999。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/83626
推荐阅读
相关标签
  

闽ICP备14008679号