STM32F051——USART

news2024/11/26 0:43:16

        我在大二学32的时候曾经写过一篇博客,现在看了一个韩老师的专题课后再来完善一下32串口方面的知识。所有的知识都可在官方手册中找到,目前我认为学习一个新的芯片,最全最细的就是官方手册了,英文看不懂可以看中文的,不过最好是英文的,翻译有的地方有偏差。

---------------------------------------------------------------------------------------------------------------------------------

目录

1 协议基础知识介绍

1.1 同步通信和异步通信

同步通信:

异步通信:

1.2 串行通信和并行通信的区别

串行通信:

并行通信:

串行传输:

并行传输:

1.3 单工、半双工、全双工

1.4 常见通信总结

1.5 USART基本概念

1.6 串口电路连接

1.7 STM32f051串口 

1.8 串口通信协议介绍

1.9 波特率

2. USART寄存器介绍

2.1 控制寄存器 USART_CR

USART_CR1

USART_CR2

2.2 波特率寄存器 USART_BRR

2.3 中断和状态寄存器 USART_ISR

2.4 数据发送寄存器 USART_TDR

2.5 数据接收寄存器 USART_RDR 

3 USART开发传输控制流程

3.1 USART硬件原理图分析

4 实践:USART控制——字符传输读 写

4.1 CubeMX中配置管脚 

 4.2 串口数据的发送和接收

4.3 串口传输函数——读取寄存器方式

 4.4 实践:USART控制——字符传输利用库

(1) 串口的发送函数

(2) 串口的接收函数

4.5 实践6:USART控制——实现printf()串 口重定向输出


1 协议基础知识介绍

1.1 同步通信和异步通信

通信,最少要有两个对象,一个收,一个发

同步通信:

        一般情况下同步通信指的是通信双方根据同 步信号进行通信的方式。比如通信双方有一个共同的时 钟信号,大家根据时钟信号的变化进行通信。

 

异步通信:

        是指数据传输速度匹配依赖于通信双方有自 己独立的系统时钟,大家约定好通信的速度。异步通信 不需要同步信号,但是并不是说通信的过程不同步。数 据量大会有误差。(两边都有自己独立的时钟信号)

注意:同步通信有时钟线,异步通信没有时钟线。

1.2 串行通信和并行通信的区别

串行通信:

指的是同一时刻只能收或发一个bit位信息。 因此只用1根信号线即可。

并行通信:

指的是同一时刻可以收或发多个bit位的信 息,因此需要多根信号线才行。

串行传输:

数据按位顺序传输。

-优点:占用引脚资源少

-缺点:速度相对较慢

例如:UART 串口

 

并行传输:

数据各个位同时传输。

-优点:速度快

-缺点:占用引脚资源多 IO口资源有限和使用紧张;

1.3 单工、半双工、全双工

单工:要么收,要么发,只能做接收设备或者发送设 备。比如收音机

半双工:可以收,可以发,但是不能同时收发, 比如对 讲机

全双工:可以在同一时刻既接收,又发送。 比如手机

 

1.4 常见通信总结

1.5 USART基本概念

        通用同步异步收发器(USART)灵活地与外部设备进行 全双工数据通信,满足外部设备对工业标准NRZ异步串 行数据格式的要求。USART通过小数波特率发生器提供 了多种波特率。它支持同步单向通信和半双工单线通 信;还支持LIN(局域互联网络),智能卡协议与IrDA (红外数据协会)SIR ENDEC规范,以及调制解调操作 (CTS/RTS)。而且,它还支持多处理器通信。

         USART**支持同步模式因此USART 需要同步始终信 号USART_CK(如STM32 单片机),通常情况同步信号 很少使用,因此USART和一般单片机UART使用方式是 一样的,都使用异步模式。**

1.6 串口电路连接

接口与外部设备通过三个引脚相连, RX,TX,GND

任何 USART 双向通讯要求最少有两个引脚: 接收数据 输入(RX)和发送数据输出(TX)

RX: 接收数据输入是串行数据的输入口。 使用过采样技 术来完成数据恢复,以区别输入数据和噪声。

