hal库实现串口通信——阻塞式 API

1STM32CobeMX设置

设置时钟源

rcc设置为外部时钟High Speed Clock (HSE)//设置为如图

再将其设置为72MHz

设置串口引脚为异步通信

设置波特率等

设置波特率范围提示点击波特率再点击图中的

我的设置

再打开中断

即可生成代码//省略项目设置

2代码设置

函数

HAL_UART_Transmit() - 发送数据到串口。
HAL_UART_Receive() - 从串口接收数据。

解释

HAL_UART_Transmit() - 发送数据到串口。

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  • huart: 指向 UART_HandleTypeDef 结构的指针,该结构包含了 UART 的配置信息。
  • pData: 指向要发送的数据缓冲区的指针。
  • Size: 要发送的数据的字节数。
  • Timeout: 发送操作的超时时间(以毫秒为单位)。如果设置为 HAL_MAX_DELAY,则表示无限期等待。
  • 返回值: 函数执行状态(HAL_OK 表示成功,HAL_ERROR 表示错误,HAL_BUSY 表示忙,HAL_TIMEOUT 表示超时)。

HAL_UART_Receive() - 从串口接收数据。

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  • huart: 指向 UART_HandleTypeDef 结构的指针,该结构包含了 UART 的配置信息。
  • pData: 指向用于接收数据的缓冲区的指针。
  • Size: 要接收的数据的字节数。
  • Timeout: 接收操作的超时时间(以毫秒为单位)。如果设置为 HAL_MAX_DELAY,则表示无限期等待。
  • 返回值: 函数执行状态(HAL_OK 表示成功,HAL_ERROR 表示错误,HAL_BUSY 表示忙,HAL_TIMEOUT 表示超时)。

这些函数在发送或接收数据时会阻塞,直到操作完成或发生超时。因此,在调用这些函数时,应该确保 UART 已经正确初始化,并且 pData 和 Size 参数指定了正确的数据缓冲区和大小。超时参数 Timeout 可以用来避免在通信问题导致数据无法发送或接收时无限期地等待。

当您使用 HAL_UART_Transmit() 和 HAL_UART_Receive() 函数时,您不需要手动检测是否有数据写入或读取,因为这些函数会自动处理数据的发送和接收。

实例解释

发送数据实例

#include "stm32f1xx_hal.h"

UART_HandleTypeDef huart; // 假设这是您的UART句柄

int main(void)
{
    HAL_Init(); // 初始化HAL库
    SystemClock_Config(); // 配置系统时钟
    MX_USART2_UART_Init(); // 初始化UART

    uint8_t txData[] = "Hello, World!"; // 要发送的数据
    uint16_t size = sizeof(txData) - 1; // 发送数据的大小(减1是为了排除字符串末尾的'\0')

    // 发送数据
    if (HAL_UART_Transmit(&huart, txData, size, HAL_MAX_DELAY) != HAL_OK)
    {
        // 发送失败的处理
        Error_Handler();
    }

    // ... 其他代码 ...

    while (1)
    {
        // 主循环
    }
}

接收数据实例

#include "stm32f1xx_hal.h"

UART_HandleTypeDef huart; // 假设这是您的UART句柄

int main(void)
{
    HAL_Init(); // 初始化HAL库
    SystemClock_Config(); // 配置系统时钟
    MX_USART2_UART_Init(); // 初始化UART

    uint8_t rxData[32]; // 接收数据的缓冲区
    uint16_t size = sizeof(rxData); // 接收缓冲区的大小

    // 接收数据
    if (HAL_UART_Receive(&huart, rxData, size, 5000) != HAL_OK)
    {
        // 接收失败的处理
        Error_Handler();
    }

    // 处理接收到的数据
    // ...

    while (1)
    {
        // 主循环
    }
}

用proteus8 实现串口

使用虚拟串口连接

stm32设置

里面的时钟值为stm32最终输出的值下图的值

串口图

串口设置

总结

HAL_UART_Transmit() - 发送数据到串口。
HAL_UART_Receive() - 从串口接收数据。

此函数会一直消耗系统内核资源,处于一直检测状态

使用sizeof();计算数组个数

调用的数组为指针类型//改变类型时记得转换

Proteus  8的stm32的时钟源为最终分频倍频之后的频率

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索数据中台的力量:企业数据资产管理的未来_光点科技

随着数字化时代的到来,"数据中台"这一概念逐渐为人所知,并迅速成为推动企业数据驱动转型的重要基石。数据中台不仅是集数据接入、管理、分析于一身的综合平台,更是企业实现数据资源集中管理、分析决策和业务创新的核心支撑。 一、数…

VRRP虚拟路由实验(华为)

思科设备参考:VRRP虚拟路由实验(思科) 一,技术简介 VRRP(Virtual Router Redundancy Protocol)是一种网络协议,用于实现路由器冗余,提高网络可靠性和容错能力。VRRP允许多台路由器…

如何提高旋转花键运行稳定性?

现代化精密仪器设备中,精密仪器的稳定工作性能对于生产效率和产品质量至关重要,运行效率和精度是常见问题。旋转花键作为机械传动系统中的重要组成部分,其稳定性也是直接影响到机械装配的质量和使用寿命,那么我们应该如何提升旋转…

