485通信程序疑问

2019-07-21 00:13发布

这是原子哥的485发送程序:
void RS485_Send_Data(u8 *buf,u8 len)
{
        u8 t;
        RS485_TX_EN=1;                       
          for(t=0;t<len;t++)       
        {
                while((USART2->SR&0X40)==0);        //等待发送结束  
                USART2->DR=buf[t];
        }         
        while((USART2->SR&0X40)==0);       
        RS485_RX_CNT=0;          
        RS485_TX_EN=0;                                                       
}
其中下面这两句是不是应该调换一下位置
while((USART2->SR&0X40)==0);        //等待发送结束  
USART2->DR=buf[t];
应该是先发送才能判断到底有没有发送完成啊,如果while((USART2->SR&0X40)==0);这句在前面的话,岂不是一直卡在这里出不去了,SR寄存器的第六位TC是要在发送完一帧数据且TXE=1时硬 置1,如果那句放在前面 ,TC不是永远都是零
[img]file:///C:UsersAdministratorAppDataRoamingTencentUsers296417781QQWinTempRichOle~UI3}{4[SOS7L@R$0}T3$8X.png[/img]



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
xkwy
1楼-- · 2019-07-21 01:05
 精彩回答 2  元偷偷看……
Angela
2楼-- · 2019-07-21 06:53
xkwy 发表于 2016-1-16 21:30
不会有问题,但是的确会造成误解。

问题是在初始化串口的时候,有关串口2 的设置就下面几句,没有设置TXE的值啊,只设置了UE,TE,RE,PE和RXNE
        USART2->BRR=mantissa;        
        USART2->CR1|=0X200C;         
#ifdef EN_USART2_RX                  
        USART2->CR1|=1<<8;   
        USART2->CR1|=1<<5;           
        UCTX_NVIC_Init(3,3,USART2_IRQChannel,5);
xkwy
3楼-- · 2019-07-21 07:32
 精彩回答 2  元偷偷看……

一周热门 更多>