串行
并行
串行并行的区别
特点 | 传输速率 | 抗干扰能力 | 通信距离 | IO资源占用 | 成本 |
串行通信 | 较低 | 较强 | 较长 | 较少 | 较低 |
并行通信 | 较高 | 较弱 | 较短 | 较多 | 较高 |
单工通信:数据只能沿一个方向传输
半双工通信:数据可以沿两个方向传输,但需要分时进行
全双工通信:数据可以同时进行双向传输
同步通信:共用同一时钟信号
异步通信:没有时钟信号,通过在数据信号中加入起始位和停止位等一些同步信号
比特率:每秒钟传送的比特数,单位bit/s
波特率:每秒钟传送的码元数,单位Baud
比特率 = 波特率 * log2 M ,M表示每个码元承载的信息量。
二进制波特率视为比特率也可
通信接口 | 接口引脚 | 数据同步方式 | 数据传输方向 |
UART (通用异步收发器) | TXD:发送端 RXD:接收端 GND:公共地 | 异步通信 | 全双工 |
1-wire | DQ:发送/接收端 | 异步通信 | 半双工 |
IIC | SCL:同步时钟 SDA:数据输入/输出端 | 同步通信 | 半双工 |
SPI | SCK:同步时钟 MISO:主机输入,从机输出 MOSI:主机输出,从机输入 CS:片选信号 | 同步通信 | 全双工 |
RS-232? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?逻辑1:-15V ~ -3V? ? ? ? 逻辑0:+3V ~ +15V
COMS电平(3.3V)?????????????????逻辑1:3.3V ?????????????????逻辑0:0V
TTL电平(5V)?????????????????????????逻辑1:5V ????????????????????逻辑0:0V
启动位:必须占1个位长,保持逻辑0电平
有效数据位:可选5、6、7、8、9个位长,LSB最低有效位在前,MSB最高有效位在后
校验位:可选占1个位长,也可以没有该位
停止位:必须有,可选占0.5、1、1.5、2个位长,保持逻辑1电平
F1/F4/F7 USART框图
简化框图
波特率计算公式
其中Fck是串口时钟,USART1的时钟是PCLK2,其他串口都是PCLK1
用寄存器方法设置波特率
以波特率115200为例
寄存器代码
uint16_t mantissa;
uint16_t fraction;
mantissa=39; //整数部分
fraction=0.0625*16+0.5=0x01 //四舍五入减少误差
/* USARTDIV = DIV_Mantissa + (DIV_Fraction/16) */
USART1->BRR = (mantissa << 4) + fraction;
控制寄存器(CR1)
位13:使能USART
位12:配置8个数据位
位10:禁止检验控制
位5:使能接收缓冲区非空中断
位3:使能发送
位2:使能接收
控制寄存器(CR2)
配置1个停止位
控制寄存器(CR3)
配置不选择半双工模式
数据寄存器(DR)
设置好控制和波特率寄存器,往该寄存器写入数据即可发送,接受数据即可读该寄存器
状态寄存器
通过TC位知道能否发数据
通过RXNE位知道是否收到数据
函数介绍
HAL_UART_Init()
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
typedef struct
{ uint32_t BaudRate; /* 波特率 */
uint32_t WordLength; /* 字长 */
uint32_t StopBits; /* 停止位 */
uint32_t Parity; /* 奇偶校验位 */
uint32_t Mode; /* UART 模式 */
uint32_t HwFlowCtl; /* 硬件流设置 */
uint32_t OverSampling; /* 过采样设置 */
}UART_InitTypeDef
HAL_UART_Receive_IT()
//作用:以中断的方式接收指定字节的数据
//形参 1 是 UART_HandleTypeDef 结构体类型指针变量
//形参 2 是指向接收数据缓冲区
//形参 3 是要接收的数据大小,以字节为单位
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
HAL_UART_Transmit()
//作用:以阻塞的方式发送指定字节的数据
//形参 1 :UART_HandleTypeDef 结构体类型指针变量
//形参 2:指向要发送的数据地址
//形参 3:要发送的数据大小,以字节为单位
//形参 4:设置的超时时间,以ms单位
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
例子
例子
GPIO 复用功能低位寄存器(AFRL)
GPIO 复用功能高位寄存器(AFRH)
该文章参考正点原子资料,请勿商用
有错误地方请大家指点