想请问一下有没有人遇到过这样的问题:
我用uart发出信号给下位机,中间经过一个RS485收发器,单片机上P2.12引脚控制RS485收发器的Enable,发送信号时,置P2.12高,发送完信号后,立刻变为低,因为还要从下位机接收信号。发送代码如下:
void bat_sendSOCReq()
{
LPC_GPIO2->SET |= (1<<12);
while(!((UART_SELECtiON_Batt->LSR)>>0x05)&0x01);
UART_SELECTION_Batt->THR = 0x01;
while(!((UART_SELECTION_Batt->LSR)>>0x05)&0x01);
UART_SELECTION_Batt->THR = 0x03;
while(!((UART_SELECTION_Batt->LSR)>>0x05)&0x01);
UART_SELECTION_Batt->THR = 0x00;
while(!((UART_SELECTION_Batt->LSR)>>0x05)&0x01);
UART_SELECTION_Batt->THR = 0x29;
while(!((UART_SELECTION_Batt->LSR)>>0x05)&0x01);
UART_SELECTION_Batt->THR = 0x00;
while(!((UART_SELECTION_Batt->LSR)>>0x05)&0x01);
UART_SELECTION_Batt->THR = 0x23;
while(!((UART_SELECTION_Batt->LSR)>>0x05)&0x01);
UART_SELECTION_Batt->THR = 0xD5;
while(!((UART_SELECTION_Batt->LSR)>>0x05)&0x01);
UART_SELECTION_Batt->THR = 0xDB;
while(!((UART_SELECTION_PC->LSR)>>0x06)&0x01);
LPC_GPIO2->CLR |= (1<<12);
}
但是,每次8位信号还没有发送完,P2.12就提前变为低,导致最后两位信号发送不出去。即使添加了delay在LPC_GPIO2->CLR |= (1<<12)之前还是一样的结果。
图中红 {MOD}的是我发出的信号,黄 {MOD}的是经过RS485收发器的信号,绿 {MOD}的是P2.12引脚
可以看到,绿 {MOD}信号在红 {MOD}信号还没有发送完之前就变低了。
如果有类似经历的朋友拜托指点一二,帮我找找原因,不胜感谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
不知道问题到底是怎么解决的,但是我调整了uart的cclk。之前cclk是100MHz,改为了96MHz。这样通信的波特率更加准确。
此外,我还换了一个和下位机通信的线,问题就自己解决了。
所以我猜测,还是波特率的问题。
一周热门 更多>