八、HAL_UART(串口)的接收和发送

news2024/12/23 8:09:13

1、开发环境

(1)Keil MDK: V5.38.0.0

(2)STM32CubeMX: V6.8.1

(3)MCU: STM32F407ZGT6

2、UART和USART的区别

2.1、UART

(1)通用异步收发收发器:Universal Asynchronous Receiver/Transmitter)。

2.2、USART

(1)通用同步异步收发器:Universal Synchronous/Asynchronous Receiver/Transmitter

(2)同步:Synchronous。

(3)目前只用到异步收发的场景,同步收发场景没有用过。同步应该类似IIC总线,需要一个时钟。

3、中文芯片参考手册去哪找的。

(1)进入STMCU中文官网:STMCU中文官网

(2)点击设计资源→芯片文档。找到相应芯片的英文参考手册,点击蓝色字体就能直接下载英文的参口手册了。

(3)网页搜索框搜索RM0090。

(4)搜索后便有可能找到中文参考手册。

(5)也可直接搜索该芯片,筛选选择中文译文。

4、示例程序的目的

(1)通过串口实现阻塞发送和中断接收;将中断接收到的内容通过阻塞形式发送出去。。

(2)阻塞模式串口发送。MCU的CPU一个字节一个字节的将要发送的内容丢给串口模块,然后看着串口模块将这个字节发送出去,然后CPU再去拿下一个字节来丢给串口模块。直到本次要发送的所有字节全部发完,CPU才会去做其他事。

(3)中断模式串口发送。MCU的CPU向串口模块丢一个字节,然后串口模块慢慢发,CPU丢完这个字节后会跳出去做其他事情,等串口模块发完这个字节后会生成一个中断,中断会通知CPU过来继续丢下一个字节。这主要是因为CPU主频远远大于串口的发送速度,CPU一直在这看着挺浪费的。这种方式更加充分利用了CPU。

(4)在程序开发过程中,会通过串口打印很多调试信息。可以通过宏定义的方式,在调试时允许打印,在正式版中屏蔽打印。

5、原理图

(1)CH340芯片部分。

(2)使用的串口是USART1。STM32大多数串口1都是接PA9、PA10引脚。

6、STM32CubeMX创建工程及时钟配置

6.1、创建工程

(1)打开STM32CubeMX软件。

(2)点击File→NewProject。

(3) Commercial Part Number(商用部件号)处输入MCU型号,然后选择正确的单片机型号,点击Start Project(开始项目)。

(4)配置工程名、工程存放文件等。

点击Project Manager(项目经理)进行如下配置。

点击Code Generator(代码生成器)进行如下配置。

(5)点击GENERATE CODE生成KeilMDK工程。

6.2、配置时钟

(1)HSE、LSE时钟源选择

  • HSE:高速外部时钟源
  • LSE:低速外部时钟源
  • Disable:禁用
  • BYPASS Clock Source:旁路时钟源
  • Crystal/Ceramic Resonator :水晶/陶瓷共振器
  • 一般选择水晶陶瓷共振器
  • 旁路时钟源就是由外部给定一个时钟信号,一般用于作为同步时钟。
  • 水晶/陶瓷共振器:指外接晶振,经过内部振荡电路产生时钟。

(2)时钟树配置

(3)点击GENERATE CODE更新KeilMDK工程。 

7、STM32CubeMX配置串口

(1)USART1模式配置,选择异步

  • Asynchronous: 异步
  • Synchronous: 同步
  • Single Wire(Half-Duplex): 单线(半双工)
  • Multiprocessor Communication: 多处理器通信

(2)串口1参数设置

  • Parameter Settings: 参数设置
  • Basic Parameters: 基本参数
  • Baud Rate: 波特率
  • Word Length: 字长
  • including Parity:包括奇偶校验
  • Parity: 奇偶校验
  • Stop Bits: 停止位

(3)使能串口中断

