遇到过的一些坑
作者有话说
这些年遇到些奇奇怪怪的问题(坑);由于没有记录或者记录后有一些原因又给丢了;
有些网上能找到答案的还好,很快就解决了;
有些网上找不到的,到处查找原因,耗时又耗力,还不见效果;
总有一些感觉,我是不是有衰神附体,撒么子坑我都会掉进去,就感觉全世界就只我遇到了一样,难啊!!!
今天突然工作空闲下来,就把想起的一些记录下,说不定也方便和我一样的人(如果跟我有同感的举个爪,好让我不感到卑微啊(●’◡’●))
1、串口问题
1.1、串口接收数据问题(程序导致)
在一个NB串口与MCU串口通信的项目里遇到一个奇怪的问题,MCU串口初始化看了下啥的没问题,程序也能正常的发送数据,但就是接收不到数据,与demo程序比对没问题;更奇怪的是如果这是再将MCU的UART_RX与串口工具的RX相接(也接了GND)时串口接收就正常了,测试了下百分百是这现象。
程序如下:
导致原因:
硬件串口电平不匹配问题(想要明白这个可以去了解下,串口传输数据0,1逻辑)
解决方法:
将串口接收脚上拉使能即可。
GPIO_InitStruct.Pull = ENABLE;
**注意:**程序里的配置一定要和串口调试助手里的一置,否者会乱码
有看到网上红框内程序和助手不一致导致问题的,这里随口提下
1.2、串口接收数据问题(外部接线导致)
先说下事情经过:
要求用MCU串口通过红外用约定好的红外串口协议进行数据传输,因为红外传输在调试时不方便(发送方和接收方要隔得近些才能更好的保证传输正确率)我就在红外TX、RX的板子探点处引线接到串口工具上,然后编写完成程序后发现MCU可以红外发送,但红外接收不到数据(真是的,更上面串口问题是一般人不会遇到这种低级问题),接线如下:
导致原因:
串口工具的TX接到了MCU的RX,影响了接收脚的电平,导致接收数据失败(推测可能是串口工具的TX未传输数据时有强输出高电平)
解决方法:
将串口工具断开即可。
1.3、串口在MCU休眠后还会打印\0\0\0问题
导致原因:
休眠前没有将串口不使能,或去初始化,程序休眠后有定时器短暂唤醒,串口脚电平不确定导致的
解决方法:
修面前不使能串口,TXRX引脚配置推挽置低。
2、低功耗问题
2.1、低功耗时引脚该怎么配置才是最低功耗的呢
对于刚接触这一行的我就这还用想吗,不直接输出低电平不久行莫。
现实啪啪打脸,真疼!
以我目前掌握的可以大致分为以下三类情况:
2.1.1、MCU一直都没有用到的引脚,且没接入外设(最简单)
正解:对于这种MCU引脚的情况,还是要配置的,一般都是配置成高阻态模式;但高阻态又分为开漏置高,模拟输入,输入不使能这几种方式;对于这种悬空的引脚配置推挽置低是最合理的,因为有些产品使用环境恶劣,潮湿,如果应交有电平就会导致漏电
2.1.2、MCU休眠后没有用到的引脚,而且接入外设(较复杂)
正解:这个需要根据原理图来配置引脚输出电平状态
比如:有些因连接的是moss管充当的是控制一个模块功能是否上电工作的开关,假如是输出高时是关闭模块,输出低时是使用模块功能,那么你此时休眠后是肯定不能让该脚输出低电平的,这样会增加功耗。反正他的原理就是不管你输出高还是输出低,那个可以关闭这个模块你就配置成那个。
例如:下图EPW电路有焊接但并未使用,这里CTL2就需要配置为推挽置高
2.1.3、MCU休眠后通信引脚(UART、IIC、SPI)(较复杂)
对于休眠状态,如果是使用LPUART等自带低功耗模式的就不需要考虑,其他的就需要根据产品功能考虑了(一般都是使用时开启,不使用关闭),如果需要关闭的配置成推挽置低,重置uart即可,因为对于uart,iic,spi等如果有点压很可能会回流电导致功耗。
2.2、以前遇到过的功耗问题
2.2.1、设备休眠后功耗较高,但放着不动,功耗会慢慢的降下去
用设备查看后发现休眠“低”功耗较高而且唤醒曲线不正常,表现为不平稳波动,
原因:是设备中的电容在充电放电导致,最根本原因还是芯片引脚没有正确配置
3、NB模组问题
AT+CGATT?网络一直附着失败
可能以下几个原因:
1、 天线没接,增益不够。
2、sim流量卡没有流量了。
3、模块供电不足。
4、卡问题(建议换张测试过ok卡验证);
卡问题有很多情况:卡类型选错(模组支持卡,要与选着卡相匹配)
我就遇到过4G模组用电信卡出问题,解释原因相比移动、联通,电信信号差
出现问题分别对照确认一般来说即可解决。