uniapp开发小程序,通过缓存的方式,判断页面只弹出一次弹窗通知

一、需求 在使用uniapp开发小程序时,在【个人中心页面】-点击【我的推广】按钮进入详情页面时,要求出现【会员协议通知】的弹窗,并且有【确认和取消】两个按钮, 如果点了【取消】按钮,直接退出该页面,并且…

如何在极狐GitLab 使用Docker 仓库功能

本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在[极狐GitLab…

Github Benefits 学生认证/学生包 新版申请指南

本教程适用于2024年之后的Github学生认证申请,因为现在的认证流程改变了很多,所以重新进行了总结这方面的指南。 目录 验证教育邮箱修改个人资料制作认证文件图片转换Base64提交验证 验证教育邮箱 进入Email settings,找到Add email address…

官网下载IDE插件并导入IDE

官网下载IDEA插件并导入IDEA 1. 下载插件2. 导入插件 1. 下载插件 地址:https://plugins.jetbrains.com/plugin/21068-codearts-snap/versions 说明:本次演示以IDEA软件为例 操作: 等待下载完成 2. 导入插件 点击File->setting->Pl…

HTML和markdown

总体情况 <p>在html的用处 在vscode中使用markdown [Markdown] 使用vscode开始Markdown写作之旅 - 知乎

STL库 —— list 的编写

目录 一、成员变量 ​编辑 二、push_back 函数 三、迭代器 iterator 3.1 iterator 结构体 3.2 begin() 与 end() 函数 3.3 iterator 运算符重载 3.4 -> 的重载 3.5 const_iterator 四、测试代码 五、修饰符成员 5.1 insert 函数 5.2 erase 函数 5.3 push 函数…

【Ubuntu】update-alternatives 命令详解

1、查看所有候选项 ​​​​​​​sudo update-alternatives --list java 2、​​​​​​​更换候选项 sudo update-alternatives --config java 3、自动选择优先级最高的作为默认项 sudo update-alternatives --auto java 4、删除候选项 sudo update-alternatives --rem…

Netty 入门应用之Http服务WebSocket

Netty实现Http服务 主要的变化是在初始化器中引入了新的编解码器 一些创建的类作用和Netty HelloWorld的小demo一样我这里就不再次重复了 1、Http服务端代码 public class HttpServer {public static void main(String[] args) {// 创建Reactor// 用来管理channel 监听事件 …

FME学习之旅---day22

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 教程&#xff1a;栅格入门 FME 支持读取和写入 70 多种栅格格式。本教程将介绍几个基本示例&#xff0c;展示如何使用 FME 读取、转换和写入栅格数据。 FME 数据检查器不应用任何对比度增强。因…

实战项目——智慧社区(一)

1、项目介绍 系统功能 登录、修改密码、登出 &#xff08;1&#xff09;首页 &#xff08;1.1&#xff09;数据统计&#xff1a;小区人员统计对比图&#xff0c;占比图 &#xff08;2&#xff09;物业管理 &#xff08;2.1&#xff09;小区管理&#xff1a;小区数据的增删改…

centos 7.9 nginx本地化安装,把镜像改成阿里云

1.把centos7.9系统切换到阿里云的镜像源 1.1.先备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup1.2.下载新的CentOS-Base.repo配置文件 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo特别…

Redux和Redux Toolkit

Redux 概念&#xff1a;redux是react最常用的集中状态管理工具&#xff0c;类似于Vue中的Pinia(vuex)&#xff0c;可以独立于框架运行作用&#xff1a;通过集中管理的方式管理应用的状态 Redux快速体验 不和任何框架绑定&#xff0c;不使用任何构建工具&#xff0c;使用纯Re…

uniapp小程序编译报错

说明 微信小程序编译每次都出现[ project.config.json 文件内容错误] project.config.json: libVersion 字段需为 string, 解决 找到manifest.json文件 添加&#xff1a;"libVersion": "latest"&#xff0c;重新编译即可。

MySQL limit N offset M 速度慢?来实际体验下

直接开始 有一张表&#xff1a;trade_user&#xff0c;表结构如下&#xff1a; mysql> desc trade_user; ------------------------------------------------------------------ | Field | Type | Null | Key | Default | Extra | -------------…

记一次IP访问MySQL失败多次被自动锁定导致无法连接问题,解决方法只需一条SQL。

&#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;《Docker容器化部署系列》 《Java每日面筋》 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 前言 今天下午还在带着耳机摸鱼&#xff…

Linux CentOS 安装 MySQL 服务教程

Linux CentOS 安装 MySQL 服务教程 1. 查看系统和GNU C库(glibc)版本信息 1.1 查询机器 glibc 版本信息 glibc&#xff0c;全名GNU C Library&#xff0c;是大多数Linux发行版中使用的C库&#xff0c;为系统和应用程序提供核心的API接口。在Linux系统中&#xff0c;特别是在…

动态规划-入门理解

一、什么情况可以使用动态规划 动态规划 最优子结构 重叠子问题 转移方程 最优子结构&#xff1a;保证能从局部解推出全局解&#xff0c;也就是保证能够写出转移方程 重叠子问题&#xff1a;说明暴力解法太耗时&#xff0c;我们可以使用动态规划进行优化 转移方程&#xff…