TX: 数据发送输出。 当发送器被禁止,输出脚回到其 I/O 口配置状态。 当发送器被使能,但不发送数据时,TX 脚 为高电平输出。 在单线和智能卡模式中,这个口线既用 于发送数据也 用于接收数据。

注意:

(1)电脑用的TTL电平和EIA电平不能直接连;

(2)TTL电平, 0V表示0 ,大于3.3或者5伏就表示为1了;

        DB9插槽已经很少了,或者迷你USB口插槽,因此有的 是USB线,这时需要当做串口用的话需要用驱动转换, CH340。

1.7 STM32f051串口 

 

STM32F051内置多达两个通用同步 / 异步收发器( USART1 和 USART2 ),通信速度可达 6 Mbit / s

如果使用 USART1进行串口传输通讯。 查找原理图和手册,对应寄存器是PA9,PA10。

1.8 串口通信协议介绍

协议很重要!!! 

 从左到右,看图上发生的事件,实际发送从起始位开 始,停止位结束。

1. 约定数据什么时候发送,不传输数据的时候默认都是高 电平;

2. 起始位:开始发送的时候,发送一个低电平,作为起始 位;

3. 数据位:约定数据位8~9位(正常的通讯协议是5~8位, 但是STM32F0要求是8~9);数据的低位先发送;

4. 校验位:数据发送完成,发送一个可选的校验位,检验 数据的正确性; (奇校验,奇校验位设置1bit值为1,发送的数据里为1的 bit位的个数加上奇校验位的发送的奇校验标志1,一共是奇 数个1,就是正确发送。偶校验同理),一般传输量不大, 不会产生误差,所以一般不校验;

5. 停止位:1到2个bit数据,一般是设置为0;

6. 约定数据传输的速率,一般是用到是9600,115200(不 是纯数据位,包含了起始位等);

例如: 0 1 0 1 0 0 0 0 0 0 **TXD 串口输出0x05波形图、 注意是低位先发送**

1.9 波特率

        在串行通信中,用“波特率”来描述数据的传输速率。所谓 波特率,既每秒传送的二进制位数,其单位为bps(bits per second)。它是衡量串行数据速度快慢的重要指 标。

        国际上规定一个标准的波特率系列: 110、300、600、 1200、1800、2400、4800、9600、115200、 14.4Kbps、19.2Kbps、……

例如:115200bps、指每秒传送115200位。通信双方必 须设置同样的同学速率才能正常通信

注意:实际的数据没这么多,还包括起始位,结束位, 校验位

2. USART寄存器介绍

2.1 控制寄存器 USART_CR

USART_CR1

 32位,其中[31:26]无效,

        以上描述,表明控制寄存器可以配置中断使能、通讯协 议控制位,我们的开发只需要其中的一部分,也够用 了,其他具体的配置需求可以参看手册的24章。

注意:串口通讯协议的 配置,通常是8N1 配置:

8个通讯数据位, N没有奇偶校验,1个停止位;

USART_CR2配置停止位。

USART_CR2

 

 串口通讯协议的 8N1 配置 8个通讯数据位, N没有奇偶校验,1个停止位;

2.2 波特率寄存器 USART_BRR

        记录了 USART 的波特率。手动配置需要有公式去赋值, STM32CubeMX生成的工程会自动帮助配置,具体实现 代码可以用来了解。 

2.3 中断和状态寄存器 USART_ISR

         用于判断输入、释放数据的状态: 控制寄存器中数据发送位(TXE)为1,表示TDR已经有数 据放到移位寄存器TX Shift Reg,等待移位寄存器输出 (写外设)完毕;(发送寄存器(TXE)为空时,注意 USART_TDR 寄存器此时是空的,即可以往 USART_TDR 写入数据。此时写入 USART_TDR 寄存器不会覆盖先前 在 USART_TDR 中的数据,已经到移位寄存器啦。) 控制寄存器中数据接收位(RXNE)为1,表示RDR已经有 数据从移位寄存器RX Shift Reg中一位一位移动过来, 等待被输入(芯片读)完毕;所以置位ISR的数据接收位 (RXNE),就会设置将 RX Shift Reg 接收的数据移动到 USART_RDR 寄存器里,传输出错,ORE被设置,具体 可以参考手册了解。

