HAL库学习梳理——UART

server/2024/9/23 0:01:52/

   笔者跟着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_Receiveif( 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.ppmy.cn/server/118343.html

相关文章

【JAVA开源】基于Vue和SpringBoot的在线视频教育平台

本文项目编号 T 027 ,文末自助获取源码 \color{red}{T027,文末自助获取源码} T027,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 新…

Ribbon简介

Ribbon是一个由Netflix开发的客户端负载均衡器,广泛用于微服务架构中,以提高系统的可用性和伸缩性。它通过在客户端应用程序中实现负载均衡逻辑,允许开发人员根据不同的需求选择或定制合适的负载均衡策略。 Ribbon的核心组件包括&#xff1a…

如何解决“json schema validation error ”错误? -- HarmonyOS自学6

一. 问题描述 DevEco Studio工程关闭后,再重新打开时,出现了如下错误提示: json schema validation error 原因: index.visual或其他visual文件中的left等字段的值为负数时,不能以”-0.x“开头,否则就会…

k8s环境下的相关操作

9.12 k8s calico的部署 # lsanaconda-ks.cfg k8s-ha-install kubeadm-config.yaml new.yaml token# 切换 git 分⽀[rootk8s-master ~]# cd k8s-ha-install/[rootk8s-master k8s-ha-install]# git checkout manual-installation-v1.28.x && cd calico/分支 manual…

工地高空安全防护装备检测系统源码分享

工地高空安全防护装备检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of …

如何使用 Vue 3 的 Composition API

Vue 3 引入了 Composition API,它提供了一种更灵活的方式来组织和重用逻辑。与 Vue 2 的 Options API 相比,Composition API 允许你将组件的逻辑按功能组织到函数中,而不是将它们分散到组件选项对象中。以下是如何在 Vue 3 中使用 Compositio…

代码随想录打卡Day32

今天有点事,先做一题,剩下的明天补。 509. 斐波那契数 这道题目太简单了,递归几行代码就结束了,用动态规划做也可以,主要是学习一下动态规划五部曲。 这是递归的代码 class Solution { public:int fib(int n) {//确…

MyBatis之手动映射

在一些简单的场景下,MyBatis 能够自动完成对象和数据库字段之间的映射,这时就不需要手动映射。 手动映射通常在以下情况下需要使用: 复杂查询或结果:当查询返回的结果结构与实体类不完全匹配,或者返回的结果需要进行…