OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5062|回复: 5

STM32 RS485 传输

[复制链接]

18

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2015-11-12
在线时间
34 小时
发表于 2016-5-19 10:34:59 | 显示全部楼层 |阅读模式
1金钱
请教原子哥,我买了一个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;
       
        }       
        }


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-5-20 21:11:31 | 显示全部楼层
隔100ms发送一个字节,就好了
回复

使用道具 举报

8

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2017-3-12
在线时间
27 小时
发表于 2017-6-19 01:12:52 | 显示全部楼层
正点原子 发表于 2016-5-20 21:11
隔100ms发送一个字节,就好了

原子哥 1,怎么实现100ms发送一个字节 ?
2,怎么根据波特率来判断我需要每多少ms发送一个字节or接受有一个字节呢?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-6-19 21:22:53 | 显示全部楼层
yinqirui9 发表于 2017-6-19 01:12
原子哥 1,怎么实现100ms发送一个字节 ?
2,怎么根据波特率来判断我需要每多少ms发送一个字节or接受有 ...

delay
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-6-19 21:23:28 | 显示全部楼层
yinqirui9 发表于 2017-6-19 01:12
原子哥 1,怎么实现100ms发送一个字节 ?
2,怎么根据波特率来判断我需要每多少ms发送一个字节or接受有 ...

2,没有好办法,自己一点点测试,比如延时100,90,80,70....看哪个时间下正常,到哪个不正常,零界点就是你要的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7703
金钱
7703
注册时间
2016-11-30
在线时间
651 小时
发表于 2017-6-20 09:34:12 | 显示全部楼层
串口发送函数就只能发送一个字节吧?你也没用for()。如果是在主循环里加的for(),那么建议你把RS485EN放到for()外边,而且切换收发模式是需要一个delay的,因为硬件的反应时间是比程序慢很多的!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-18 02:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表