STM32--串口通信

概念是我们对于一个事物的所见清晰度,没有了概念,整个世界都是模糊的!

有关通信的一些概念:

并行/串行:发送数据的信息形式
同步/异步:有时钟辅助来确保信息传输速度的叫做同步,有特殊信号位来控制信息传输的叫做异步
全双工/半双工/单工:信息通道 全双工相当于双向车道,半双工相当于潮汐车道,单工相当于单向通道
比特率/波特率:发送信息传输的速率,二者分子不同分母都为时间,比特率 bits/s | 波特率 码元/s

几种常见的通信方式:

SPI UART I2C

串口通信详解

RS232/USB转串口/串口转串口

TTL电平:直接从单片机里出来的 0 - 1v/ 1 - 3.3v
RS232电平:0- -15v / 1 - 15v

以RS232代表的物理层解析

在这里插入图片描述
工业设备里静电,粉尘比较严重,所以要使用峰峰值更大的RS232
在这里插入图片描述

有的板子已经集成了电平转换芯片,有的则没有,需要自己去买扩展:
在这里插入图片描述在这里插入图片描述

协议层解析:

串口的数据包基本格式:
在这里插入图片描述

起始位:一个逻辑0的数据为表示
结束位:由0.5 / 1 / 1.5 / 2 个 逻辑1 来表示 一般我们设置为1个
有效数据位:起始位后面紧接着的就是有效数据 长度在5,6,7,8,9位中可选
校验位:可选的,为的是数据的抗干扰性。分为奇偶校验,无校验,0校验,1校验五种,一般设置为无校验

串口模块的功能框图:
在这里插入图片描述

USART的引脚及功能

TX:Transmit
RX:Receive
SCLK:时钟配置 只在同步通信时使用 一般我们只用异步 在信息中添加特殊位
nRTS:
nCTS:

对应引脚的GPIO查询可以在STM32F10X数据手册的Pinouts and pin description 中查询

下面几个寄存器用于控制填充数据包

数据寄存器 USART_DR:
9位有效,这个寄存器可以有两种功能,发送数据(TDR)和接收数据(RDR),一个地址对应了两个物理内存
(就像一个房间,当单片机需要发送数据时里面住的是信息发送的使者,当需要接收数据时里面住的是接收数据的接收者)

控制寄存器

USART_CR1:
M:
控制9位有效中实际会使用的位数,定义了数据字的长度,由软件对其设置和清零
0: 一个起始位,8个数据位,n个停止位
1: 一个起始位,9个数据位,n个停止位 n表示不确定 由其他寄存器决定(下面就会说)

PCE 和 PS
校验位:parity control enable 使能校验 parity select 选择用奇还是偶校验

PEIE 如果校验出现错误则会使用这个寄存器来使能中断
(由usart_sr 的寄存器PE 来决定是否有校验错误)
USART_CR2:
STOP:00: 1个停止位
我们使用一个停止位就可以了

数据发送/接收的具体流程
下面几个寄存器用于数据发送或接收

USART_CR1 UE : 使能串口的时钟(数据传输完毕USART自动关闭时钟所以每次使用都得再次打开,相当于发送和接收路上的大门)

USART_CR1 TE/RE: 使能发送/接收 (小门)

发送和接收时的配置以及寄存器状态位的改变
先上数据传输的流程图:
在这里插入图片描述
再上数据状态寄存器的详细表格:
在这里插入图片描述

发送数据来源:CPU /DMA从内存读取
放到发送数据寄存器 TDR 接收数据寄存器 RDR
| /
| TXE transmit data register empty 1:该过程结束 0:该过程未结束 |
/ |
再放到 发送移位寄存器 接收移位寄存器
| /
| TC transmision complete 1:发送完成 0:发送未完成 | RXNE ( READ DATA NOT EMPRT)
/ | 0:未接受到数据 1:接收到数据 可读
再一位一位地发送到TX发送引脚 一位一位的接收
接收数据的来源:RX引脚

涉及到3个寄存器地改变 需软件不断检查这3个寄存器

几个与中断相关的寄存器
在这里插入图片描述

STM32CUBEMAX配置串口:

在这里插入图片描述

HAL库中关于串口的几个函数:

1 阻塞发送接收函数:
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
在这里插入图片描述
在这里插入图片描述

2 非阻塞发送接收接收
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
在这里插入图片描述
在这里插入图片描述

3 非阻塞发送接收的回调函数
__weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值