STM32F4 STD标准库串口接收中断+空闲中断例程

STM32F4 STD标准库串口接收中断+空闲中断例程


  • 🔖工程基于STM32F446

✨用惯了STM32CubeMX傻瓜式配置,突然改用标准库写代码,初始化外设内容,总是丢三落四的。

📗串口初始化配置

void uart_init(uint32_t bound)
{//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);	//使能USART1,GPIOA时钟/* Enable GPIO clock */RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);/* Connect PXx to USARTx_Tx*/GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);/* Connect PXx to USARTx_Rx*/GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);//USART1_TX   GPIOA.9/* Configure USART Tx as alternate function  */GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure USART Rx as alternate function  */GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_Init(GPIOA, &GPIO_InitStructure);//Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3 ; //抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;	//子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;	//IRQ通道使能NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器//USART 初始化设置USART_InitStructure.USART_BaudRate = bound;//串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式USART_Init(USART1, &USART_InitStructure); //初始化串口1USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//开启串口空闲中断USART_Cmd(USART1, ENABLE); //使能串口1}

📘串口中断函数

void USART1_IRQHandler(void)	//串口1中断服务程序
{if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {// USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清标志位
//        USART_RX_BUF[length] = USART_ReceiveData(USART1);//读取接收到的数据USART_RX_BUF[length] = USART1->DR & 0x0FF;length++;} else if(USART_GetFlagStatus(USART1, USART_FLAG_IDLE) != RESET) { //空闲帧中断USART1->SR; //先读SR.再读DRUSART1->DR; //清空寄存器length = 0;USART_RX_STA = 1; //数据接收 标志位}}

📑接收数据所需的变量和宏定义

#define USART_REC_LEN   			64  	//定义最大接收字节数 64
#define EN_USART1_RX 			1		//使能(1)/禁止(0)串口1接收
uint8_t USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
//接收状态
uint8_t USART_RX_STA = 0; //接收状态标记
static __IO uint16_t length = 0;//接收数据时的下标

📒处理接收数据和释放空间

 if(USART_RX_STA) {USART_RX_STA = 0;//清标志位printf("Re:%s\n", USART_RX_BUF);memset(USART_RX_BUF, 0x00, sizeof(USART_RX_BUF));//清空接收数组}
  • 🔬测试效果:
    在这里插入图片描述

📚测试工程

链接:https://pan.baidu.com/s/13UxJawYkAkpIb8SzhSnpqg?pwd=8rc0 
提取码:8rc0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/354028.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web渗透信息收集进阶

网站敏感目录与文件 网站敏感目录表示网站目录中容易被恶意人员利用的一些目录。通常恶意人员都是通过工具扫描,来扫出网站的敏感目录,敏感目录是能够得到其他网页的信息,从而找到后台管理页面,尝试进入后台等,扫描网…

告别盲目决策!精益生产KPI指标管理系统让你的企业更聪明

在当今快速变化的商业环境中,企业为了保持竞争力,需要高效地追踪、分析和优化各种业务指标。为了实现这一目标,越来越多的企业开始引入指标管理系统,这一工具在提升管理效率和促进业务增长方面发挥着至关重要的作用。 一、什么是…

图解Linux内核(基于6.x):解读Linux内存反向映射之匿名映射

文章目录 📑前言一、匿名映射的mapping二、推荐阅读2.1 一图速览2.2 内容简介 📑前言 内存映射中,我们经常讨论的是由虚拟内存定位物理内存(也就是folio或者page),实际上在很多场景中(比如内存回…

MATLAB直方图中bin中心与bin边界之间的转换

要将 bin 中心转换为 bin 边界,请计算 centers 中各连续值之间的中点。 d diff(centers)/2; edges [centers(1)-d(1), centers(1:end-1)d, centers(end)d(end)];要将 bin 边界转换为bin 中心 bincenters binedges(1:end-1)diff(binedges)/2;

森林之下延迟高如何处理 森林之下联机卡顿的解决方法

森林之下是一款结合了农场模拟、恐怖生存的游戏,玩家需要管理一个被“闹鬼的树林”包围的农场,种植农作物,拯救、驯服、饲养动物,探索被诅咒的森林,并且收集物品来破除诅咒。这款游戏目前已经开放了demo,不…

创新入门 | 病毒循环Viral Loop是什么?为何能实现指数增长

今天,很多高速增长的成功创业公司都在采用”病毒循环“的策略去快速传播、并扩大用户基础。究竟什么是“病毒循环”?初创公司的创始人为何需要重视这个策略?这篇文章中将会一一解答与病毒循环有关的各种问题。 一、什么是病毒循环&#xff08…

【计算机毕业设计】211校园约拍微信小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

增强大型语言模型(LLM)可访问性:深入探究在单块AMD GPU上通过QLoRA微调Llama 2的过程

Enhancing LLM Accessibility: A Deep Dive into QLoRA Through Fine-tuning Llama 2 on a single AMD GPU — ROCm Blogs 基于之前的博客《使用LoRA微调Llama 2》的内容,我们深入研究了一种称为量化低秩调整(QLoRA)的参数高效微调&#xff0…

Python 基础:文件

目录 一、从文件中读取数据1.1 读取整个文件1.2 逐行读取 二、写入文件2.1 写入空文件2.2 写入多行2.3 附加到文件 遇到看不明白的地方,欢迎在评论中留言呐,一起讨论,一起进步! 本文参考:《Python编程:从入…

【植物大战僵尸杂交版】致敬传奇游戏玩家——一个普通人的六年坚持

目录 缘起 波澜 凌云 缘起 曾​​​​​​佳伟是《植物大战僵尸》的忠实粉丝,这款游戏给了他很多乐趣,也成为了他度过困难时期的精神支柱。他决定制作杂交版,部分原因是出于对原版游戏的热爱和致敬。 六年前,出于对一些pvz续作…

[AIGC] MyBatis-Plus中如何使用XML进行CRUD操作?

在MyBatis-Plus中,我们可以非常方便地使用XML进行CRUD(创建、读取、更新、删除)操作。以下是一些基本步骤和示例,希望能帮助到还在初学阶段的您。 文章目录 1. 创建Mapper接口2. 创建Mapper XML 文件3. 调用Mapper方法 1. 创建Ma…

SpringBoot实现的大文件上传

前言 大文件分片上传和断点续传是为了解决在网络传输过程中可能遇到的问题,以提高文件传输的效率和稳定性。 首先,大文件分片上传是将大文件分割成较小的片段进行上传。这样做的好处是可以减少单个文件的传输时间,因为较小的文件片段更容易快…

微博舆情分析系统可以继续完善的基于python 前端vue

微博舆情分析系统可以继续完善的,前后端分离,前端基于vue 后端基于python的flask可以说是非常的简洁,支持实时更新数据。界面如图 主要工作点体现在后端实时更新数据跟数据的处理方面上,后续有空会用hadoop来处理海量数据真…

Clickhouse监控_监控的指标以及Grafana配置Clickhouse指标异常时触发报警

使用PrometheusGrafana来监控Clickhouse服务和性能指标 Clickhouse监控指标的官方文档https://clickhouse.com/docs/zh/operations/monitoring 建议使用PrometheusGrafana组合监控Clickhouse服务和性能指标,数据流向:Prometheus的clickhouse_exporter组件…

文件扫描工具都有哪些?职场大佬都在用的文本提取工具大盘点~

回想起刚毕业初入职场那阵子,领导让帮忙把纸质文件扫描提取为文本时,还只会傻乎乎地一点点操作,属实是费劲得很! 好在后面受朋友安利,找到了4个能够快速实现文件扫描文字提取的方法,这才让我的办公效率蹭蹭…

JUC并发编程第十四章——线程安全集合类

1 并发集合 1.1 线程安全集合分类 a.遗留的线程安全集合 遗留的线程安全集合如 Hashtable , Vector b.使用 Collections 装饰的线程安全集合 使用 Collections 装饰的线程安全集合,如: Collections.synchronizedCollectionCollections.sy…

【FreeRTOS】估算栈的大小

参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》 目录 估算栈的大小回顾简介计算说明估计函数用到的栈有多大合计 估算栈的大小 回顾 上一篇文章链接:http://t.csdnimg.cn/Cc8b4 传送门: 上一篇文章 上一篇文章创建的三个任务 /* 创建任务:声 *…

一个新的剪辑拼接图片和视频类APP在测试阶段需要测试内容,以iPhone APP为例:

1.UI参照原型图和设计稿 如有改动,需及时沟通 2.iPad转屏、不同iPhone和iPad机型测试 3.黑夜白天模式 2.各功能模块流程需要测试跑通 3.订阅支付模块 a. UI设计是否和设计稿一致 b.涉及订阅的位置都要测试 c.免费试用是否显示;试用结束后&#xff0c…

【Gitlab】访问默认PostgreSQL数据库

本地访问PostgreSQL gitlab有可以直接访问内部PostgreSQL的命令 sudo gitlab-rails dbconsole # 或者 sudo gitlab-psql -d gitlabhq_production效果截图 常用SQL # 查看用户状态 select id,name,email,state,last_sign_in_at,updated_at,last_credential_check_at,last_act…

C语言学习之路(黑马)

文章目录 环境搭建HelloWorld代码编写代码分析执行流程 核心语法注释单行注释多行注释注释示例 关键字常量变量计算机进制数据类型标识符键盘录入 运算符算术运算符比较运算符赋值运算符自增减运算符逻辑运算符三元运算符逗号运算符运算符的优先级 流程控制语句顺序结构分支结构…