STM32——串口通信 UART

news2025/3/6 16:17:54

一、基础配置

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句柄 huart1
    uint8_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句柄 huart1
    uint8_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);
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP fastadmin 学习

安装php环境安装mysql插件 修改 php.ini下载 phpstudy、fastadmin 错误 安装FastAdmin could not find driver 参考链接 安装插件 创建1.php <? phpinfo(); ?>运行 http://127.0.0.1/1.php 查看 POD 页面访问404 伪静态 Apache <IfModule mod_rewrite.c> O…

Autojs无线连接vscode方法

1.获得电脑的IP 在电脑的CMD界面输入 ipconfig 然后找到ipv4的那一行&#xff0c;后面的即是你的电脑IP地址 2.打开vscode的autojs服务 安装autojs插件 在vscode界面按下ctrlshiftp 输入autojs 找到 点击 之后打开手机上的autojs 之后输入刚刚电脑上的地址 可以看到vsc…

天津大学02-深度解读DeepSeek:部署、使用、安全【文末附下载链接】

大模型风险与不当用例——价值观错位 大模型与人类价值观、期望之间的不一致而导致的安全问题&#xff0c;包含&#xff1a;• 社会偏见&#xff08;Social Bias&#xff09;LLM在生成文本时强化对特定社会群体的刻板印象&#xff0c;例如将穆斯林与恐怖主义关联&#xff0c;或…

SPI驱动(三) -- SPI设备树处理过程

文章目录 参考资料&#xff1a;一、SPI设备树节点构成二、SPI设备树示例2.1 SPI控制器节点属性2.2 SPI设备节点属性 三、SPI设备树处理过程四、总结 参考资料&#xff1a; 内核头文件&#xff1a;include\linux\spi\spi.h内核文档&#xff1a;Documentation\devicetree\bindin…

MARL零样本协调之Fictitious Co-Play学习笔记

下列引用来自知乎作者Algernon 知乎link FCP作为ZSC领域两阶段训练方法的开创者 论文《Collaborating with Humans without Human Data》来自 NeurIPS 2021。这篇论文提出 Fictitious Co-Play (FCP) 来解决 ZSC 问题。论文认为&#xff0c;ZSC 的第一个重要问题是对称性&#x…

idea中的查看git历史记录,不显示详细信息

一、正常情况显示 1、idea中git查看history正常显示如下图&#xff1a; 二、非正常情况下显示 1、idea中git查看history&#xff0c;现在不显示提交的历史文件详细信息&#xff0c;如下图&#xff1a; 三、解决方式 1、找到如下窗口中画红色框的黑色线条&#xff0c;鼠标放在…

Redis——快速入门

目录 Redis简介 安装配置(Windows) GUI工具RedisInsight的使用 十大数据类型&#xff08;5基本5高级&#xff09; 字符串String 列表List 集合Set(S) 有序集合SortedSet(Z) 哈希Hash(H) 发布订阅模式 消息队列Stream(X) 地理空间Geospatial(GEO) HyperLogLog(PF) …

LLM 模型 Prompt 工程

目录 1、Prompt 基础概念 2、Prompt 主要构成 3、Prompt 相关技术 3.1、思维链 3.2、自洽性 3.3、思维树 1、Prompt 基础概念 Prompt 工程是通过设计和优化自然语言提示&#xff08;Prompt&#xff09;&#xff0c;引导LLM生成符合特定任务需求的输出的技术。其核心目标是…

Vue中实现大文件的切片并发下载和下载进度展示

Vue中实现大文件的切片下载 切片下载需要后端提供两个接口&#xff0c;第一个接口用来获取当前下载文件的总切片数&#xff0c;第二个接口用来获取具体某一个切片的内容。 界面展示 数据流展示 代码 接口 // 切片下载-获取文件的总切片数 export function getChunkDownload…

开源表单、投票、测评平台部署教程