2.4 数据发送寄存器 USART_TDR

 

2.5 数据接收寄存器 USART_RDR 

只读,不可写,保证读到的是接收到的。

串口的发送和接收过程举例:

上、中、下三部分:下是接收数据过程、中串口速度控 制(波特率)、上发送数据过程 

 

peripheral BUS:外设总线

Transmitter: 发送器

Receiver:  接收器

Buffer:缓冲

Register:寄存器

FIFO:先入先出  一段空间大小的字符串传输,不是一个字节;

什么是FIFO?_大fu啊的博客-CSDN博客_fifo

Clock Source:时钟源

shifter:位移寄存器

Holding Register:存储寄存器

Control Unit:控制器

Non-FIFO 一个字节一个字节传输模式

Control unit 控制单元(检查是否有数据、控制移位寄 存器)

TDR 发送数据寄存器:存储数据,控制单元检测有数据 要传输,放到传输控制寄存器,发送移位会一位一位的 发送出去。

RDR 接收数据寄存器:接收数据,控制单元检测有数据 要读取,接收位移会一位一位的读取,放到接收控制寄 存器。

Buad-rate generator 波特率产生器(控制接收和发送 的速度)

ISR 状态寄存器(发送数据状态TEX,第7位;接收数据状 态RXNE,第5位)

TDR 数据发送寄存器(发送的数据)

RDR 数据接收寄存器(读到的数据)

3 USART开发传输控制流程

3.1 USART硬件原理图分析

注意:如果无法识别串口,安装好ch340串口驱动。我分享了一个链接

链接:https://pan.baidu.com/s/1os__C48tMrrgEjYI-e7fUw?pwd=82gt 
提取码:82gt 

4 实践:USART控制——字符传输读 写

4.1 CubeMX中配置管脚 

设置PA10和PA9分别收发管脚使用** ,且需要注意咱们 是用USART(同步异步串行接口)的异步功能,那么这里 要明确去设置为异步通讯!*

之后要注意配置通讯协议,默认是115200,8N1。

 

 4.2 串口数据的发送和接收

4.3 串口传输函数——读取寄存器方式

在usart.c中编写一下代码 

(1) **串口发送一个字符:**
void Uart_Putchar(uint8_t ch)
{ //等待TDR为空,表示可写,ISR这时TXE是1
while(!(USART1->ISR &(1<<7)));
USART1->TDR = ch;//发送字符
}
(2) **串口接收一个字符:**
uint8_t Uart_Getchar(void)
{ //等待RDR不为空,表示收到数据,ISR这时RXNE是1
while(!(USART1->ISR & (1<<5)));
return USART1->RDR;//返回收到的字符
}

在usart.h中声明函数 

/* USER CODE BEGIN Includes */
void Uart_Putchar(uint8_t ch);
uint8_t Uart_Getchar(void);
/* USER CODE END Includes */

 

Main.c中编写测试代码
char ch = 0;
while (1)
{
ch = Uart_Getchar();
Uart_Putchar(ch);
}

 

编译后再下载到板子上。 板子接上串口线,和电脑连接,设备识别为如下端口:

 

如果你的串口线接线到电脑正确,但是没有识别到端 口,可以尝试安装CH340驱动。 

识别成功后,打开串口助手,配置如下:

配置好后,点击“打开”,在输入框里输入要发送的字符 串,点击“发送”,可以看到接收框内收到对应得字符串。

 

拓展:实现字符串输出函数
void Uart_Putstring(uint8_t *str)
{
    while(*str != '\0')
    {
        Uart_Putchar(*str);
        str++;
    }
}

 4.4 实践:USART控制——字符传输利用库

函数 HAL库中串口的收发函数 在工程stm32f0xx_hal_uart.c文件中,定义了串口传输 库函数。

(1) 串口的发送函数

HAL_UART_Transmit(UART_HandleTypeDef *huart,

uint8_t *pData, uint16_t Size, uint32_t Timeout);

 

(2) 串口的接收函数

HAL_UART_Receive(UART_HandleTypeDef *huart,

uint8_t *pData, uint16_t Size, uint32_t Timeout);

打印一行测试:

 

