|
电路采用RS485自动收发,不用切换输入输出,可以像串口一样接收
发送字符,字符串都是正常的,代码如下:
- /*485电路是自动收发,可以和普通232一样*/
- void RS4852_SendByte(u8 byte)
- {
- USART_SendData(USART2, (u8) byte);
- while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET){}
- }
- void RS4852_SendStr(uint8_t* aTxBuff,uint16_t uhTxCNT)
- {
- u16 i=0;
- while(*(aTxBuff+i)!=0 && i<uhTxCNT)
- {
- RS4852_SendByte( *(aTxBuff+i) );
- i++;
- }
- while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET){}
- }
复制代码 然后想写一个和普通串口一样的中断接收回显,我在RS232上试过没问题的,代码如下
- NVIC_RS4852_Cfg();
- RS4852_USART2_Cfg();
- USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
复制代码
在RS485上就有问题,中断服务函数如下,进入中断,把接收到的保存起来,然后通过串口再发送出去,:
- void USART2_IRQHandler(void)
- {
- u8 ubRx = 0;
-
- if(USART_GetITStatus( USART2, USART_IT_RXNE) != RESET)
- {
-
- ubRx = USART_ReceiveData(USART2);
- RS4852_SendByte(ubRx);
- cnt++;
- }
- USART_ClearITPendingBit(USART2, USART_IT_RXNE);
- }
复制代码 结果如下,RS485发不出来
中断服务函数的cnt是用来记录进入中断的次数,因为接收到一个字符,进一次中断,最终cnt=16,和接收到的数据一样,但是为啥发不出来呢?谢谢。
|
|