搭建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。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值