背景:
最近在调试一块TMS320F2812的电路板
使用了2812的UARTA及UARTB
因为是电机系统,所以外接PC机的UARTB加了一个串口隔离芯片后连接外部线缆
UARTA在系统内与另外一颗处理器通讯
设备不允许同时使用两个串口,所以加了保护机制
由于缺件,所以UARTB的串口隔离芯片没有焊接,即SCIBTX和SCIBRX没有接任何连接
调试时发现,串口A数据通讯异常。
问题的解决:
用仿真器跟了下代码,发现上电UARTB会受到0x00,即串口B收到了数据,此时再和串口A通讯,就会触发保护机制,造成串口A通讯异常。
查了一下TMS320F2812的datasheet,有如下发现:
2812的串口A有内部上拉;
2812的串口B没有内部上拉。
对于我的电路板,串口B的RX、TX相当于浮空,由于串口线空闲为高电平,起始位为低电平,所以浮空的管脚可能会到导致上电串口B收到0x00或其他数据。
TMS320F28335没有这个问题:
当初看2812的串口区别时只是注意到了可以串口A下载代码,电路上的这个细节没有注意到。
Ling Zhu2:
感谢分享~
背景:
最近在调试一块TMS320F2812的电路板
使用了2812的UARTA及UARTB
因为是电机系统,所以外接PC机的UARTB加了一个串口隔离芯片后连接外部线缆
UARTA在系统内与另外一颗处理器通讯
设备不允许同时使用两个串口,所以加了保护机制
由于缺件,所以UARTB的串口隔离芯片没有焊接,即SCIBTX和SCIBRX没有接任何连接
调试时发现,串口A数据通讯异常。
问题的解决:
用仿真器跟了下代码,发现上电UARTB会受到0x00,即串口B收到了数据,此时再和串口A通讯,就会触发保护机制,造成串口A通讯异常。
查了一下TMS320F2812的datasheet,有如下发现:
2812的串口A有内部上拉;
2812的串口B没有内部上拉。
对于我的电路板,串口B的RX、TX相当于浮空,由于串口线空闲为高电平,起始位为低电平,所以浮空的管脚可能会到导致上电串口B收到0x00或其他数据。
TMS320F28335没有这个问题:
当初看2812的串口区别时只是注意到了可以串口A下载代码,电路上的这个细节没有注意到。
user78960159:
回复 Ling Zhu2:
我的代码是这样的:
…
UARTA_RX_ISR()
{
…
com_rx();
…
}
UARTB_RX_ISR()
{
…
com_rx();
…
}
com_rx是处理串口数据的一个函数,这点不太合理,中断有两个,但是处理数据的函数是共用的!
测试时发现,串口A可以正常接收数据,接收的数据也是对的,但是就是触发保护机制。
在进一步将断电设置在com_rx函数中,才发现上电后代码会运行到这个函数设置断点的地方,此时并没有给串口A发数据。
随后查阅2812数据手册找到了原因,并对比了28335数据手册