一.关于如何配置通过中断的方式配置串口的收发 ,一共就是这8个步骤

1.使能串口时钟、使能GPIO时钟

2.引脚复用映射

3.GPIO端口模式设置

4.串口参数初始化设置

5.开启中断初始化NVIC

6.使能串口

7.编写中断处理函数

8.编写收发数据处理函数

二.初始化串口函数

1.使能串口时钟、使能GPIO时钟

    //使能GPIOARCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能串口1RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

2.引脚复用映射

    //GPIOA_Pin_9  映射串口1GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);//GPIOA_Pin_10 映射串口2GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);

3.GPIO端口模式设置

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;     //复用GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;   //推挽GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;     //上拉GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;   //GPIOA初始化¯GPIO_Init(GPIOA, &GPIO_InitStructure);  

GPIO初始化里的结构体变量需要在最上面申明定义、包括串口1的结构体变量、串口1中断的结构体变量

4.串口参数初始化设置

    USART1_InitStructure.USART_BaudRate = 115200;                  //波特率//没有硬件流设置USART1_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART1_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //输入\输出USART1_InitStructure.USART_Parity = USART_Parity_No;             //没有奇偶校验位USART1_InitStructure.USART_StopBits = USART_StopBits_1;          //设置停止位为1USART1_InitStructure.USART_WordLength = USART_WordLength_8b;     //字长8个位//USART1初始化USART_Init(USART1, &USART1_InitStructure);//使能串口1USART_Cmd(USART1, ENABLE);

5.开启中断初始化NVIC

 IT_USART1_InitStructrue.NVIC_IRQChannel = USART1_IRQn;      //中断串口1通道IT_USART1_InitStructrue.NVIC_IRQChannelCmd = ENABLE;        //使能中断串口1通道IT_USART1_InitStructrue.NVIC_IRQChannelPreemptionPriority = 1;  //抢占优先级为1IT_USART1_InitStructrue.NVIC_IRQChannelSubPriority = 1;         //响应优先级为1//串口中断初始化NVIC_Init(&IT_USART1_InitStructrue); 

6.使能串口

    //使能串口1中断服务函数USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

那么配置中断串口1的初始化函数就到这里。

三.编写中断处理函数

1.编写先对应的中断处理函数,这里用的是串口一,所以对应的也就是中断服务函数一

void USART1_IRQHandler(void)
{//如果有数据触发中断1if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  {//清除中断标志位USART_ClearITPendingBit(USART1,USART_IT_RXNE);  //将串口中断接收的数据读出来,赋值为ResRes =USART_ReceiveData(USART1);    USART_SendData(USART1, Res);switch(USARTReceIn){case 0:if(Res)   //如果Res 接收到数据,则把数据传入到数组  USARTReceBuffUSARTReceBuff[USARTReceIn++] = Res;else      //否则 USARTReceIn 清零重新判断USARTReceIn = 0;break;        default://如果Res 接收到数据则把数据传入到数组    USARTReceBuffUSARTReceBuff[USARTReceIn++] = Res;break;}//如果接收到的数据传入次数大于等于8次,则表示接收一帧数据,则把中断标志位置一if(USARTReceIn >= 8)            {USARTReceFullFlag = 1;   }}
}

2.编写收发数据处理函数

这里的检测函数是面向一帧数据来判断的,当串口接收到一帧8位的数据之后会存入数组,而这个检测函数就是判断数据再做出需要的动作的

eg:当串口接收数据标志位置一,则表示串口已经接收到了一帧8位的数据,那么就打开串口数据标志位,之后就是判断数组中数据的第一位数据是否是0x88,这些都是可以自定义的,可以加一些包头、包尾、校验和之内的判断条件,从而判断接收到的数据是否是你所需要的数据,如果不是则清空标志位、不做出任何动作,继续等待下一帧的数据来进行判断

