蓝桥杯-STM32G431RBT6(串口)

news/2024/12/22 11:02:56/

前言

一、配置

二、使用步骤

1.串口发送

代码逻辑

效果展示

2.串口接收单个字符

代码逻辑

中断回调函数

3.串口接受字符串

代码逻辑

字符串函数

中断回调函数

声明

代码开源


前言

一、配置

二、使用步骤

1.串口发送

代码逻辑
  1. sprintf(tx_buf,"jin ke\r\n"):这行代码使用 sprintf 函数将字符串 "jin ke\r\n" 写入到 tx_buf 缓冲区中。
  2. HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50):这行代码使用 HAL_UART_Transmit 函数通过 huart1 串口发送 tx_buf 缓冲区中的数据。发送的数据长度是通过 strlen(tx_buf) 计算得到的,并且设置了一个超时时间为 50 毫秒。
  3. &huart1 是指向 huart1 这个结构体的指针。huart1 通常是一个串口通信相关的结构体,通过这个指针可以访问和操作与该串口相关的配置和功能

  4. 将 tx_buf 强制转换为 (uint8_t*) 是为了确保将缓冲区中的数据以字节数组的形式传递给 HAL_UART_Transmit 函数。在 C 语言中,很多函数需要以特定的数据类型来接收参数,通过这种强制转换可以满足函数的要求,以便正确地进行数据传输操作。

char tx_buf[20];

 LCD_Init();LCD_Clear(White);LCD_SetBackColor(White);LCD_SetTextColor(Black);sprintf(tx_buf,"jin ke\r\n");HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);

将字符串写入缓冲区主要有以下几个原因:

  1. 提高效率:一次性将数据准备好放入缓冲区,然后统一进行发送,可以减少频繁的操作和中断,提高数据传输的效率。
  2. 便于管理:将数据集中在缓冲区中,方便对数据进行进一步的处理或操作,比如在发送之前可以根据需要对缓冲区中的数据进行修改。
  3. 连贯性:确保数据的连贯性和完整性,避免在逐字节发送过程中出现数据丢失或不完整的情况。
效果展示

2.串口接收单个字符

案例:接受到O时,点亮LED1并发送LED1OPEN!,接受到C时,熄灭LED1并发LED1CLOSE!

代码逻辑

HAL_UART_RxCpltCallback 是一个串口接收完成的回调函数。当串口接收到数据完成时,会调用这个函数来处理接收到的数据。在这个函数中,可以根据接收到的数据进行各种相应的操作,如控制其他设备、更新状态等。

  uint8_t rx_data;
中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(rx_data=='O'){led_show(2,1);sprintf(tx_buf,"led1OPEN!");HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);}if(rx_data=='C'){led_show(2,0);sprintf(tx_buf,"led1CLOSE!");HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);	}HAL_UART_Receive_IT(&huart1,&rx_data,1);
}

3.串口接受字符串

代码逻辑
  •  uart_proc 函数用于处理串口数据。
    • 当 rx_count 等于 4 时,进行数据的比较和相应操作。
    • 通过 strcmp 函数比较接收到的 rx_buf 与特定字符串(如 "LEDO" 和 "LEDC")是否相等。
    • 根据比较结果控制 led 的显示状态,并发送相应的消息。
    • 最后将 rx_count 清零,清空 rx_buf 并重置其内容。
    • memset 是一个 C 语言标准库函数,用于将一段内存区域设置为指定的值。
    • 它的函数原型一般为 void *memset(void *str, int c, size_t n),其中:

    • str:指向要填充的内存块。
    • c:要设置的值(通常是一个字符)。
    • n:要设置的字节数。在上述代码中,memset(rx_buf, 0, 20) 是将 rx_buf 这个内存区域的前 20 个字节全部设置为 0,起到清空的作用。
    • strcmp 函数用于比较两个字符串。

    • 它的工作原理是逐个字符地比较两个字符串,直到遇到不同的字符或到达字符串的末尾。

    • 如果两个字符串完全相同,则返回 0;如果第一个字符串小于第二个字符串,则返回一个负数;如果第一个字符串大于第二个字符串,则返回一个正数。

    • 在代码中,通过 strcmp 函数来比较接收到的 rx_buf 和特定的字符串,以确定执行相应的操作

