OpenEdv-开源电子网

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

求大神指导,串口接收问题

[复制链接]

47

主题

146

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2013-8-8
在线时间
0 小时
发表于 2014-2-3 15:47:33 | 显示全部楼层 |阅读模式
这是本人写的中断接收函数:
void USART2_IRQHandler(void)                 //串口2中断服务程序
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断
{
gRsBuf[gRsLength++]=USART_ReceiveData(USART2);//(USART1->DR); //读取接收到的数据    
       }                                                  

USART_ClearITPendingBit(USART2, USART_IT_RXNE);
     } 
我是通过按键发送数据,每次发送8个字节,接收完一次数据后gRsLength变为8,在下一次数据来之前,gRsLength一直是8,只要下一次数据一来,gRsLength就会自动清零,
重新接收了,可我没给它清零啊,为什么他会自己清零呢? 我用的是MDK
 还有 我在主函数里通过判断if(gRsLength==8)来判断8个字节的数据是否接收完成,请问这样可以吗  有人说这样不是很好,
请问有没有什么更好的编程方式呢 
跪求指导哈


___诺现在就觉得失望无力,未来那么远该怎么扛。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-3 21:33:01 | 显示全部楼层
你是不是在其它地方清零了呢???
在主函数判断gRsLength==8,是可以的。
但是你在中断接收里面,建议做一个不大于8的处理,否则,如果接收的数据大于8,而主函数又没来得及处理,那就超过范围了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

47

主题

146

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2013-8-8
在线时间
0 小时
 楼主| 发表于 2014-2-3 23:18:12 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我没在其他地方清零啊  觉得好奇怪  是不是编译器自动清零的啊
嗯嗯 
哈哈 原子歌新婚还抽空来回答啊 真是敬佩敬佩啊
___诺现在就觉得失望无力,未来那么远该怎么扛。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-4 10:17:47 | 显示全部楼层
回复【3楼】__小黑先生:
---------------------------------
编译器不会自动清零的,你肯定有某个地方清零了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 20:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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