OpenEdv-开源电子网

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

32中的串口如何判断接收到多少字节?

[复制链接]

13

主题

206

帖子

1

精华

高级会员

Rank: 4

积分
613
金钱
613
注册时间
2014-10-26
在线时间
32 小时
发表于 2015-7-11 16:57:25 | 显示全部楼层 |阅读模式
5金钱
如题,比如我要求接收到10个字节的时候点个灯。
下面是原子串口接收中断的程序,我想过在中断用 num++,到9的时候点灯,但是不行。
[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==0x0d)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 } [/mw_shl_code]


最佳答案

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

设置一个变量,在中断函数中每接收到一个数据该变量加1就行。该变量在适当的要清零,可以考虑一定时间后没有接收到数据就清零之。
学习!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-3-30
在线时间
2 小时
发表于 2015-7-11 16:57:26 | 显示全部楼层

设置一个变量,在中断函数中每接收到一个数据该变量加1就行。该变量在适当的要清零,可以考虑一定时间后没有接收到数据就清零之。

回复

使用道具 举报

13

主题

206

帖子

1

精华

高级会员

Rank: 4

积分
613
金钱
613
注册时间
2014-10-26
在线时间
32 小时
 楼主| 发表于 2015-7-11 16:57:26 | 显示全部楼层
[mw_shl_code=c,true]en=USART_RX_STA&0x3fff;//得到此次接收到的数据长度[/mw_shl_code]
原子的串口程序有 原来~
学习!
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2015-7-11 18:26:28 | 显示全部楼层
为啥不行呢?贴代码?
顺便提醒你,别把num设置为局部变量。。。。。。。。。。。。。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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