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
    +关注

    关注

    2298

    文章

    11041

    浏览量

    366972
  • 串口通信
    +关注

    关注

    34

    文章

    1643

    浏览量

    57044
  • 函数
    +关注

    关注

    3

    文章

    4388

    浏览量

    65408
  • 中断源
    +关注

    关注

    0

    文章

    16

    浏览量

    8262
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    STM32串口中断 DMA接收的几点注意地方

    STM32串口中断、DMA接收的几点注意地方
    的头像 发表于 03-04 13:57 ?2.2w次阅读

    STM32 串口使用IDLE中断+DMA接收(HAL库函数)

    STM32 串口使用IDLE中断+DMA接收(HAL库函数)一、开发环境单片机型号:STM32H743IIT6工程配置环境:STM32CubeMX 6.3.0固件库:STM32Cube
    发表于 12-02 21:06 ?42次下载
    STM32 <b class='flag-5'>串口</b>使用IDLE<b class='flag-5'>中断</b>+DMA<b class='flag-5'>接收</b>(HAL库函数)

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

    STM32使用CubeMAX配置串口中断接收方法目录1.定位串口中断发生的地方2.处理串口中断接收
    发表于 12-14 18:45 ?30次下载
    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 ?31次下载
    STM32 HAL CubeMX <b class='flag-5'>串口</b>IDLE<b class='flag-5'>接收</b>空闲<b class='flag-5'>中断</b>+DMA

    stm32 串口接收不定长度数据及黏包处理 + 串口DMA接收

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

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

    本节目标:通过DMA,无需中断,接收不定时长的串口数据 描述:当在串口多数据传输下,CPU会产生多次
    发表于 12-24 19:01 ?8次下载
    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 ?53次下载
    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 ?2889次阅读
    STM32<b class='flag-5'>串口中断</b>应用实例

    LPC5500_SDK例程:串口DMA发送+中断接收

    LPC5500_SDK例程:串口DMA发送+中断接收
    的头像 发表于 10-30 16:59 ?1698次阅读
    LPC5500_SDK例程:<b class='flag-5'>串口</b>DMA发送+<b class='flag-5'>中断</b><b class='flag-5'>接收</b>

    STM32串口中断及DMA接收常见的几个问题

    STM32串口中断及DMA接收常见的几个问题
    的头像 发表于 10-26 16:41 ?4594次阅读
    STM32<b class='flag-5'>串口中断</b>及DMA<b class='flag-5'>接收</b>常见的几个问题

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

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

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

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

    stm32串口接收中断触发原理

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