这是原子哥的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]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
问题是在初始化串口的时候,有关串口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);
一周热门 更多>