项目要开发使用某rs485通信传感器,采用原子哥的开发板实现通信过程中,发现只能发送一次请求指令,得到一次返回数据。查看寄存器发现USART->SR的值为0x00000010;TC位和TXE位均不为1;继而查看USART->CR1的值为0x0020;发现接受和发送均未使能。收发代码如下,我在RS485_Send_Data函数中加入USART2->CR1=0x202c;每次都置位CR1寄存器,才正常工作。求解答原因。
[mw_shl_code=c,true]void USART2_IRQHandler(void)
{
u8 res;
if(USART2->SR&(1<<5))//接收到数据
{
res=USART2->DR;
}
}
void RS485_Send_Data(u8 *buf,u8 len)
{
cnt++;
u8 t;
RS485_TX_Set(1); //设置为发送模式
for(t=0;t<len;t++) //循环发送数据
{
USART2->CR1=0x202c;
while((USART2->SR&0X40)==0);//等待发送结束
USART2->DR=buf[t];
}
while((USART2->SR&0X40)==0);//等待发送结束
RS485_RX_CNT=0;
RS485_TX_Set(0); //设置为接收模式
}
[/mw_shl_code]
一周热门 更多>