HAL库学习梳理——UART

news2025/2/22 1:01:19

   笔者跟着B站铁头山羊视频学习 STM32-HAL库 开发教程。下面对HAL库有关UART课程知识和应用做一个梳理。

省流:

  uint8_t byteNumber = 0x5a;
  uint8_t byteArray[] = {0,1,2,3,4,5};
  char ch = 'a';
  char *str = "Hello word";
  
  HAL_UART_Transmit(&huart1,&byteNumber,1,HAL_MAX_DELAY);                // 发送一个字节
  HAL_UART_Transmit(&huart1,byteArray,6,HAL_MAX_DELAY);                  // 发送一个多个字节
  HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,HAL_MAX_DELAY);             // 发送一个字符
  HAL_UART_Transmit(&huart1,(uint8_t *)str,strlen(str),HAL_MAX_DELAY);   // 发送一个字符串

发送数据给 串口外设。

uint8_t Data_Receive;

HAL_UART_Receive(&huart1,&Data_Receive,1,HAL_MAX_DELAY); 

if(Data_Receive == 0)
{
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
}

将串口接收到的数据保存到自定义的变量中,再判断。

1、串口UART基本原理

串口工作原理
串口的数据帧格式

常用8位无校验的数据帧格式:1 个起始位、1 个停止位、8个数据位。

奇偶校验方法示意
波特率

2、示例

2.1 简单数据传输

(1) GPIO引脚配置

点击UART1 自动分配串口引脚

数据收发引脚

 将PA9发送引脚设置为复用推挽输出,系统自动配置。

  将PA9发送引脚设置为输入模式。手动配置上拉电阻使能,以防这个引脚意外断开,像按键一样。

(2)UART参数配置

选择异步模式(Asynchronus),对下面的参数设置(Parameter Setting)进行配置。

串口参数配置

(3)程序

UART发送数据——HAL函数接口
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);   // 点亮LED,C13置0,开漏输出低电压
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);      // 点亮LED,C9置1,推挽输出高电压
      HAL_Delay(500);

      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);     // 熄灭LED,C13置1,开漏输出高阻态
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);    // 熄灭LED,C9置0,推挽输出低电压
      HAL_Delay(500);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

2.2 通过串口发送命令点亮LED灯

(1) UART参数配置

参数配置

(2)程序 

UART接收数据——HAL函数接口
int main(void)
{
  /* USER CODE BEGIN 1 */
  uint8_t byteNumber = 0x5a;
  uint8_t byteArray[] = {0,1,2,3,4,5};
  char ch = 'a';
  char *str = "Hello word";
  
  HAL_UART_Transmit(&huart1,&byteNumber,1,HAL_MAX_DELAY);
  HAL_UART_Transmit(&huart1,byteArray,6,HAL_MAX_DELAY);
  HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,HAL_MAX_DELAY);
  HAL_UART_Transmit(&huart1,(uint8_t *)str,strlen(str),HAL_MAX_DELAY);
  

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    
    char *Data_Receive;
    
    HAL_UART_Receive(&huart1,(uint8_t *)Data_Receive,sizeof(Data_Receive),HAL_MAX_DELAY);  // 接收UART数据保存到Data_Receive
    if( strncmp(Data_Receive,"on",2)==0)  // 判断
    {
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);   // 点灯
    }
    else if( strncmp(Data_Receive,"off",3)==0)
    {
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
    }
  
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

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

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

相关文章

Windows环境下 VS2022 编译 Xvid 源码

Xvid Xvid 是一个开源的视频编解码器,遵循 MPEG-4 视频编码标准,特别是 MPEG-4 Part 2 Advanced Simple Profile。它被广泛用于视频的压缩和解压,尤其是在互联网上分享视频文件时,因为它能够有效地减小文件大小而不会过多损失视频…

切线空间:unity中shader切线空间,切线矩阵,TBN矩阵 ,法线贴图深度剖析

unity中shader切线空间 看了网上各种解释,各种推理。直接脑袋大。感觉复杂的高大上。当深入了解后,才发是各种扯淡。 一切从模型法向量开始 在shader中,大部分的光照计算都是与法向量有关。通过法向量和其他向量能计算出模型在光线照射下的…

How to see if openAI (node js) createModeration response “flagged“ is true

题意:如何查看 OpenAI (Node.js) createModeration 响应中的 "flagged" 是否为 true 问题背景: Using the OpenAI createModeration feature, I am trying to see if the string gets flagged or not. 使用 OpenAI 的 createModeration 功能…

医学数据分析实训 项目一 医学数据采集

项目一 医学数据采集 一、实践目的 了解医学数据的特点;熟悉常见的医学公共数据库的使用方法;掌握获取医学数据的方法; 二、实践平台 操作系统:Windows10 及以上Python 版本:3.8.x 及以上PyCharm 或 Anoconda 集成…