8、Keil MDK软件编写

8.1、串口中断接收

/*
 *功能:接收完成回调函数
 *参数:串口x
 *返回值:无
 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART1)
    {
      HAL_UART_Transmit(&huart1, &UART_Data.DebugRxBuf[0], 1,0xFF);  /*将接收到的内容发送出去*/
      HAL_UART_Receive_IT(&huart1, UART_Data.DebugRxBuf,1);
    }
}

8.2、printf的重定向

(1)需要勾选Keil微库。

/*
 *功能:将C库printf函数重定向到USART1
 *参数:无
 *返回值:无
 */
int fputc(int ch, FILE *f)
{
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
  return ch;
}

8.3、完整工程下载地址。

(1)完整工程存储在码云。

(2)STM32_CSDN: CSDN中STM32专栏的所有示例代码

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

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

相关文章

【《R4编程入门与数据科学实战》——一本“能在日常生活中使用统计学”的书】

《R 4编程入门与数据科学实战》的两名作者均为从事编程以及教育方面的专家,他们用详尽的语言,以初学者的角度进行知识点的讲解,每个细节都手把手教学,以让读者悉数掌握所有知识点,在每章的结尾都安排理论与实操相结合的习题。与同…

banner轮播图实现、激活状态显示和分类列表渲染、解决路由缓存问题、使用逻辑函数拆分业务(一级分类)【Vue3】

