概述
51单片机和stm32单片机RS232通讯上电后时好时坏问题的一次定位
手里开发了一块STM32的单板和已有的一块51显示面板通讯,出现上电后通讯时好时坏的问题。
-
通讯示意图
MCU1:STM32F103RCT6 使用 SP3232EEY-L/TR
MCU2:AT89S52 使用MAX232
通讯参数:RS232,19200 N 1
MCU2由MCU1单板供电。 -
问题现象:
断电重新上电时,概率的出现MCU2单板无法和MCU1无法通信的问题。
重新插拔又会变好,偶尔那么来几次,MCU1,MCU2 各更换一次单板,问题现象依然存在。
折腾了好几天,因为STM32的单板是新开发的,一直怀疑程序上有什么问题,反复修改cubemx配置,修改程序进行试验。问题现象依然存在。 -
另外一个问题的记录
排除过程有几个改善的点,记录一下,和本次问题无关(主要改善了通讯数据出错问题)
1)51单片机程序无法修改,使用的配置是19200 N 1; (程序SCON=0x50);我将stm32单板通讯参数调整为19200 N 2(2个停止位);通讯出错有改善。分析可能波特率不太准,2个停止位有助于数据对齐。
2)通讯修改为单个字符发送;通讯出错有改善
#if 1
for (loop = 0; loop < len; loop++){
// timeout 100ms, 粗略估计发送每个字节约1ms
HAL_UART_Transmit(p_huart_keypad, buf++, 1, 10);
}
#else
while(HAL_UART_Transmit(p_huart_keypad, (uint8_t*)buf, len, 100)!= HAL_OK);
#endif
1. 问题分析
一番操作无果,整理思路,首先必须区分是stm32板的问题,还是51板的问题。
所以从通讯线上进行示波器分析:
接RS232 通讯线RX,TX进行波形查看:
备注:上图右侧中部,是示波器采样点。
2.发现问题
查看TX线(以stm32参照)波形:
查看TX线波形:无数据时,负电平, 有数据时出现矩形波(如图)
查看RX线波形:
查看RX线波形:通讯正常情况下:无数据时,负电平。
通讯不正常时: 无数据,电平为0(如下图)
RS232通讯知识:
1)采用负逻辑传送:
2)规定逻辑“1”的电平为 -3V ~ -13V。逻辑“0”的电平为 +3V ~ +13V,介于 -3V ~ 3V 的电压无意义。选用该电气标准的目的在于提高抗干扰能力,增大通信距离。RS-232的噪声容限位 2V,接收器将能识别高至 +3V 的信号作为逻辑“0”,将低到-3V的信号作为逻辑“1”;
3)RS232通讯空闲时的电平为逻辑“1”
这里很明显:出现问题时TX电平是不对的
3.继续排查MAX232的引脚
根据下面知识点:
查看引脚1:电平为4.1V
电平低一些,但属于RS232逻辑电平之上。
查看引脚6:电平为0V,明显不对。
max232芯片的6脚以电荷泵进行充电到对应电平(2脚10V,6脚-10V)
3.更换MAX232芯片
更换同款芯片max232ese 后功能正常。
参考:
最后
以上就是悲凉玉米为你收集整理的51单片机和stm32单片机RS232通讯上电后时好时坏问题的一次定位51单片机和stm32单片机RS232通讯上电后时好时坏问题的一次定位的全部内容,希望文章能够帮你解决51单片机和stm32单片机RS232通讯上电后时好时坏问题的一次定位51单片机和stm32单片机RS232通讯上电后时好时坏问题的一次定位所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复