【STM32】各种小bug汇总

  这篇博客会不定期持续更新,主要目的是汇总一下我在日常使用STM32单片机时遇到的一些比较奇怪的bug,或者比较独特的注意事项,以免以后忘记了,又调很久的bug,结果发现是一些特殊情况。

这里是目录

  • 定时器
    • 输入捕获
      • HAL库修改输入捕获的极性
    • PWM输出
      • 标准库初始化配置TIM1、TIM8高级定时器
  • 无法烧录程序
    • 提示Could not stop Cortex-M device!Please check the JTAG cable.
    • 提示No Cortex_M SW Device Found、Error: Flash Download failed - Target DLL has been cancelled

定时器

输入捕获

HAL库修改输入捕获的极性

  1. HAL库在用库函数调整输入捕获的极性时,要先重置上一次的设定,才能修改成功:
TIM_RESET_CAPTUREPOLARITY(&htim1,TIM_CHANNEL_1);
TIM_SET_CAPTUREPOLARITY(&htim1,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_RISING);
  1. 如上述代码所示,在用TIM_SET_CAPTUREPOLARITY()函数修改输入捕获的极性前,要先用TIM_RESET_CAPTUREPOLARITY()函数重置一下设置,才能修改成功,否则会无法修改。(这一条目前只在STM32F407系列单片机上使用过,不确定其他系列单片机是否有这种要求,当然也有可能HAL库更新到某一版本后就没有这个要求了)

PWM输出

标准库初始化配置TIM1、TIM8高级定时器

  1. 标准库在初始化高级定时器TIM1、TIM8时,和初始化普通定时器不同,需要多调用一个函数才能正常输出PWM信号:
TIM_CtrlPWMOutputs(TIM8,ENABLE);
  1. 这一条目前只在STM32F407系列单片机上使用过,不确定其他系列单片机是否有这种要求,当然也有可能HAL库更新到某一版本后就没有这个要求了

无法烧录程序

提示Could not stop Cortex-M device!Please check the JTAG cable.

  1. 弹出如下图所示的两个提示框
    【STM32】各种小bug汇总_第1张图片
    【STM32】各种小bug汇总_第2张图片
  2. 我出现这个问题的原因非常奇怪,是因为我板子上的复位电路(如下图所示,按键没按下时,复位信号线被上拉电阻R2拉高,按下后复位信号线上电平被开关拉低至GND从而产生复位,电容的目的是为了消抖防误触等)里的电容坏了,导致NRST信号线被拉低至了0.7V左右,从而芯片一直处于复位状态而产生的这个bug。把该电容去掉或者更换一个新的后该问题即得到解决,可以成功烧录程序。
    【STM32】各种小bug汇总_第3张图片

提示No Cortex_M SW Device Found、Error: Flash Download failed - Target DLL has been cancelled

  1. 如下图所示,出现这个问题的原因是,PLL锁相环电路设置不正确导致芯片运行频率过高锁死(一般情况都是,原本跑在8MHz晶振板子上的程序,换到了一个25MHz晶振的板子上运行,你不知道它是25MHz或者忘记修改程序了而导致的)
    【STM32】各种小bug汇总_第4张图片
    【STM32】各种小bug汇总_第5张图片
  2. 解决办法也很简单,因为STM有三种启动模式(具体可以参考我这篇博客:STM32单片机的三种启动模式),而只有一种是从默认的主闪存存储器启动(即从STM32的片上Flash启动,STM32的片上Flash也是存储用户编写的程序的地方),因此修改BOOT引脚的高低电平,不从flash启动,芯片就不会因频率过高而自锁,从而就可以烧录进去修改后的设置正确的程序,再把BOOT引脚改过来,即可正常使用。

你可能感兴趣的:(STM32单片机,stm32,单片机,bug)