STM32——串口通信 UART
一、基础配置
Universal Asynchronous Receiver Transmitter
异步,串行,全双工
TTL电平 :高电平1 低电平0
帧格式: 起始位1bit 数据位8bit 校验位1bit 终止位1bit
NVIC Settings一栏使能接受中断。
之前有设置LCD,那么就自动给PA9和PA10设置引脚了。但如果没有设置,默认配置的是PC4和PC5。
二、串口发送
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t
Timeout)
功能:串口发送数据
参数:UART_HandleTypeDef *huart UART句柄 huart1uint8_t *pData 需要发送的数据uint16_t Size 发送的字节数uint32_t Timeout 最大发送时间,发送数据超时退出发送
案例:每次上电后发送 Hello World!
/* USER CODE BEGIN Includes */
#include "stdio.h" //使用sprintf()
#include "string.h" // 使用strlen()
/* USER CODE END Includes *//* USER CODE BEGIN PV */
char tx_buf[20];
/* USER CODE END PV *//* USER CODE BEGIN 2 */sprintf(tx_buf,"Hello World!\r\n");HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);/* USER CODE END 2 */
三、串口接收
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
功能:串口中断接收函数
参数:UART_HandleTypeDef *huart UART句柄 huart1uint8_t *pData 接收到的数据存放地址uint16_t Size 发送的字节数 为1,每次中断只能接收一个字符 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
功能:中断回调函数,串口中断接收完之后,会进入该函数。这是一个空函数,用户可以重写该函数,在函数里实现相应的操作。
1. 接收单个字符
案例:接收到 O 时,点亮LED1并发送 LED1 Open! ,接收到 C 时,熄灭LED1并发送 LED1 Close!
char tx_buf[20];
uint8_t rx_data;/* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart1,&rx_data,1); //打开接收中断
/* USER CODE END 2 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(rx_data=='O'){ucled=0x01;sprintf(tx_buf,"LED1 Open!\r\n");HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);}if(rx_data=='C'){ucled=0x00;sprintf(tx_buf,"LED1 Close!\r\n");HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);}HAL_UART_Receive_IT(&huart1,&rx_data,1);
}
2. 接收定长字符串
void Uart_Proc(void)
{if(rx_count==4){if( strcmp(rx_buf,"LEDO")==0 ){ucled=0x01;sprintf(tx_buf,"LED1 Open!\r\n");HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);}if( strcmp(rx_buf,"LEDC")==0 ){ucled=0x00;sprintf(tx_buf,"LED1 Close!\r\n");HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);}rx_count=0;memset(rx_buf,0,20);}
}void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{rx_buf[rx_count++]=rx_data;HAL_UART_Receive_IT(&huart1,&rx_data,1);
}
3. sscanf() 解析字符串
int sscanf(const char* str, const char* format, ...);
参数:str:要解析的输入字符串。format:格式字符串,指定要匹配的格式规则。...:可变参数列表,用于接收解析后的数据。
void Uart_Proc(void)
{ //22个字符if(rx_count==22){//解析rx_buf,然后用三个参数接收数据sscanf(rx_buf,"%4s:%4s:%12s",car_type,car_num,car_time);sprintf(tx_buf,"car_type:%4s\r\n",car_type);HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);sprintf(tx_buf,"car_num:%4s\r\n",car_num);HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);sprintf(tx_buf,"car_time:%12s\r\n",car_time);HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);rx_count=0;memset(rx_buf,0,20);}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{rx_buf[rx_count++]=rx_data;HAL_UART_Receive_IT(&huart1,&rx_data,1);
}
相关文章:

STM32——串口通信 UART
一、基础配置 Universal Asynchronous Receiver Transmitter 异步,串行,全双工 TTL电平 :高电平1 低电平0 帧格式: 起始位1bit 数据位8bit 校验位1bit 终止位1bit NVIC Settings一栏使能接受中断。 之前有设置LCD,…...
mybatis日期格式与字符串不匹配bug
异常特征:java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.String ### Error updating database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.Str…...

文献分享: ConstBERT固定数目向量编码文档
😂图放这了,大道至简的 idea \text{idea} idea不愧是 ECIR \text{ECIR} ECIR 👉原论文 1. ConstBERT \textbf{1. ConstBERT} 1. ConstBERT的原理 1️⃣模型的改进点:相较于 ColBERT \text{ColBERT} ColBERT为每个 Token \text{Tok…...

学习记录-用例设计编写
黑马测试视频记录 目录 一、 软件测试流程 二、测试用例编写格式 1、等价类法 2、边界值分析法 3、 判定表法 4、场景法编辑 5、错误推荐法 一、 软件测试流程 二、测试用例编写格式 1、等价类法 2、边界值分析法 3、 判定表法 4、场景法 5、错误推荐法 时间紧任务重…...

学习工具的一天之(burp)
第一呢一定是先下载 【Java环境】:Java Downloads | Oracle 下来是burp的下载 Download Burp Suite Community Edition - PortSwigger 【下载方法二】关注的一个博主 【BurpSuite 安装激活使用详细上手教程 web安全测试工具】https://www.bilibili.com/video/BV…...
el-tree右键节点动态位置展示菜单;el-tree的节点图片动态根据节点属性color改变背景色;加遮罩层(opacity)
一、el-tree右键节点动态位置展示菜单 关键:@node-contextmenu="handleRightClick"与@node-click=“handleNodeClick” <div class="content"><el-tabs class="tabs" @tab-click="handleClick" v-model="Modal"…...
K8s 1.27.1 实战系列(一)准备工作
一、主机规划与硬件要求 1、节点数量 至少需要 3 台服务器(1 台 Master 节点,2 台 Worker 节点)。本地测试可缩容:若仅用于测试,可缩减为 1 个 Master 和 1 个 Worker,但需注意稳定性风险。2、硬件配置 Master 节点:建议 2 核 CPU、8GB 内存、80GB 硬盘。Worker 节…...

说一下SpringBoot3新特新和JDK17新特性
JDK1.8(Java8)新特性 stream流式编程 流处理 Stream API 提供了对集合数据进行操作的一种高效、简洁的方式。它支持顺序和并行的聚合操作 如:过滤(filter)、排序(sort)、映射(map&…...

Linux系统服务安全检测手记
一:服务器ip暴露ip和端口的安全问题 服务器IP和端口暴露在外网中确实存在一定的安全风险,以下是几个主要的安全问题及相应的缓解措施: ### 主要安全问题 1. **直接攻击**: - 暴露的IP地址和开放的端口可能成为黑客直接攻击的…...

鸿蒙与DeepSeek深度整合:构建下一代智能操作系统生态
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/north 目录 技术融合背景与价值鸿蒙分布式架构解析DeepSeek技术体系剖析核心整合架构设计智能调度系统实现…...
[创业之路-329]:华为铁三角实施的步骤
一、通用过程 华为铁三角实施的步骤主要包括以下几个关键阶段: 1、明确角色与职责 确定铁三角成员:组建由客户经理(AR)、解决方案经理(SR)和交付经理(FR)组成的铁三角团队。制定岗…...

1.15-16-17-18迭代器与生成器,函数,数据结构,模块
目录 15,Python3 迭代器与生成器15-1 迭代器15-1-1 基础知识15-1-2 迭代器与for循环工作原理 15-2 生成器(本质就是迭代器)15-2-1 yield 表达式15-2-2 三元表达式15-2-3 列表生成式15-2-4 其他生成器(——没有元祖生成式——&…...
java面向对象(详细讲解)
第一章 类和对象 1.面向对象的介绍 1.面向过程:自己的事情自己做,代表语言c语言 2.面向对象:自己的事情别人做,代表语言java 3.为啥要使用面向对象思想编程:很多功能别人给我们实现好了,我们只需要拿过…...

代码随想录二刷|图论2
图论 基础知识 1 无向图 (1)度:一个顶点连n条边就度为n (2)权 加权无向图:有边长的无向图 (3)通道:两个顶点之间有一些边和点,并且没有重复的边 路&am…...

毕业项目推荐:基于yolov8/yolov5/yolo11的暴力行为检测识别系统(python+卷积神经网络)
文章目录 概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式)功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…...

服务器CPU微架构
1、微架构图 前端:预解码、解码、分支预测、L1指令缓存、指令TLB缓存 后端:顺序重排缓存器ROB处理依赖,调度器送到执行引擎 执行引擎:8路超标量,每一路可以进行独立的微操作处理 Port0、1、5、6支持整数、浮点数的加…...

用本地浏览器打开服务器上使用的Tensorboard
文章目录 前言一、Tensorboard的安装二、使用步骤1.服务器上的设置2.在本地打开 总结 前言 最近有使用服务器上的Tensorboard的需求,踩了几个雷,现已在搜索和帮助下解决,总结于此。 一、Tensorboard的安装 pip install tensorboard2.12.0注…...

Nginx或Tengine服务器配置SSL证书
本文将全面介绍如何在Nginx或Tengine服务器配置SSL证书,具体包括下载和上传证书文件,在Nginx上配置证书文件、证书链和证书密钥等参数,以及安装证书后结果的验证。成功配置SSL证书后,您将能够通过HTTPS加密通道安全访问Nginx服务器…...

【基础4】插入排序
核心思想 插入排序是一种基于元素比较的原地排序算法,其核心思想是将数组分为“已排序”和“未排序”两部分,逐个将未排序元素插入到已排序部分的正确位置。 例如扑克牌在理牌的时候,一般会将大小王、2、A、花牌等按大小顺序插入到左边&…...
2安卓开发的主要语言
1. Kotlin(官方首选语言) 定位:Google 官方推荐的首选 Android 开发语言(2019 年起)。 优势: 简洁高效:语法糖减少样板代码(如 data class 自动生成 equals()/hashCode()࿰…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...