STM32学习笔记---USART串口的应用

一、串行通信的基本概念

1、串行通信的基本概念

1.1、同步通信和异步通信
  • 通信,最少要有两个对象,一个收,一个发。根据数据通信是否同步,可分为同步通信和异步通信
  • 同步通信:
    一般情况下同步通信指的是通信双方根据同步信号进行通信的方式。比如通信双方有一个共同的时钟信号,通讯中通常双方会统一规定在时钟信号的上升沿或
    下降沿对数据线进行采样。
    STM32学习笔记---USART串口的应用_第1张图片
  • 异步通信:是指数据传输速度匹配依赖于通信双方有自己独立的系统时钟,大家约定好通信的速度。异步通信不需要同步信号,但是并不是说通信的过程不同布
    STM32学习笔记---USART串口的应用_第2张图片
1.2、串行通信和并行通信的区别
  • 串行通信:指的是同一时刻只能收或发一个bit位信息。因此只用1根信号线即可。
  • 并行通信:指的是同一时刻可以收或发多个bit位的信息,因此需要多根信号线才行
    STM32学习笔记---USART串口的应用_第3张图片
    -串行传输:数据按位顺序传输。
    -优点:占用引脚资源少
    -缺点:速度相对较慢
    STM32学习笔记---USART串口的应用_第4张图片
    -并行传输:数据各个位同时传输。
    -优点:速度快
    -缺点:占用引脚资源多
1.3、单工、半双工、全双工
  • 单工:要么收,要么发,只能做接收设备或者发送设备。比如收音机
  • 半双工:可以收,可以发,但是不能同时收发, 比如对讲机
  • 全双工:可以在同一时刻既接收,又发送。 手机
    STM32学习笔记---USART串口的应用_第5张图片
1.4、常见通信总结

STM32学习笔记---USART串口的应用_第6张图片

2、STM32 的 USART 简介

  • USART: Universal Synchronous Asynchronous Receiver and
    Transmitter的缩写,即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。

  • UART 外设(Universal Asynchronous Receiver and Transmitter),它是在
    USART基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是
    UART。

    USART 在 STM32应用最多莫过于“打印”程序信息,一般在硬件设计时都会预留一个 USART通信接口连接电脑,用于在调试程序是可以把一些调试信息“打印”在电脑端的串口调试助手工具上,从而了解程序运行是否正确、指出运行出错位置等等。

2.1、STM32 的 USART 简介

STM32F407有四个 USART 和两个 UART,其中 USART1和 USART6 的时钟来源于 APB2 总线时钟,其最大频率为 84MHz,其他四个的时钟来源于 APB1总线时钟,其最大频率为 42MHz。
STM32学习笔记---USART串口的应用_第7张图片

2.2、串口电路连接

STM32学习笔记---USART串口的应用_第8张图片

3、串口通信协议介绍

STM32学习笔记---USART串口的应用_第9张图片
波特率

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

  • 国际上规定一个标准的波特率系列:
    110、300、600、1200、1800、2400、4800、9600、115200、14.4Kbps、19.2Kbps、……
    例如:115200bps、指每秒传送115200位。通信双方必须设置同样的同学速率才能正常通信

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

二、串口寄存器介绍

  • 控制寄存器——USART_CR
  • 波特率寄存器——USART_BRR
  • 状态寄存器——USART_SR
  • 数据寄存器——USART_DR

1、串口数据的发送和接收

STM32学习笔记---USART串口的应用_第10张图片
发送数据,首先判断TDR是否为空,为空把数据给TDR,TDR再给移位寄存器,由其发出

2、串口寄存器-USART_CR1

STM32学习笔记---USART串口的应用_第11张图片
STM32学习笔记---USART串口的应用_第12张图片

3、串口寄存器-USART_CR2

STM32学习笔记---USART串口的应用_第13张图片

4、串口寄存器-USART_BRR

STM32学习笔记---USART串口的应用_第14张图片
fPLCK 为 USART 时钟OVER8为 USART_CR1 寄存器的 OVER8位对应的值,USARTDIV 是一个存放在波特率寄存器(USART_BRR)的一个无符号定点数。其中 DIV_Mantissa[11:0]位定义 USARTDIV 的整数部分,DIV_Fraction[3:0]位定义

5、串口寄存器-USART_SR

STM32学习笔记---USART串口的应用_第15张图片

  • 位 7 TXE:发送数据寄存器为空 (Transmit data register empty)
    0:数据未传输到移位寄存器
    1:数据传输到移位寄存器
  • 位 6 TC:发送完成 (Transmission complete)
    0:传送未完成
    1:传送已完成
  • 位 5 RXNE:读取数据寄存器不为空 (Read data register not empty)
    0:未接收到数据
    1:已准备好读取接收到的数据

6、串口寄存器-USART_DR

STM32学习笔记---USART串口的应用_第16张图片

三、STM32实现串口数据的收发

通过寄存器操作

1、串口硬件原理图

STM32学习笔记---USART串口的应用_第17张图片
STM32学习笔记---USART串口的应用_第18张图片

2、配置串口

2.1、功能配置

配置为异步通信
STM32学习笔记---USART串口的应用_第19张图片

2.2、协议配置

STM32学习笔记---USART串口的应用_第20张图片

3、功能代码

STM32学习笔记---USART串口的应用_第21张图片
STM32学习笔记---USART串口的应用_第22张图片
STM32学习笔记---USART串口的应用_第23张图片
STM32学习笔记---USART串口的应用_第24张图片
STM32学习笔记---USART串口的应用_第25张图片

四、HAL串口库函数的使用及printf的实现

1、HAL串口库函数

Stm32f0xx_hal_uart.c 文件中
串口的发送函数

HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

串口的接收函数

HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

STM32学习笔记---USART串口的应用_第26张图片
STM32学习笔记---USART串口的应用_第27张图片
STM32学习笔记---USART串口的应用_第28张图片

2、printf的实现

printf函数调用的是c库中的fputc函数。因此我们如果重新写了fputc函数,就可以改变printf函数的功能,可以向串口打印输出。
STM32学习笔记---USART串口的应用_第29张图片

你可能感兴趣的:(stm32,单片机,arm)