STM32 RS485 传输

2019-08-17 06:44发布

请教原子哥,我买了一个TTL转485的转接板,接在mini板上,用串口2测试,在串口中断接收里将接收的数据返回,现在遇到的问题是,通过485可以发送一个字符返回一个字符比如0xAA,但是当发送8个字符时就不能返回,(我不通过485直接用串口测试发10个字符都没问题全部有返回)下面是我的串口接收代码,主函数是个死循环




串口发送
void USART2_PutChar(u8 ch )
{
   RS485EN=0;
         USART2->DR = (u8) ch;   
        // while((USART2->SR&0X40)==0){};//Ñ-»··¢Ëí,Ö±μ½·¢Ëííê±Ï   
          while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
   RS485EN=1;

}




串口接收


void USART2_IRQHandler(void)  

{
  u8 i;
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
                        {
                        RxArr[RxLen++]=USART_ReceiveData(USART2);
                        //        USART2_PutChar(USART_ReceiveData(USART2)  );
                               
                        }
  if(RxLen==RxArr[5]+6)
        {
                for(i=0;i<12;i++)
                USART2_PutChar(RxArr[i]);
    RxLen=0;
       
        }       
        }


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
正点原子
1楼-- · 2019-08-17 07:11
隔100ms发送一个字节,就好了
yinqirui9
2楼-- · 2019-08-17 07:34
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-08-17 11:35
yinqirui9 发表于 2017-6-19 01:12
原子哥 1,怎么实现100ms发送一个字节 ?
2,怎么根据波特率来判断我需要每多少ms发送一个字节or接受有 ...

delay
正点原子
4楼-- · 2019-08-17 12:55
yinqirui9 发表于 2017-6-19 01:12
原子哥 1,怎么实现100ms发送一个字节 ?
2,怎么根据波特率来判断我需要每多少ms发送一个字节or接受有 ...

2,没有好办法,自己一点点测试,比如延时100,90,80,70....看哪个时间下正常,到哪个不正常,零界点就是你要的
lvkanger
5楼-- · 2019-08-17 16:41
串口发送函数就只能发送一个字节吧?你也没用for()。如果是在主循环里加的for(),那么建议你把RS485EN放到for()外边,而且切换收发模式是需要一个delay的,因为硬件的反应时间是比程序慢很多的!

一周热门 更多>