OpenEdv-开源电子网

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

串口的数据传送

[复制链接]

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2018-8-17
在线时间
30 小时
发表于 2018-11-15 00:49:12 | 显示全部楼层 |阅读模式
5金钱
求一个在串口输入0--999 然后返回对应数值的串口

每次处理好了个位 十位百位就不对

百位对了 别的位有不对


ps:下面的是复制一位大佬的
下面是我学习后正在编写的串口接收工程文件
//--------
//串口接收,有串口接收数据时自动调用接收中断函数 USART1_IRQHandler(void)
//--------  
      if(USART_RX_STA&0x8000)                      //判断接收到的数据是否被调走,为1调走,调走后才能进入if下面的语句中进行新的数据接收,否则会出现误码。
                      {                                                                                                      
                      w=USART_RX_BUF[1]-48;            //用于返回PC字符提示信息
                      h=USART_RX_BUF[2]-48;             //用于返回PC字符提示信息    对照ascii码表,收到的数字为ascii码的对应1~9字符(对应十进制48~57),而不是十进制的1~9.
                      y=(USART_RX_BUF[0]-48);      //功能码                        ascii码表中字符的0~9与十进制的0~9相差48,所以要把字符的0~9转换成10进制的0~9就减去48.        
                     num=w+h+y;              //
                      USART_RX_STA=0;                 //重新接收
                      }




无论加不加48   这个串口都有问题


哪位做过的可以帮助啊一下

学习一点都不快乐
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2018-8-17
在线时间
30 小时
 楼主| 发表于 2018-11-15 00:49:46 | 显示全部楼层
大佬们解决一下 困惑好长时间了
学习一点都不快乐
回复

使用道具 举报

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2018-8-17
在线时间
30 小时
 楼主| 发表于 2018-11-15 00:51:20 | 显示全部楼层
备注 ;num=y*100+w*10+h
学习一点都不快乐
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-11-15 02:01:15 | 显示全部楼层
我们串口通信实验,稍微改下就可以出结果啊
回复

使用道具 举报

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2018-8-17
在线时间
30 小时
 楼主| 发表于 2018-11-15 06:39:28 | 显示全部楼层
正点原子 发表于 2018-11-15 02:01
我们串口通信实验,稍微改下就可以出结果啊

   


        if(USART_RX_STA&0x8000)
                {                                          
                        len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度    0011  1111 1111 1111
                        printf("\r\n您发送的消息为:\r\n\r\n");
                       
                       
                        for(t=0;t<len;t++)
                        {
                                USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
                        }//USART_FLAG_TC是发送完成的表示符
                        printf("\n\n");
                        num0=USART_RX_BUF[0]-48;
                        num1=USART_RX_BUF[1]-48;
                        num2=USART_RX_BUF[2]-48;
                        if(num1<0)
                                num1+=48;
                        if(num2<0)
                                num2+=48;
                        num=num0*100+num1*10+num2*1;
                        USART_RX_STA=0;//串口的标志位
                        printf("num0=%lf\r\n",num0);
                        printf("num1=%lf\r\n",num1);
                        printf("num2=%lf\r\n",num2);
                        printf("num=%lf\r\n",num);               
                       
                }


这样只可以计算100-999啊
十位个位不对了  谢谢原子哥  
学习一点都不快乐
回复

使用道具 举报

17

主题

194

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1049
金钱
1049
注册时间
2016-9-3
在线时间
158 小时
发表于 2018-11-15 09:07:04 | 显示全部楼层
不用那么计算吧, 直接用两个字节来表示0-999就可以了,比如你要发送555,就直接在串口发送02 2B就好了,单片机接收到以后将两字节拼接为u16型就可以了
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2018-11-15 14:26:36 | 显示全部楼层
str = "123"
atoi(str)
这样不是很好吗
1-1
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 20:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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