使用中断
- 通过配置串口的接收作为中断源,开启中断输出控制,配置NVIC。开启中断通道。
//开启中断输出控制
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
//配置NVIC
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel=USART2_IRQn; //选择USART2的中断通道
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; //中断使能
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStruct);
- 中断服务子函数
中断服务子函数写好后,就可以在中断里读取接收到的数据了。
当接收到数据后,触发接收中断,主程序暂停执行。接收完数据后主程序回复执行。当接收到数据时,就触发中断。
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET) //RXNE 标志位为1 表示可以接收数据
{
RX_Data=USART_ReceiveData(USART2);
Flag=1;
USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除RXNE标志位
}
}
- 主程序测试
uint8_t RX_Data;
uint8_t Flag;
int main()
{
Serial_Init();
Serial_SendByte(0x16);
while(1)
{
if(Flag==1)
{
Serial_SendByte(RX_Data);
}
}
}
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET) //RXNE 标志位为1 表示可以接收数据
{
RX_Data=USART_ReceiveData(USART2);
Flag=1;
USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除RXNE标志位
}
}
下图为程序现象:可以看到,串口确实收到了数据,只是我把接收到的数据0xFE放在了while循环里,这说明数据接收是成功的,使用中断是可行的。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
STM32
+关注
关注
2298文章
11041浏览量
366972 -
串口通信
+关注
关注
34文章
1643浏览量
57044 -
函数
+关注
关注
3文章
4388浏览量
65408 -
中断源
+关注
关注
0文章
16浏览量
8262
发布评论请先 登录
相关推荐
热点推荐
STM32 串口使用IDLE中断+DMA接收(HAL库函数)
STM32 串口使用IDLE中断+DMA接收(HAL库函数)一、开发环境单片机型号:STM32H743IIT6工程配置环境:STM32CubeMX 6.3.0固件库:STM32Cube
发表于 12-02 21:06
?42次下载

STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA
关于DMA原理部分讲解,及CubeMx配置部分,请参考该文章【STM32】HAL库 STM32CubeMX教程十一—DMA (串口DMA发送接收)本篇文章我们仅针对例程进行详解剖析本篇文章提供两种
发表于 12-20 19:39
?31次下载

stm32 串口接收不定长度数据及黏包处理 + 串口DMA接收
都是通过单片机的中断机制实现的,stm32单片机串口接收有一个空闲中断机制,只要我们在配置
发表于 12-23 19:09
?27次下载

STM32CubeMx配置DMA+串口空闲中断+FreeRTOS,完美处理串口数据。
作为STM32最常用的外设之一,可以说串口用的好不好可以看出使用者有没有深入掌握STM32的使用。常见的串口轮训发送+接收中断虽然能够应付一
发表于 12-24 19:11
?53次下载

评论