0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何通过配置串口的接收作为中断源

麦辣鸡腿堡 来源:CSDN博客 作者:藕粉- 2023-11-10 16:33 次阅读

使用中断

  • 通过配置串口的接收作为中断源,开启中断输出控制,配置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
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348869
  • 串口通信
    +关注

    关注

    32

    文章

    1578

    浏览量

    54873
  • 函数
    +关注

    关注

    3

    文章

    3911

    浏览量

    61313
  • 中断源
    +关注

    关注

    0

    文章

    16

    浏览量

    7895
收藏 人收藏

    评论

    相关推荐

    利用中断实现串口不长接收数据

    STM32CUBEME--2USART通过DMA方式接收不定长数据概述硬件准备选择芯片型号配置时钟配置时钟树
    发表于 08-11 07:07

    STM32使用CubeMAX配置串口中断接收方法是什么

    STM32使用CubeMAX配置串口中断接收方法目录1.定位串口中断发生的地方2.处理串口中断接收
    发表于 08-13 09:06

    串口中断接收和发送的C51程序免费下载

    这是一个单片机C51串口接收中断)和发送例程,可以用来测试51单片机的中断接收
    发表于 04-25 18:27 4次下载
    <b class='flag-5'>串口中断</b><b class='flag-5'>接收</b>和发送的C51程序免费下载

    【图文解说】利用飞思卡尔S12X系列单片机双核功能实现串口空闲中断接收

    利用飞思卡尔S12X系列单片机双核功能实现串口空闲中断接收【详解】1. 关于XGATE2. XGATE的工作模式3. 软件实现3.1 XGATE核功能配置3.1.1 XGATE初始化
    发表于 11-26 20:21 3次下载
    【图文解说】利用飞思卡尔S12X系列单片机双核功能实现<b class='flag-5'>串口</b>空闲<b class='flag-5'>中断</b><b class='flag-5'>接收</b>

    STM32使用CubeMAX配置串口中断接收方法

    STM32使用CubeMAX配置串口中断接收方法目录1.定位串口中断发生的地方2.处理串口中断接收
    发表于 12-14 18:45 28次下载
    STM32使用CubeMAX<b class='flag-5'>配置</b>的<b class='flag-5'>串口中断</b><b class='flag-5'>接收</b>方法

    STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA

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

    STM32F407串口中断配置

    花费了很久,发现用库函数去访问发送完成和接收完成的标志位会出问题,改成了直接访问寄存器对应的位,终于实现串口中断的通信。至于为什么库函数不行,lz还没有发现原因。 串口中断适合用于发送数据较少的情况
    发表于 12-24 18:48 1次下载
    STM32F407<b class='flag-5'>串口中断</b><b class='flag-5'>配置</b>

    STM32—无需中断来实现使用DMA接收串口数据

    本节目标:通过DMA,无需中断,接收不定时长的串口数据 描述:当在串口多数据传输下,CPU会产生多次
    发表于 12-24 19:01 5次下载
    STM32—无需<b class='flag-5'>中断</b>来实现使用DMA<b class='flag-5'>接收</b><b class='flag-5'>串口</b>数据

    STM32CubeMx配置DMA+串口空闲中断+FreeRTOS,完美处理串口数据。

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

    串口接收中断--并不是说不使能串口接受中断就无法接收数据

    并不是说不使能串口接受中断就无法接收数据,只是为了在串口接收数据的时候防止其程序打扰串口数据的
    发表于 12-28 19:15 15次下载
    <b class='flag-5'>串口</b><b class='flag-5'>接收</b><b class='flag-5'>中断</b>--并不是说不使能<b class='flag-5'>串口</b>接受<b class='flag-5'>中断</b>就无法<b class='flag-5'>接收</b>数据

    STM32串口中断应用实例

    本文将介绍如何使用STM32F4的串口接收中断通过串口助手模拟上位机发送指令、STM32F4串口中断
    的头像 发表于 04-20 11:45 1600次阅读
    STM32<b class='flag-5'>串口中断</b>应用实例

    单片机串口接收超时中断是怎么回事啊?

    以确保单片机能够及时响应并处理各种不同的串口通信问题。在本文中,我们将详细探讨单片机串口接收超时中断的相关知识。 1. 单片机串口
    的头像 发表于 09-13 10:43 2620次阅读

    HAL_UART_Transmit阻塞时会影响串口中断接收吗?

    最近项目里使用了两路串口透传数据,串口3中断接收数据,组包后通过串口1阻塞发送出去。
    的头像 发表于 10-26 14:24 499次阅读
    HAL_UART_Transmit阻塞时会影响<b class='flag-5'>串口中断</b><b class='flag-5'>接收</b>吗?

    串口接收数据的两种方式是什么

    上方是发送数据的例子,那么串口接收又该如何配置,又要在串口发送的例子上做哪些更改呢? 这里我们可以通过查询或者
    的头像 发表于 11-10 16:20 982次阅读
    <b class='flag-5'>串口</b><b class='flag-5'>接收</b>数据的两种方式是什么

    stm32串口接收中断触发原理

    配置串口接收中断使能:在初始化串口时,需要设置相应的控制寄存器来使能串口
    发表于 01-17 15:42 1736次阅读
    stm32<b class='flag-5'>串口</b><b class='flag-5'>接收</b><b class='flag-5'>中断</b>触发原理