STM32串口通信 中断配置
一.关于如何配置通过中断的方式配置串口的收发 ,一共就是这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串口通信 中断配置相关推荐
- STM32串口通信中使用printf发送数据配置方法 开发环境 Keil
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 已有 12456 次阅读2011-6-29 23:29 | 在STM32串口通信程序中使用printf发送数据, ...
- STM32——串口通信
STM32--串口通信 宗旨:技术的学习是有限的,分享的精神是无限的. 一.异步串口通信协议 STM32 的串口非常强大,它不仅支持最基本的通用串口同步.异步通信,还具有 LIN 总线功能(局域互联网 ...
- openmv和stm32串口通信完成二维码识别
openmv和stm32串口通信完成二维码识别 文章目录 前言 一.所用的硬件: 二.openmv端 2.stm32端 总结 前言 注:我只是个大一的小白,本文只完成基本功能,希望能帮助有困惑的人(我 ...
- 【串口通信】K210与STM32串口通信、K210与OpenMV串口通信
[串口通信]K210与STM32串口通信.K210与OpenMV串口通信 串口通信 前言 为何需要串口通信 K210如何进行串口通信 K210串口配置 K210串口发送相关定义 K210串口发送测试 ...
- STM32串口通信学习总结
STM32串口通信学习总结 1.概述 1.1学习目的 ...
- STM32串口通信详解(嵌入式学习)
STM32串口通信 1.通信基础知识 1.1 时钟信号区分 同步通信 异步通信 波特率 总线协议(电气协议) 1.2 通信方式划分 串行通信 并行通信 1.3 通信方向划分 单工通信 半双工通信 全双 ...
- 【STM32串口通信】
STM32串口通信 学习计划 一.串口通信知识点 二.硬件部分 1.所需硬件 2.部分硬件连接 三.阻塞式 0.串口阻塞式发送和接收概念 1.STM32CUBEMX配置 2.编写阻塞式串口发送与接收代 ...
- linux串口命令UART,STM32串口通信UART使用
STM32串口通信UART使用 uart使用的过程为: 1. 使能GPIO口和UART对应的总线时钟 2. 配置GPIO口的输出模式 3. 配置uart口相关的基本信息 4. 使能uart口的相关的中 ...
- STM32——串口通信实验
STM32串口通信实验:字符.字符串.数组 准备工作 编程逻辑顺序 初始化结构体 1.USART初始化结构体: 2.同步时钟初始化结构体: 源码 准备工作 1.找一个空白文件,新建usart.c 和u ...
- Ardunio下的STM32串口通信
文章目录 任务要求 Ardunio下的STM32串口通信 软件准备 编译烧录 标准库函数与HAL库函数的stm32编程方式差异 国人版的MCU集成开发平台 stduino IDE 总结 任务要求 安装 ...
最新文章
- SQL server(MSSQL)客户端工具登录数据库的两种命令行登录方式
- 【Redis】Redis介绍与Redis3在Window下的安装
- vscode如何搜索?ctrl+shift+p
- 知道坐标matlab三维作图,已知点坐标,要求根据坐标作出三维曲面图
- 空间谱专题16:间距选取分析
- 2021牛客第一场 I. Increasing Subsequence-前缀和优化dp
- String StringBuilder StringBuffer三者之间的区别~~~
- 半小时让你快速入门linux掌握基础命令
- 一行代码打印python之禅
- 喜欢使用VMware的.net程序员要注意呀(Visual Studio启动不了的问题)
- Chrome网页性能分析工具
- 在家佛弟子对待工作的态度——世俗八正道
- CF894A QAQ
- Vue 不睡觉教程3 - 来点实在的:自动计算剩余时间的任务列表
- 在美国纽约哪里有西联汇款?本文提供美国纽约法拉盛西联汇款网点代理地址
- BUUCTF·[MRCTF2020]天干地支+甲子·WP
- 【vivado IP核学习】DDS complier v6.0使用“SIN/COS LUT only”
- Tomcat 深度解析_02
- 利用计算机解决实际问题,计算机程序可以解决哪些实际问题
- 从「富爸爸现金流」游戏中总结的理财四条