lpc1769 uart信号发送问题

2019-07-15 17:08发布

想请问一下有没有人遇到过这样的问题:
我用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)之前还是一样的结果。

Unbenannt2.PNG
图中红 {MOD}的是我发出的信号,黄 {MOD}的是经过RS485收发器的信号,绿 {MOD}的是P2.12引脚
可以看到,绿 {MOD}信号在红 {MOD}信号还没有发送完之前就变低了。

如果有类似经历的朋友拜托指点一二,帮我找找原因,不胜感谢!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
cherrynana
1楼-- · 2019-07-15 21:54
问题已经解决,自己结贴。
不知道问题到底是怎么解决的,但是我调整了uart的cclk。之前cclk是100MHz,改为了96MHz。这样通信的波特率更加准确。
此外,我还换了一个和下位机通信的线,问题就自己解决了。
所以我猜测,还是波特率的问题。