当前位置:   article > 正文

STM32开发问题总结_stm32开发板问题

stm32开发板问题

STM32开发问题总结

   嵌入式开发难免遇到各种坑,总结一下之前遇到的各种坑~,持续更新中

STM32发热严重

   在使用STM32时,芯片发热严重,很烫手,而且集中在芯片的某一块区域。但奇怪的是,程序可以正常运行。
   分析与解决: 很有可能是某个引脚被击穿了导致的,建议换一块芯片。

舵机抖动问题?

   在使用STM32控制12V舵机(通过3S电池直接供电)运动,舵机出现抖动?可能原因是供电电压不足,低于12V就容易出现抖动。博主还遇到过,一旦舵机出现抖动,再利用文件系统打开文件时,SD卡会出错,直接导致STM32卡住。
   分析与解决: 提高供电电压。

STM32使用无线模块时,时好时坏

   STM32使用无线模块,例如蓝牙,RF200等,与上位机进行通讯,有时候数据可以顺利发送和接收,有时候无法传输数据,时好时坏。可能原因是供电不足。博主在3S锂电池上接了一个稳压模块7.4V给舵机供电,然后另一个稳压模块5V给STM板子供电(板子内置5-3V转压),然后使用无线模块就出现以上情况,将7.4V稳压模块撤了,通讯就正常了。 其次,对于RF200这种需要天线的模块,最好装上天线!
   分析与解决: 检查供电是否正常,电池是否有电。

STM32写入代码后会卡住,需要重新断电,上电才可以运行

   检点芯片的Boot0和Boot1是否连接正确。其次可能的是,如果通过USB给板子供电,同时该USB又是串口的通讯线,如果在打开串口【特指上位机串口:此情况是串口通讯用的有线连接】的情况下,进行代码下载,则会出现该情况。
   分析与解决: 检点芯片的Boot0和Boot1;下载代码的时候关闭串口。

STM32代码中某个变量值自动改变

   在STM32开发中时,代码中的某个变量 突然自动变化,博主遇到过是一个结构体的一个变量数值自动改变(PS:这个可以通过debug分析出来)。
   分析与解决: 可能是内存溢出的问题,即内部的代码复杂,定义的变量(尤其是静态变量过多),导致内存溢出;建议在使用该变量前重新赋值,或者减少静态变量的定义(推荐后一种)。

舵机摆动幅度不对

   舵机没有按照期望的运动进行摆动(PS:尽管舵机是一种位置伺服电机,但还是能用来做类似速度模式的运动),例如,设定舵机按照某个特定的幅值做正弦摆动,但是频率一高,舵机振幅很小,甚至不动。
   分析与解决: 很有可能舵机的电流不足(可能使用了某个电流值较小的稳压模块给舵机供电),建议直接电池供电(与舵机电压匹配),或者使用电流值更大的稳压模块。

电路板突然不工作,LED不亮

   STM32电路板突然不工作,LED不亮。
   分析与解决: 首先单独检查一下电源,是不是供电正常(一没注意,电池过放了);如果电池供电正常,就得排查电路板是不是烧了。

ADC采样值不对

   STM32ADC采样值不对,而且基本稳定不变。
   分析与解决: 首先,查看ADC的驱动代码有没有问题。其次,如果确认代码没有问题的话,检查芯片的参考地和参考电压VREF ( 注:有些STM32芯片内部已经设置好了,不支持外部设置参考地和参考电压VREF,主要是封装引脚少的芯片;有些只支持设置参考电压VREF,例如STM32F407ZGT6;有些均支持设置)。然后,看看待采样的电压和芯片的通道对应的引脚是否连接好了,是否硬件连接的引脚和代码中的使用的通道是对应的。最后,可能是芯片虚焊导致的(这个博主遇到过~),可以重新焊接一下,如果还是不行,建议直接更换板子。

Error: Flash Download failed - Target DLL has been cancelled

   使用SWD下载,同时连接了STlink,报错,原因是端口占用。
   分析与解决: 将STlink拆了,尽管STlink没有连接到PC,同样会造成端口占用,也得拆了。

通讯有时候不成功,有时候成功

   因为读取欧拉角的时间略微有点长,因此开始想着让这个放到临界区(freertos),能够保证IMU读取的是同一时刻的值,但是…但是,一旦这样做,那么在这段时间内就不会进行任务切换。恰好在这段时间内如果主动的发送上位机的信号,就有可能信号无法处理,导致信号接收不到,这就导致了通讯有时候不成功,有时候成功。

taskENTER_CRITICAL();           //进入临界区	
mpu_dmp_get_data(&pitch,&roll,&yaw);                       //读取欧拉角
taskEXIT_CRITICAL();            //退出临界区
  • 1
  • 2
  • 3

   分析: 直接去掉临界区!!!

//taskENTER_CRITICAL();           //进入临界区	
mpu_dmp_get_data(&pitch,&roll,&yaw);                       //读取欧拉角
//taskEXIT_CRITICAL();            //退出临界区
  • 1
  • 2
  • 3

STM32程序下载成功后,板子卡死

   STM32程序下载成功后,板子卡死,尽管在keil里面设置了Reset and Run
   分析与解决: 可能由于板子是通过USB用电脑供电,同时USB还是串口收发线,且上位机串口的端口已经打开。这时候只要在上位机中关闭串口即可。

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

闽ICP备14008679号