OpenEdv-开源电子网

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

【求助】485通讯的字符串接收并发送

[复制链接]

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2020-11-23
在线时间
7 小时
发表于 2021-6-8 12:03:07 | 显示全部楼层 |阅读模式
5金钱
字符串的接收并发送一直无法实现,想法是分别在中断函数里取值存入数组,在主函数中调用输出函数;自己写出来不知道错在哪,求指点
中断函数:
  1. char RS485_RX_BUF[64];
  2. void USART1_IRQHandler(void)   //串口1中断服务程序
  3. {
  4.         int mdbadr=0,LoHex=0,HiHex=0;//寄存器起始地址,地址高位,地址地位
  5.         RS485_1_RX_Mode;
  6.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != 0)
  7.         {   
  8.                 RS485_1_RX_Mode;
  9.                 //接收中断
  10.         Res =USART_ReceiveData(USART1);//(USART1->DR);//读取接收到的数据
  11.                 RS485_RX_BUF[RS485_RX_CNT]=Res;//记录接收到的值
  12.                 delay_ms(15);
  13.                 RS485_RX_CNT++;
  14. //                接收数据增加1
  15.                 if(RS485_RX_CNT==4)    //判断
  16.                 {       
  17.                         txset=1;
  18.                         USART_ClearITPendingBit(USART1,USART_IT_RXNE);//接收后先清空标志位       
  19.             }
  20.         }
  21. }
复制代码
输出函数:

  1. void RX_DATA()   //发送返回函数
  2. {
  3.         int a=0;
  4.         for(a=0;a<RS485_RX_CNT;a++)
  5.         {
  6.                 printf("%c",RS485_RX_BUF[a]);//把收到的数据以 符号变量 发送回电脑
  7.                
  8.                 delay_ms(12);
  9.         }
  10. }       
复制代码
主函数


  1. int main(void)
  2. {         
  3.         u8 Res;
  4.         u8 i=0,t=0;
  5.         u8 cnt=0;
  6.         delay_init();//延时函数初始化
  7.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  8.         uart_init(9600);
  9.         RS485_1_TX_Mode;
  10.         printf("\r485 config test");
  11.         delay_ms(10);
  12.         RS485_1_RX_Mode;
  13. //        USART_SendString(USART1, "Hello world!\r\n");
  14.         while(1)
  15.         {          
  16.                 if(txset==1)       //判断计数变量达到全长度(或者使用某标志位)
  17.                 {
  18.                         RS485_1_TX_Mode;
  19.                         RX_DATA();
  20.                         delay_ms(10);
  21.                 }
  22.         }
  23. }
复制代码



最佳答案

查看完整内容[请看2#楼]

没细看,但你在中断服务里加 15mS 延时, 肯定容易出问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11536
金钱
11536
注册时间
2014-4-1
在线时间
1313 小时
发表于 2021-6-8 12:03:08 | 显示全部楼层

没细看,但你在中断服务里加 15mS 延时,
肯定容易出问题。


回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2021-6-8 23:53:37 | 显示全部楼层
我们例程一次是发送5个字节吧,你在我们例程基础上稍微改一下就可以实现啊。
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2020-11-23
在线时间
7 小时
 楼主| 发表于 2021-6-9 10:28:58 | 显示全部楼层
正点原子 发表于 2021-6-8 23:53
我们例程一次是发送5个字节吧,你在我们例程基础上稍微改一下就可以实现啊。

战舰板子,用例程串口中断都进不去,我把例程lcd注释掉换成printf的,应该不会有影响吧
回复

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4891
金钱
4891
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-6-9 10:35:28 | 显示全部楼层
bokemimi 发表于 2021-6-9 10:28
战舰板子,用例程串口中断都进不去,我把例程lcd注释掉换成printf的,应该不会有影响吧

你跳帽用了吗?
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2020-11-23
在线时间
7 小时
 楼主| 发表于 2021-6-9 10:36:42 | 显示全部楼层
我用自己画的板子485通讯是能收并发一个字节是没问题的,但是想用数组存多个字节就不知道哪里出了问题;原理应该是收多个字节要进多少次中断程序嘛,但是现在程序实际运行就是只发出前两个字符很多次
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2020-11-23
在线时间
7 小时
 楼主| 发表于 2021-6-9 11:05:17 | 显示全部楼层
xuande 发表于 2021-6-9 10:50
没细看,但你在中断服务里加 15mS 延时,
肯定容易出问题。

谢谢指点
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-22 21:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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