本帖最后由 天山狐狸 于 2016-4-26 14:50 编辑
如题,按照原子的代码,用串口1操作485,发送一个字节时,如果485切换到发送模式不等待50us,发出去的数据变成了0XFF。等待50us后再发送数据,数据就正确了。
原子的例程中怎么没有等待可以发送呢,我的怎么就必须等待呢?
谢谢
附:我用stm32f407芯片,168M频率
[mw_shl_code=applescript,true]void USART_SendByte(uint8_t Data)
{
Enable_485Tx;//使能485发送
delay_us(50);
USART1->DR = (Data & (uint16_t)0x01FF);
while (!(USART1->SR & 0x0040));//等待发送完成
Enable_485Rx;//默认到485接收
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个该如何解决
以前用没有加都工作正常,以前是max3485,现在换成ADM2483,看手册,切换时间2483要比3485短很多,怎么却这样呢?
我的发送代码已经在楼主位了。。
下面是原子的发送代码
[mw_shl_code=applescript,true]//RS485发送len个字节.
//buf:发送区首地址
//len:发送的字节数(为了和本代码的接收匹配,这里建议不要超过64个字节)
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; //设置为接收模式
}[/mw_shl_code]
一周热门 更多>