填鸭表单联合宝塔面板深度定制,自宝塔面板 9.2 版本开始,在宝塔面板-软件商店中可以一键部署填鸭表单系统。 简单操作即可拥有属于自己的表单问卷系统,快速赋能业务。即使小白用户也能轻松上手。 社区版体验地址:https://demo.tduckapp.com/home 前端项目地址: tduck-fro…

GaussDB性能调优技术指南

​一、性能调优核心目标 ​降低响应时间&#xff1a;缩短单次查询或事务的处理时间&#xff08;如从秒级优化到毫秒级&#xff09;。 ​提高吞吐量&#xff1a;支撑更高并发请求&#xff08;如从千次/秒提升到百万次/秒&#xff09;。 ​资源高效利用&#xff1a;减少 CPU、…

【后端开发】go-zero微服务框架实践(goland框架对比,go-zero开发实践,文件上传问题优化等等)

【后端开发】go-zero微服务框架实践&#xff08;goland框架对比&#xff0c;go-zero开发实践&#xff0c;文件上传问题优化等&#xff09; 文章目录 1、go框架对比介绍2、go-zero 微服务开发实践3、go-zero 文件上传问题优化 1、go框架对比介绍 国内开源goland框架对比 1 go-…

C#—csv文件格式操作实例【在winform表格中操作csv】

C#—csv文件格式操作实例【在winform表格中操作csv】 实例一 实例效果 当在winform界面中点击读取按钮时 将csv中的所有数据读取出来放置在datagridview控件&#xff0c;可以在datagridview控件中编辑数据&#xff0c;当点击保存按钮时 将datagridview控件中的所有数据存储在…

一周学会Flask3 Python Web开发-WTForms表单验证

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们可以通过WTForms表单类属性的validators属性来实现表单验证。 常用的WTForms验证器 验证器说明DataRequired(messageNo…

23种设计模式一览【设计模式】

文章目录 前言一、创建型模式&#xff08;Creational Patterns&#xff09;二、结构型模式&#xff08;Structural Patterns&#xff09;三、行为型模式&#xff08;Behavioral Patterns&#xff09; 前言 设计模式是软件工程中用来解决特定问题的一组解决方案。它们是经过验证…

GPIO及其应用

GPIO及其应用 文章目录 GPIO及其应用1.GPIO概括2.GPIO工作基本结构3.GPIO寄存器3.1寄存器总览3.2寄存器功能3.3BIT简写的代表 4.GPIO的电气特性4.1拉电流与灌电流4.2驱动大功率负载4.3电平逻辑兼容性 5.LED闪烁(实操)6.LED交替闪烁&#xff08;实操&#xff09;7.开关控制LED灯…

NO1.C++语言基础|四种智能指针|内存分配情况|指针传擦和引用传参|const和static|c和c++的区别

1. 说⼀下你理解的 C 中的四种智能指针 智能指针的作用是管理指针&#xff0c;可以避免内存泄漏的发生。 智能指针就是一个类&#xff0c;当超出了类的作用域时&#xff0c;就会调用析构函数&#xff0c;这时就会自动释放资源。 所以智能指针作用的原理就是在函数结束时自动释…

Vue 关于如何在vue中实现跨域请求问题

&#x1f4da;首先&#xff0c;让我们了解一下什么是跨域。当一个请求的URL的协议、域名、端口三者中任意一个与当前页面的URL不同&#xff0c;就称为跨域请求。 &#x1f512;为什么会出现跨域问题呢&#xff1f;这是因为浏览器的同源策略限制。同源策略是浏览器最核心的安全…

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

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

torch.einsum 的 10 个常见用法详解以及多头注意力实现

torch.einsum 是 PyTorch 提供的一个高效的张量运算函数&#xff0c;能够用紧凑的 Einstein Summation 约定&#xff08;Einstein Summation Convention, Einsum&#xff09;描述复杂的张量操作&#xff0c;例如矩阵乘法、转置、内积、外积、批量矩阵乘法等。 1. 基本语法 tor…