4.5 实践6:USART控制——实现printf()串 口重定向输出

        printf函数的使用一般是在有屏幕的界面上实现代码的输 出调试功能,而我们的开发环境中一般是没有屏幕的, 此时我们可以将输出转移到其他设备上。在串口开发 中,就经常利用此调试方法。需要注意的是printf函数的 传输调用的是c库中的fputc函数。因此我们如果重新写 了fputc函数,就可以改变printf函数的功能,可以向串 口打印输出。 

int fputc(int ch,FILE *f)
{
    while((USART1->ISR&(1<<7)) == 0);
    USART1->TDR=(uint8_t)ch;
    return ch;
}

这里我之前专门写过一篇介绍输入输出重定向的博文:

STM32——我对输入输出重定向的理解_宇努力学习的博客-CSDN博客_清除txe

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

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

相关文章

Nessus破解教程

Nessus 最新版破解教程0x01 Nessus 简介0x02 Nessus 下载0x03 Nessus 安装0x04 更新漏洞库0x05 Nessus 破解0x06 Nessus 使用0x07 注意事项参考文章0x01 Nessus 简介 Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用 Nessus 作为扫描该机…

跟着 gma 学 Python:矢量面文件的空间绘图

得益于 gdal 的强大功能&#xff0c;gma 继承了其对各类栅格/矢量&#xff08;目前支持超过80种矢量文件格式&#xff09;文件的读取支持&#xff0c;并在其基础上进行简化、优化等改造&#xff0c;以便其符合 gma 的整体建库逻辑。   本文基于 gma 定义的矢量读取逻辑和方式…

26 CPP运算符重载

#include <iostream>using namespace std;//非成员函数重载 - class Person { public:Person() {m_score 0;m_name.clear();}void show() {cout << m_name << " " << m_score << endl;}int m_score;string m_name; };//全局重载号 vo…

毕业设计 - 基于SSH码头船只出行及配套货柜码放 管理系统【源码 + 论文】

文章目录前言一、项目设计1. 模块设计2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 java web设计项目: 基于SSH码头船只出行及配套货柜码放 管理系统 一、项目设计 1. 模块设计 对于码头日常管理来说&#xff0c;主要是码头船只的管理&#xff0c;码头信息的…

【leetcode.15】三树枝和

题目描述如上 要点分析&#xff1a; 遍历出所有的情况不难&#xff0c;难的是如果和处理重复的结果 纯暴力&#xff0b;检索的话复杂度为n3&#xff0c;最后面的三个测试点会超时 所以这里使用双指针法进行处理&#xff0c;复杂度会变为n2 算法分析&#xff1a; 为了避免…

Java+SSM家庭理财管理系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用技术&#xff1a;SSM框架MySQL数据库Tomcat服务器&#xff0c;项目含有源码、文档、配套开发软件、软件安装教程、项目发布教程等 项目功能介绍&#xff1a; 用户分为系统管理员和普通用户两个角色&#xff0c;普通用户可自行注册登录&#xff0c;系统…

【图像处理】Hough变换人眼虹膜定位【含Matlab源码 387期】

⛄一、数字图像处理简介 图像处理基础教程链接 1 【基础教程】基于matlab图像处理&#xff08;表示方法数据结构基本格式类型转换读取点运算代数运算&#xff09;【含Matlab源码 834期】 2 【基础教程】基于matlab图像处理&#xff08;读写显示运算转换变换增强滤波分析统计&a…