字符串函数
void uart_proc(void)
{
if(rx_count==4)
{if(strcmp(rx_buf,"LEDO")==0){led_show(1,1);sprintf(tx_buf,"led1OPEN!\r\n");HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);}	if(strcmp(rx_buf,"LEDC")==0){led_show(1,0);sprintf(tx_buf,"led1CLOSE!\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);
}
声明
/* USER CODE BEGIN PV */uint8_t key_rval;char tx_buf[20];uint8_t rx_data;char rx_buf[20];uint8_t rx_count;
/* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
void uart_proc(void);
/* USER CODE END PFP */

代码开源

通过网盘分享的文件:12-TEST6-串口通信(接收和发送多个字符).zip
链接: https://pan.baidu.com/s/1IoKdqO9sgooXArpK1wgjyg?pwd=0820 提取码: 0820


http://www.ppmy.cn/news/1527280.html

相关文章

十大排序之:冒泡排序

目录 一、简介 实现过程 时间复杂度 二、代码实现 函数声明 Swap函数 单趟 多趟 测试 优化 一、简介 冒泡排序是一种简单的排序算法,它重复地比较相邻的两个元素,如果顺序错误就交换它们,直到没有元素需要交换为止。这个过程类…

通信工程学习:什么是HSS归属用户服务器

HSS:归属用户服务器 HSS(归属用户服务器,Home Subscriber Server)是IP多媒体子系统(IMS)中控制层的一个重要组成部分,它扮演着存储和管理用户相关信息的核心角色。以下是关于HSS归属用户服务器的…

反激电路中TL431光耦反馈参数的计算,环路设计思路

反馈的过程 当副边的输出电压升高时,TL431参考端电压(R端)电压也会升高,使得TL431的导通量增加,同时光耦内部的发光二极管流过的电流也会增大,进而使得光耦三极管导通量增加,相连的电源IC电压反…

【springboot】简易模块化开发项目整合MyBatis-plus

接父子工程项目搭建,继续扩展项目 重新调整模块结构 1.删除子模块fast-demo-web中所有无用内容 2.右键fast-demo-web名称->新建(news)->模块(Module),创建新的子模块 3.选择新建Maven工程 4.新建模…

【STL】 set 与 multiset:基础、操作与应用

在 C 标准库中&#xff0c;set 和 multiset 是两个非常常见的关联容器&#xff0c;主要用于存储和管理具有一定规则的数据集合。本文将详细讲解如何使用这两个容器&#xff0c;并结合实例代码&#xff0c;分析其操作和特性。 0.基础操作概览 0.1.构造&#xff1a; set<T&…

浅谈WebService

一、基本介绍 WebService是一个术语&#xff0c;通常用来描述一种软件系统&#xff0c;它通过网络提供服务。这些服务可以是任何形式的&#xff0c;比如执行计算、处理数据、提供信息等。WebServices使得不同的应用程序能够通过标准化的协议&#xff08;如HTTP&#xff09;进行…

【Linux】多路转接epoll

一、I/O多路转接 poll 1.1 poll函数接口 函数原型 函数参数 fds&#xff1a;是一个poll函数监听的结构列表&#xff0c;每一个元素中包含了三部分内容&#xff1a;文件描述符&#xff0c;监听的事件集合&#xff0c;返回的事件集合。nfds&#xff1a;表示的是fds数组的长度tim…

7 种有助于压缩图像的最佳图像压缩工具

您的网站是否由于图像文件过大而表现不佳&#xff1f;现在是时候探索最适合您网站的图像压缩工具了。 影响页面加载速度的因素之一是需要更多资源来加载的庞大视觉对象&#xff0c;例如叠加图像。在这种情况下&#xff0c;您应该先压缩视觉对象&#xff0c;然后再将其上传到您…