NXP MCU 技术william hill官网
直播中

cherrynana

8年用户 34经验值
擅长:MEMS/传感技术
私信 关注
[问答]

lpc1769 uart信号发送问题

想请问一下有没有人遇到过这样的问题:
我用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
图中红色的是我发出的信号,黄色的是经过RS485收发器的信号,绿色的是P2.12引脚
可以看到,绿色信号在红色信号还没有发送完之前就变低了。

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

回帖(1)

cherrynana

2018-5-25 19:11:44
问题已经解决,自己结贴。
不知道问题到底是怎么解决的,但是我调整了uart的cclk。之前cclk是100MHz,改为了96MHz。这样通信的波特率更加准确。
此外,我还换了一个和下位机通信的线,问题就自己解决了。
所以我猜测,还是波特率的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分