关于STM32串口接收中断,网上有如下中断方式接收数据的程序: 10

voidUSART1_IRQHandler(void)//串口1中断{charRX_dat;//定义字符变量if(USART_GetITStatus(USART1,USA... void USART1_IRQHandler(void) //串口1中断
{
char RX_dat; //定义字符变量
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断发生接收中断
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除中断标志
GPIO_WriteBit(GPIOB, GPIO_Pin_10, (BitAction)0x01); //开始传输
RX_dat=USART_ReceiveData(USART1) & 0x7F; //接收数据,整理除去前两位

//**************使用RX_dat进行一些处理操作,这里省略了较复杂的处理过程....********

USART_SendData(USART1, RX_dat); //发送数据
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
//等待发送结束
}
}
问题一:上面的注释部分,“接收数据,整理除去前两位”应该是“接收数据,整理除去前一位”吧?
问题二:当执行“RX_dat=USART_ReceiveData(USART1) & 0x7F;"后,RXNE标志应该成为了RESET”状态,即接收数据寄存器变为“空”状态,那么这时后续数据就会由移位寄存器转到接收数据寄存器,转换完成后RXNE被SET,这时候又会进入中断处理函数。如果在中断处理函数中读取数据后要对数据进行处理的时间较长,那么后续数据的进入会打断前一数据的处理过程,所以达不到接收一个字节数据,然后处理完,再接收一个字节数据,然后再处理完的这样的整个的过程。也就是说上面程序中的将接收到的数据输出的过程可能会被由于后续数据的进入而引发的中断而中断。不知道我说的这个对不对?
问题三:如果问题二中我说的过程不正确,即后续数据的接收不会打断前面数据的中断处理过程,那么是因为调用了“USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除中断标志”?难道清除中断标志位可以让RXNE只有在退出中断处理函数的时候才可以被SET?
问题四:用中断方式接收数据,中断处理函数的编写是否是如下规律?1、禁能中断。2、清除中断标志位,使得中断标志位可以准确的反映后续的中断状态。3、接收数据,并进行数据处理。4、使能中断。
展开
 我来答
后曼珠22
2012-11-21 · TA获得超过108个赞
知道小有建树答主
回答量:228
采纳率:0%
帮助的人:107万
展开全部
前三个问题,你实验一下不就知道了,问题4:中断服务函数编写规律,这个,谈不上规律吧,每次接收完,一定要清除标志位,最好是在接收时,关闭使能发送,发送时失能接收,要不容易出现问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
深圳思驰科技有限公司_
2024-10-23 广告
深圳思驰科技是国内先进入芯片解密领域的公司,拥有数十年的丰富经验,成功帮助国内外企业、政府及知名科研机构攻克多个技术难题。在医疗电子、工控设备、军事航天、通信设备、广电设备、交通设备、汽车电子、家用电子等行业都成功推出了多款创新产品,熟悉这... 点击进入详情页
本回答由深圳思驰科技有限公司_提供
诸葛白菜
2012-11-22 · TA获得超过164个赞
知道答主
回答量:45
采纳率:0%
帮助的人:29.9万
展开全部
1,程序字面应该是清除1位
2,涉及中断嵌套问题,自己的中断等级不会比自己高吧,所以应该不会处理不完本中断进下一个中断,除非是更高优先级的中断来了。在这种情况下,如果下一个数据来了,中断没处理完,又来了数据,可能的情况是数据丢失。
3,不是
4,一般情况下,是将你的1,和4去掉,加着也挺好(个人觉得)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式