当前位置: 首页 > news >正文

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&#xff08;Java8&#xff09;新特性 stream流式编程 流处理 Stream API 提供了对集合数据进行操作的一种高效、简洁的方式。它支持顺序和并行的聚合操作 如&#xff1a;过滤&#xff08;filter&#xff09;、排序&#xff08;sort&#xff09;、映射&#xff08;map&…...

Linux系统服务安全检测手记

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

鸿蒙与DeepSeek深度整合:构建下一代智能操作系统生态

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/north 目录 技术融合背景与价值鸿蒙分布式架构解析DeepSeek技术体系剖析核心整合架构设计智能调度系统实现…...

[创业之路-329]:华为铁三角实施的步骤

一、通用过程 华为铁三角实施的步骤主要包括以下几个关键阶段&#xff1a; 1、明确角色与职责 确定铁三角成员&#xff1a;组建由客户经理&#xff08;AR&#xff09;、解决方案经理&#xff08;SR&#xff09;和交付经理&#xff08;FR&#xff09;组成的铁三角团队。制定岗…...

1.15-16-17-18迭代器与生成器,函数,数据结构,模块

目录 15&#xff0c;Python3 迭代器与生成器15-1 迭代器15-1-1 基础知识15-1-2 迭代器与for循环工作原理 15-2 生成器&#xff08;本质就是迭代器&#xff09;15-2-1 yield 表达式15-2-2 三元表达式15-2-3 列表生成式15-2-4 其他生成器&#xff08;——没有元祖生成式——&…...

java面向对象(详细讲解)

第一章 类和对象 1.面向对象的介绍 1.面向过程&#xff1a;自己的事情自己做&#xff0c;代表语言c语言 2.面向对象&#xff1a;自己的事情别人做&#xff0c;代表语言java 3.为啥要使用面向对象思想编程&#xff1a;很多功能别人给我们实现好了&#xff0c;我们只需要拿过…...

代码随想录二刷|图论2

图论 基础知识 1 无向图 &#xff08;1&#xff09;度&#xff1a;一个顶点连n条边就度为n &#xff08;2&#xff09;权 加权无向图&#xff1a;有边长的无向图 &#xff08;3&#xff09;通道&#xff1a;两个顶点之间有一些边和点&#xff0c;并且没有重复的边 路&am…...

毕业项目推荐:基于yolov8/yolov5/yolo11的暴力行为检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…...

服务器CPU微架构

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

用本地浏览器打开服务器上使用的Tensorboard

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

Nginx或Tengine服务器配置SSL证书

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

【基础4】插入排序

核心思想 插入排序是一种基于元素比较的原地排序算法&#xff0c;其核心思想是将数组分为“已排序”和“未排序”两部分&#xff0c;逐个将未排序元素插入到已排序部分的正确位置。 例如扑克牌在理牌的时候&#xff0c;一般会将大小王、2、A、花牌等按大小顺序插入到左边&…...

2安卓开发的主要语言

1. Kotlin&#xff08;官方首选语言&#xff09; 定位&#xff1a;Google 官方推荐的首选 Android 开发语言&#xff08;2019 年起&#xff09;。 优势&#xff1a; 简洁高效&#xff1a;语法糖减少样板代码&#xff08;如 data class 自动生成 equals()/hashCode()&#xff0…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...