OpenEdv-开源电子网

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

chuankouwenti

[复制链接]

12

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2014-9-18
在线时间
47 小时
发表于 2014-9-18 21:23:36 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]void USART1_IRQHandler(void) //串口1中断服务程序 { u8 Res; #ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了. OSIntEnter(); #endif if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) { Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据 if((USART_RX_STA&0x8000)==0)//接收未完成 { if(USART_RX_STA&0x4000)//接收到了0x0d { if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始 else USART_RX_STA|=0x8000; //接收完成了 } else //还没收到0X0D { if(Res==0x0F)USART_RX_STA|=0x4000; else { USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ; USART_RX_STA++; if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收 } } } } #ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了. OSIntExit(); #endif } #endif [/mw_shl_code]
请教坛子里的朋友,这段代码没看懂啊,串口实验里的中断服务程序,为什么 [mw_shl_code=c,true]接收中断接收到的数据必须是0x0d 0x0a结尾[/mw_shl_code]

最佳答案

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

因为我们的接收,就是以0X0D,0X0A来判断数据发送是否结束的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-18 21:23:37 | 显示全部楼层
因为我们的接收,就是以0X0D,0X0A来判断数据发送是否结束的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2014-9-18 21:23:37 | 显示全部楼层
回复【8楼】PGDZR1717:
---------------------------------
这是原子哥自己定义的一处通信协议,就是当接收端收到0x0d 0x0a(即空格符),表示这组数据接收完成,处理这组数据并准备接收下一组数据,比较适合接收不定长数据,比如你在串口调试助手输入几个字节然后打个回车表示发送数据完成,当接收端接收到回车这个标志就明白接收的这组数据完成了。打个比方:我给你有一批西瓜,我传你接,约定传完n个后如果我传给你个西红柿就表示这批传完了歇息会等会再传,这个西红柿就相当于原子哥0x0d 0x0a,你可以把西红柿换成黄瓜、茄子等做标志,只要约定好就行。写的有点长了,表达能力有限~~~
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

12

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2014-9-18
在线时间
47 小时
 楼主| 发表于 2014-9-19 07:44:15 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
回复【2楼】正点原子:
---------------------------------
恩恩这个我知道,请问下是怎么实现的,视频和pdf上都没提及,谢谢
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-9-19 08:05:13 | 显示全部楼层
楼主可以试验一下的,发送数据时结尾不是回车符号和结尾有回车符号的,这样看下结果就知道这段代码的意思了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

12

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2014-9-18
在线时间
47 小时
 楼主| 发表于 2014-9-19 10:21:59 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------------
我试了,就是收到字符串啊,但是还不懂那个
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2014-9-19 12:07:22 | 显示全部楼层
这就是个自己定义的标志,可以说是自己对自己收发数据的约定,如果你实际使用时已经约定好如何保证正确接收就不要使用这个寄存器,但可以根据这个寄存器的好思路适当改变,修改成符合自己需要的寄存器定义,直接不要这个寄存器也是可以的,把中断里的对判断去掉0x0d 0x0a适当处理掉。
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-9-19 12:58:14 | 显示全部楼层
自己定义协议也是可以的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

12

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2014-9-18
在线时间
47 小时
 楼主| 发表于 2014-9-20 08:15:50 | 显示全部楼层
回复【6楼】龙之谷:
---------------------------------
关键是没看懂啊大神,刚接触stm32对他的c语言处理方式有点陌生
回复

使用道具 举报

12

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2014-9-18
在线时间
47 小时
 楼主| 发表于 2014-9-20 08:17:41 | 显示全部楼层
回复【7楼】Badu_Space:
---------------------------------
我想先弄懂例程看懂,要不然也不太会编写自己的协议
回复

使用道具 举报

12

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2014-9-18
在线时间
47 小时
 楼主| 发表于 2014-9-27 11:12:15 | 显示全部楼层
回复【10楼】龙之谷:
---------------------------------
谢谢啊,码了这么多字,我再看看吧,不懂再请教
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-1 03:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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