Ubuntu 安装最新 Google Chrome 浏览器

谷歌浏览器使用简单并且用户友好,使用它浏览互联网愉悦至极。许多用户喜欢 Chrome,因为它加载网页又快又流畅。Chrome 提供强大的安全功能,帮助用户保持在线安全。Google Chrome 官方提供了一个 Debian 软件包存储库,基于 Debian …

Llama Factory :百种以上语言模型的统一高效微调框架

人工智能咨询培训老师叶梓 转载标明出处 大模型适应到特定下游任务时,传统的全参数微调方法成本高昂,因此,研究者们一直在探索更高效的微调技术。由北京航空航天大学和北京大学的研究团队提出了一个名为Llama Factory的统一框架,…

【免费刷题】实验室安全第一知识题库分享

道路千万条,实验安全第一条。 嘿,实验室的小伙伴们!是不是还在为实验室安全考试而烦恼?别担心,今天就让我来分享一些实用的题库,帮助你轻松应对考试,同时也更好地保护自己和实验室的安全。 一、…

前端开发第三节课

20-目录文件夹和根目录 4.8图像标签和路径(重点) 2.路径(前期铺垫知识) (1)目录文件夹和目录 实际工作中,我们的文件不能随便乱放,否则用起来很难快速地找到他们,因此…

LeetCode 热题 100 回顾13

干货分享,感谢您的阅读!原文见:LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 (简单) 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标…

基于SpringBoot+Vue的个性化旅游推荐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

free -h 查看内存free空间不足

free空间不足 大部分被buff/cache占用 解决办法一: 手动释放缓存 释放页缓存 sudo sync; sudo sysctl -w vm.drop_caches1 释放目录项和inode缓存 sudo sync; sudo sysctl -w vm.drop_caches2 释放所有缓存(页缓存、目录项和inode缓存) sudo sync…

【隐私计算】安全多方计算MPC中的高效三角函数计算

隐私计算中的非线性函数很难算,或者开销很大。三角函数更是如此,Squirrel文章中提出了一种高效的计算方式,感觉可以作为一种通用优化方案。 参考文献:Squirrel: A Scalable Secure Two-Party Computation Framework for Training…

几何概率模型

一、几何概率模型 ① 样本空间的样本点为无限个 ② 每个样本点发生的可能性是均等的 ③ P(A)事件A的几何度量值/样本空间的几何度量值 说明:如果样本空间的样本点为有限个,则为古典概型 通过2个例子,来感受下两者的区别 ① 例&#xff1…

大语言模型之ICL(上下文学习) - In-Context Learning Creates Task Vectors

本文译自 《In-Context Learning Creates Task Vectors》 —— 论文中的作者也在用LLaMA模型,笔者自我感觉拉近和世界顶级人才的距离,哈哈内容较长,如想看结论直接看 摘要、介绍与结论几个章节即可,看细节请看目录索引。经验风险最…

ZoneTree: 高性能ACID兼容的.NET有序键值数据库

推荐一个专门针对键值存储的开源数据库。 01 项目简介 ZoneTree基于.Net开发的开源键值数据库。它以其持久化存储、高性能处理、事务性操作和ACID合规性而著称。ZoneTree能够以内存数据库的形式运行,也可以在本地或云存储上进行数据持久化,提供了灵活性…

人工智能物联网:一项综述

这篇论文的标题是《Artificial Intelligence of Things: A Survey》,作者是 Shakhrul Iman Siam 等人,来自不同的大学和研究机构。论文提供了对人工智能物联网(AIoT)研究的系统性和全面性回顾。以下是论文的主要内容概述&#xff…

【H2O2|全栈】关于CSS(4)CSS基础(四)

目录 CSS基础知识 前言 准备工作 精灵图 概念 属性 案例 浮动 基础属性 清除浮动 案例 预告和回顾 后话 CSS基础知识 前言 本系列博客将分享层叠样式表(CSS)有关的知识点。 接下来的几期内容相对比较少,主要是对前面的内容进…

服务网关Gateway快速入门

1.引入 网关可以把它理解成坐高铁时的安检,他可以对用户做身份验证,哪些人能通过,哪些人不能通过,都由他决定,如果没有安检,那么高铁的安全性将受到打击,一个微服务没有网关,那么接口…

大数据新视界 --大数据大厂之HBase深度探寻:大规模数据存储与查询的卓越方案

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

webpack原理简述

1.1 核心概念 JavaScript 的 模块打包工具 (module bundler)。通过分析模块之间的依赖,最终将所有模块打包成一份或者多份代码包 (bundler),供 HTML 直接引用。实质上,Webpack 仅仅提供了 打包功能 和一套 文件处理机制,然后通过生…