计算机毕设Python+Vue学生宿舍管理系统 (程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【遥感科学】第二章 电磁辐射和地物光谱特性

第二章 电磁辐射与地物光谱特征 一、电磁波谱与电磁辐射 1.1 磁波谱 我们说波谱波谱&#xff0c;那么什么是波&#xff0c;什么是谱呢&#xff1f;注意看&#xff0c;这个男人叫小帅 振动的传播称为波&#xff0c;那电磁波又是啥&#xff1f;啥叫电磁振动&#xff1f; 当电…

docker常用命令记录

1.docker加载镜像 sudo docker load --input rknn-toolkit-1.7.3-docker.tar.gz 2.查看镜像 sudo docker images 3.进入docker容器 sudo docker run -t -i --privileged rknn-toolkit:1.7.3 /bin/bash 4.退出容器 eixt 5.查看所有容器 sudo docker ps -a 6.开启容…

截止12.19--之前的再说,就先说一下今天的事

12/19 错怪colab 软链接实现永久 试一下我在ssh传上文件以后&#xff0c;1080卡还能不能看见了&#xff1a;能&#xff0c;得传到data里。可以在ssh上加上 ln -s 找不到GPU是镜像问题 出现找不到显卡的问题 需要换个镜像 所以速速自学docker吧&#xff0c;太被动了 加号做连…

基于AD Event日志识别黄金票据攻击

01、简介黄金票据(Golden Ticket)是基于Kerberos认证的一种攻击方式&#xff0c;常用来做域控权限维持。当攻击者获取到域内krbtgt帐户的SID和HASH&#xff0c;就可以随意伪造域内管理员用户&#xff0c;再加上域帐户krbtgt的密码基本不会更改&#xff0c;即使域管修改了密码&a…

汇编循环指令(汇编统计正负数汇编语言1到100的求和汇编求一组数最大值)

目录 LOOP指令&#xff08;重点掌握&#xff09; LOOPZ/LOOPE指令 LOOPNZ/LOOPNE指令 例题 一&#xff1a;读程序写结果 二&#xff1a;阅读程序段回答问题 三&#xff1a;读程序写结果 四:求100内的数累和 五&#xff1a;统计正数负数零 六&#xff1a;求字节单元中…

03---后端框架搭建

1、创建项目 打开Ider&#xff0c;创建springboot项目。创建页面勾选需要的依赖&#xff0c;自定义包名、存储位置等&#xff0c;然后创建项目pom依赖如下 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>…

jenkins开发相关

1、jenkins 处理系统配置中publish over ssh中的密码 主机信息数据存储在&#xff5e;/.jenkins/jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin.xml文件中。 java后端如果要加密可以通过以下方法实现。 String Password "xxxx" String passwd "pr…

中科方德服务器操作系统虚拟机安装过程记录

没啥技术含量&#xff0c;就是过程中踩了一些坑&#xff0c;我做个记录&#xff0c;方便后续查阅以及其他人参考什么的。 1、新建虚拟机向导---选择典型配置 2、选择&#xff1a;稍后安装客户机操作系统 3、选择客户机操作 系统以及版本&#xff0c;中科方德服务器系统为在安装…

【LeetCode每日一题】——338.比特位计数

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【题目进阶】九【时间频度】十【代码实现】十一【提交结果】一【题目类别】 动态规划 二【题目难度】 简单 三【题目编号】 338.比特位计数 四【题目描述…

IPv4 ACL访问列表简介、ACL的3种主要分类介绍与配置、以大白话介绍ACL通配符、ACL动作、定义方向、Rule序号。

3.0.0 IPv4 ACL列表&#xff08;简介、ACL分类、ACL配置、通配符&#xff09; ACL访问控制列表简介ACL的分类(华为设备)1、基本/标准ACL基本ACL编号&#xff1a;2000~2999基本ACL的作用&#xff1a;基于数据流的源地址进行匹配2、高级ACL高级ACL编号&#xff1a;3000~3999高级A…

代码随想录刷题记录day46 最长递增子序列+最长连续递增序列+最长重复子数组

代码随想录刷题记录day46 最长递增子序列最长连续递增序列最长重复子数组 300. 最长递增子序列 思想 1.dp数组的定义 dp[i]表示[0,i]区间的最长递增子序列 2.递推公式 如果num[i]>num[j];dp[i]dp[j]1 其中j从0到i-1遍历 3.初始化 所有的都初始化为1 4.遍历顺序 从…

一文读懂于Zebec生态中的潜在收益方式

随着加密市场逐渐陷入低谷&#xff0c;曾经火热的NFT、GameFi等赛道都陷入了沉寂。投资者目前很难在加密市场中获得可观的收益&#xff0c;而在整体加密市场发展局势不明朗的情况下&#xff0c;行业目前缺乏发展动力。 目前&#xff0c;以流支付为主要定位的Zebec生态&#xff…