/**************************************************************** 功  能: 串口1数据检测函数     USARE1_detection* 参  数: 无* 返回值: 无*
****************************************************************/void USARE1_detection(void)
{if(USARTReceFullFlag){if((USARTReceBuff[0] == 0x88)){GPIO_ResetBits(GPIOF, GPIO_Pin_10);GPIO_ResetBits(GPIOF, GPIO_Pin_9);       GPIO_SetBits(GPIOF, GPIO_Pin_10 | GPIO_Pin_8);}else if((USARTReceBuff[0] == 0x99)){GPIO_ResetBits(GPIOF, GPIO_Pin_10 | GPIO_Pin_8);GPIO_SetBits(GPIOF, GPIO_Pin_9);}USARTReceFullFlag = 0;      //关闭串口数据标志位USARTReceIn = 0;            //串口接收数据变量清零}
}

好了!!!

一个简单的串口接收函数就这样配置好了

STM32串口通信 中断配置相关推荐

  1. STM32串口通信中使用printf发送数据配置方法 开发环境 Keil

    STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 已有 12456 次阅读2011-6-29 23:29 | 在STM32串口通信程序中使用printf发送数据, ...

  2. STM32——串口通信

    STM32--串口通信 宗旨:技术的学习是有限的,分享的精神是无限的. 一.异步串口通信协议 STM32 的串口非常强大,它不仅支持最基本的通用串口同步.异步通信,还具有 LIN 总线功能(局域互联网 ...

  3. openmv和stm32串口通信完成二维码识别

    openmv和stm32串口通信完成二维码识别 文章目录 前言 一.所用的硬件: 二.openmv端 2.stm32端 总结 前言 注:我只是个大一的小白,本文只完成基本功能,希望能帮助有困惑的人(我 ...

  4. 【串口通信】K210与STM32串口通信、K210与OpenMV串口通信

    [串口通信]K210与STM32串口通信.K210与OpenMV串口通信 串口通信 前言 为何需要串口通信 K210如何进行串口通信 K210串口配置 K210串口发送相关定义 K210串口发送测试 ...

  5. STM32串口通信学习总结

                                                                             STM32串口通信学习总结 1.概述 1.1学习目的 ...

  6. STM32串口通信详解(嵌入式学习)

    STM32串口通信 1.通信基础知识 1.1 时钟信号区分 同步通信 异步通信 波特率 总线协议(电气协议) 1.2 通信方式划分 串行通信 并行通信 1.3 通信方向划分 单工通信 半双工通信 全双 ...

  7. 【STM32串口通信】

    STM32串口通信 学习计划 一.串口通信知识点 二.硬件部分 1.所需硬件 2.部分硬件连接 三.阻塞式 0.串口阻塞式发送和接收概念 1.STM32CUBEMX配置 2.编写阻塞式串口发送与接收代 ...

  8. linux串口命令UART,STM32串口通信UART使用

    STM32串口通信UART使用 uart使用的过程为: 1. 使能GPIO口和UART对应的总线时钟 2. 配置GPIO口的输出模式 3. 配置uart口相关的基本信息 4. 使能uart口的相关的中 ...

  9. STM32——串口通信实验

    STM32串口通信实验:字符.字符串.数组 准备工作 编程逻辑顺序 初始化结构体 1.USART初始化结构体: 2.同步时钟初始化结构体: 源码 准备工作 1.找一个空白文件,新建usart.c 和u ...

  10. Ardunio下的STM32串口通信

    文章目录 任务要求 Ardunio下的STM32串口通信 软件准备 编译烧录 标准库函数与HAL库函数的stm32编程方式差异 国人版的MCU集成开发平台 stduino IDE 总结 任务要求 安装 ...

最新文章

  1. SQL server(MSSQL)客户端工具登录数据库的两种命令行登录方式
  2. 【Redis】Redis介绍与Redis3在Window下的安装
  3. vscode如何搜索?ctrl+shift+p
  4. 知道坐标matlab三维作图,已知点坐标,要求根据坐标作出三维曲面图
  5. 空间谱专题16:间距选取分析
  6. 2021牛客第一场 I. Increasing Subsequence-前缀和优化dp
  7. String StringBuilder StringBuffer三者之间的区别~~~
  8. 半小时让你快速入门linux掌握基础命令
  9. 一行代码打印python之禅
  10. 喜欢使用VMware的.net程序员要注意呀(Visual Studio启动不了的问题)
  11. Chrome网页性能分析工具
  12. 在家佛弟子对待工作的态度——世俗八正道
  13. CF894A QAQ
  14. Vue 不睡觉教程3 - 来点实在的:自动计算剩余时间的任务列表
  15. 在美国纽约哪里有西联汇款?本文提供美国纽约法拉盛西联汇款网点代理地址
  16. BUUCTF·[MRCTF2020]天干地支+甲子·WP
  17. 【vivado IP核学习】DDS complier v6.0使用“SIN/COS LUT only”
  18. Tomcat 深度解析_02
  19. 利用计算机解决实际问题,计算机程序可以解决哪些实际问题
  20. 从「富爸爸现金流」游戏中总结的理财四条

热门文章

  1. putty传文件至服务器,putty传输文件
  2. NC65 通过编码规则生成物料编码
  3. 如何获取微信应用appid
  4. 【数字图像处理】霍夫(Hough)变换
  5. 达梦数据库DM7入门教程-安装
  6. Java项目:SSM网上超市购物商城管理系统
  7. 如何在微信小程序中实现与客户实时会话(聊天)
  8. springboot整合websocket实现微信小程序聊天
  9. 计算机对用户的操作做出反应,云南省计算机二级VB考试真题题库
  10. 计算机测试英语词汇,英语听说测试-计算机专业英语词汇.pdf