day4 USART串口的应用

同步和异步通信

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

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

578eaacb1b3047b19a7e7b40af587f05.png

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

65f0e20f4b094e0899eac63c36778cda.png

串行和并行通信 

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

并行通信:指的是同一时刻可以收或发多个bit位的信息,因此需要多根信号线才行
2eae304e127244a38f4523d462f3356d.png

 单工、半双工、全双工

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

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

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

 常见通信总结

      通信标准

 引脚说明

 通信方式

通信方向

  UART

(通用异步收发器)

TXD:发送端

RXD:接受端

GND:公共地

异步通信

全双工

  单总线

(1-wire)

DQ:发送/接受端

异步通信

半双工

SPI

SCK:同步时钟

MISO:主机输入,从机输出

MOSI:主机输出,从机输入

同步通信

全双工

I2C

SCL:同步时钟

SDA:数据输入/输出端

同步通信

半双工

USART基本概念

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

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

87d03c2e3c9e42ce949d00f4362b3225.png

注:一般以TX,RX结尾的接口为串口

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

串口通信协议介绍(STM32F0)

96f3b512715f44ecb97cbf284e3725b2.png

 STM32F0串口通信过程:

1、初始化串口:配置串口的波特率、数据位、停止位和校验位等参数。

2、配置GPIO引脚:选择合适的GPIO引脚作为串口的TX(发送)和RX(接收)引脚。

3、发送数据:使用适当的函数将数据发送到串口缓冲区。

4、接收数据:通过轮询或中断方式从串口缓冲区读取接收到的数据。

波特率:

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

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

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

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

奇偶校验:

奇偶校验有两种类型:奇校验和偶校验。

在奇校验中,校验位被设置为确保数据中1的个数为奇数;

而在偶校验中,校验位被设置为确保数据中1的个数为偶数;

STM32 USART寄存器介绍

控制寄存器 —— USART_CR

状态寄存器 —— USART_SR

数据寄存器 —— USART_DR

波特率寄存器 —— USART_BRR

控制寄存器 1 (USART_CR1)

寄存器具体位功能参考STM32F051中文手册

地址偏移:0x00;  复位值:0x0000

功能:可以用来配置中断,通信协议中的数据位,校验位。

中断使能:就是指,让中断可以被触发,可以进入中断服务程序。

中断禁止:即使中断信号来了也不会触发中断 也就不会进入中断服务程序。

控制寄存器2(USART_CR2)

地址偏移:0x04;    复位值:0x0000

功能:用来配置串口协议的停止位。

一般情况下串口协议才用8 N 1 的配置,8个数据位,N就是没有奇偶校验,1表示一个停止位。

波特率寄存器(USART_BRR)

这个寄存器只能在USART未被使能的时候(UE = 0)改写。在自动波特率检测模式下,可能会被硬件自动改写。

地址偏移:0x0c;          复位值:0x0000

功能:用于配置串口协议通信速率。

中断状态寄存器(USART_ISR)

地址偏移:0x1c ;   复位值:0x0000

功能:中断状态寄存器的各个位用来描述串口通信协议通信过程中的串口的状态,例如数据发送已完成,数据接收已完成等。

较为重要的是  位5 RXNE:接收数据寄存器非空 和 位 7 TEX:发送数据寄存器空

串口协议通信使用printf函数

默认情况下,printf函数会将字符输出到标准输出流stdout,而stdout的默认输出设备是终端。但是,通过重写fputc函数,我们可以修改printf函数的行为,使其将字符逐个发送到串口,从而实现通过串口进行通信。

int fputc(int ch, FILE *f)
{
  //1、调用库函数
    //HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
//2、
    while(!(USART1->ISR & (1<<7)));
    USART1->TDR = ch;

  return ch;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值