一级分类 - banner轮播图实现 分类轮播图实现 分类轮播图和首页轮播图的区别只有一个,接口参数不同,其余逻辑完成一致 适配接口 export function getBannerAPI (params {}) {// 默认为1 商品为2const { distributionSite 1 } paramsreturn httpIn…

VTK是如何显示一个三维立体图像的

VTK是如何显示一个三维立体图像的 1、文字描述2、图像演示 1、文字描述 2、图像演示

MySQL-事务-介绍与操作

思考 假设在一个场景中,学工部解散了,需要删除该部门及该部门下的员工对应的SQL语句涉及的数据表信息如下 员工表 部门表 实现的SQL语句 -- todo 事务 -- 删除学工部 -- 删除1号部门 delete from tb_dept where id 1; -- 删除学工部下的员工 delete …

SPEC CPU 2006 docker gcc:4 静态编译版本 Ubuntu 22.04 LTS 测试报错Invalid Run

runspec.sh #!/bin/bash source shrc ulimit -s unlimited runspec -c gcc41.cfg -T all -n 1 int fp > runspec.log 2>&1 & tail -f runspec.log runspec.log 由于指定了-T all,导致-n 1 失效,用例运行了三次(后续验证&…

【LeetCode 75】 第十题(283)移动零

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 给一个数组,要求将数组中的零都移动到数组的末尾. 首先我们可以遍历一边数组,遇到0的时候就在数组中把0删除,并且统计0的数量. 遍历完成以后数组中就没有0了,这时我们再在数组的后面添上之前统计的0的数量个0. …

IntelliJ IDEA Copyright添加

IDEA代码文件的版权(copyright)信息配置 1. 快速创建Copyright 版权配置文件 1.1 创建copyright文件 依次点击 File > Settings… > Editor > Copyright > 点击 “” 号或 “Add profile”***,弹出创建 Copyright Profile 操作窗口,在***文…

【iOS】App仿写--网易云音乐

文章目录 前言一、首页界面二、我的界面三、账号界面总结 前言 在暑假之前仿写了网易云app,一直没总结。 网易云app主要让我熟悉了视图之间的相互嵌套的用法与关系以及自定义cell的用法,特此撰写以下博客进行总结。 一、首页界面 首先来看一下完成的效…

深度挖掘《TCP与UDP》

文章目录 UDPTCPTCP特性TCP是如何实现的可靠传输?序号和确认序号为啥网络上会后发先至 什么是丢包,如何解决丢包?TCP建立连接:三次握手四次交互,为什叫三次握手?三次握手起到什么效果?达到什么目…

YZ06:加载项是否加载的判断

【分享成果,随喜正能量】人生,因有缘而聚,因情而暖;人生,因不珍惜而散,因恨而亡;活着就要善待自己,不属于自己的不强求,不是真心的不必喜欢,时间在变&#xf…

Spring初识(三)

文章目录 前言一.存储 Bean 对象1.1 类注解的用法1.2 为什么要使用这么多类注解1.2.1 为什么需要五大类注解 1.3 各个类注解的关系1.4 Bean的命名规则1.5 方法注解的使用 二.取出 Bean 对象2.1 属性注入2.2 Setter注入2.3 构造方法注入 三.总结 前言 经过前面的学习,我们已经学…

【C++】STL使用仿函数控制优先级队列priority_queue

文章目录 前言一、priority_queue的底层实现二、使用仿函数控制priority_queue的底层总结 前言 本文章讲解CSTL的容器适配器:priority_queue的实现,并实现仿函数控制priority_queue底层。 一、priority_queue的底层实现 priority_queue叫做优先级队列&…

uview2.0使用u-calendar 的formatter属性,在formatter方法里无法访问this的bug,解决办法!!!!

uview 版本2.0.36 文档 使用该文档的案例,在 formatter打印this也会是undefined。 自己写了个demo 父给子传值v-bind传一个函数,然后在这个函数里面打印this,this是子组件的实例,但是不知道为什么formatter里会打印undefined。希…

pytorch工具——使用pytorch构建一个神经网络

目录 构建模型模型中的可训练参数假设输入尺寸为32*32损失函数反向传播更新网络参数 构建模型 import torch import torch.nn as nn import torch.nn.functional as Fclass Net(nn.Module):def __init__(self):super(Net,self).__init__()#定义第一层卷积层,输入维…

配置NFS服务

环境 环境 ubuntu 10.4 vm 7.1 终端 ifconfig 得到 ubuntu资料 INET ADDR 192.168.0.4 BCAST 192.168.0.255 MASK 255.255.255.0 操作前先关闭防火墙 关闭防火墙: 命令:sudo ufw disable 打开防火墙 命令:sudo ufw enable 配置过程 一 安…

G--爬山---2023河南萌新联赛第(二)场:河南工业大学

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 示例1 输入 3 230 100 200 300 输出 192 示例2 输入 3 900 150 150 125 输出 -1 解析&#xff1a; 二分。 #include<bits/stdc.h> using namespace std; typedef long long ll…

单独在文件中打开allure生成的index.html报告时却显示为loading

【问题描述】&#xff1a;单独在文件中打开allure生成的index.html报告时显示为loading&#xff0c;如下图&#xff1a; 【问题定位】&#xff1a;其实在allure-report下index.html文件是不能直接打开的&#xff0c;出现页面都是loading的情况&#xff0c;这是因为直接allure报…

回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 ![6 基本介绍 1.MATLAB实现TCN-BiGRU时间卷积双向门控循…

RT-Thread qemu mps2-an385 bsp 移植制作 :系统启动篇

前言 前面准备了 RT-Thread qemu mps2-an385 bsp 制作相关的环境与相关文件&#xff0c;本篇开始讲解 bsp 如何适配到 RT-Thread CPU 部分已经适配好了&#xff0c;也就是通过 使能 ARCH_ARM_CORTEX_M3 &#xff0c;来使能 rt-thread/libcpu/arm/cortex-m3&#xff0c;这部分不…

使用docker进行MYSQL主从复制(一主两从)

目录 概述主从介绍 主从作用 主从作用有&#xff1a; 主从形式有&#xff1a; 配置步骤 主要配置 1>创建三个进程 2>修改配置文件 3>主机配置 4>从机配置 5>将文件修改后&#xff0c;复制到容器里面 6>进入主机进行配置 6.1>创建用户 6.2>…