关于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、使能中断。 展开
{
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、使能中断。 展开
2个回答
展开全部
前三个问题,你实验一下不就知道了,问题4:中断服务函数编写规律,这个,谈不上规律吧,每次接收完,一定要清除标志位,最好是在接收时,关闭使能发送,发送时失能接收,要不容易出现问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
深圳思驰科技有限公司_
2024-10-23 广告
2024-10-23 广告
深圳思驰科技是国内先进入芯片解密领域的公司,拥有数十年的丰富经验,成功帮助国内外企业、政府及知名科研机构攻克多个技术难题。在医疗电子、工控设备、军事航天、通信设备、广电设备、交通设备、汽车电子、家用电子等行业都成功推出了多款创新产品,熟悉这...
点击进入详情页
本回答由深圳思驰科技有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询