文章目录
一、总线相关概念
(一)总线
总线:连接多个部件的信息传输线,是各部位共享的传输介质。
芯片内部总线:Cortex-A7核和外设控制器进行通信的总线
芯片外部的总线:SOC和各种传感器之间进行通信的总线
(二)串行和并行总线
串行总线:同一时刻只能收或发一个bit位信息
并行总线:同一时刻可以收或发多个bit位的信息
串行通信的总线:UART,IIC,SPI,485,CAN,USB
并行通信的总线:内存芯片,Flash芯片,液晶屏,摄像头
(三)单工、半双工、全双工
单工:在通信的任意时刻,信息只能由一方传至另一方,而不能反向传送
半双工:指在通信过程的任意时刻,信息既可由A传到B,又能由B传A,但两个方向上的传输不能同时进行。
半双工通信总线:IIC,485,CAN,USB2.0
全双工:在发送数据的同时也能够接收数据,两者同步进行。这种通信方式允许数据在两个方向上同时传输,相当于两个单工通信方式的结合。
全双工通信总线:UART,SPI,USB3.1
(四)同步通信和异步通信
同步通信:一般情况下同步通信指的是通信双方根据同步信号进行通信的方式。比如双方有一个共同的时钟信号,根据时钟信号进行通信
同步通信时钟:IIC,SPI
异步通信:异步通信是指数据传输速度匹配依赖于通信双方自己独立的系统时钟,约定好通信的速度。异步通信不需要同步信号,但是通信过程是同步的。
异步通信总线:UART,485,CAN,USB
二、串口
(一)概念
UART是通用异步串行全双工总线。
实际开发中一般使用三根线:RXD(接收数据线),TXD(发送数据线),GND(地线)
(二)实际开发中常用的串口连接方式
1. MAX232/SP232
2. CH340
3. ST-Link
(三)UART串口通信协议
起始位:一帧数据发送的开始信号
数据位:起始位之后要发送的数据,先发送数据的低位,再发送数据的高位。
校验位:奇偶校验
奇校验:数据位和校验位1的个数之和为奇数。
偶校验:数据位和校验位1的个数之和为偶数。
停止位:一帧数据发送结束,校准时钟信号
- 注:串行通信一般先发数据低位,再发数据高位
- 注:UART串口采用异步通信,通信双方采用各自独立的时钟系统,虽然要求双方的时钟频率保持一致,但是仍会存在一定误差,在数据发送的过程中误差会累积,因此发送一帧数据后要重新校准时钟
波特率:每秒数据传输的bit位,单位bps
串口常用的波特率为115200bps,9700bps
串口常用的通信协议:8N1(8个数据位,(N)没有校验位,1个停止位)
(四)串口电路图
UART_TX:----PG11
UART_RX:----PB2
(五)分析芯片手册
1. 确定RCC,GPIOB,GPIOG,UART4分别接到哪根总线上,以及外设寄存器的基地址
2. 分析RCC,使能GPIOB,GPIOG,UART4外设的时钟源
需要使能AHB4的GPIOB,GPIOG和APB1的UART4
(1)AHB4
(2)APB1
3. 设置GPIO
GPIO引脚的复用功能:GPIO引脚除了基本的输入输功能,还有很多其他的功能,但是实际应用中只能选择其中一个功能进行使用,通过配置相关寄存器选择GPIO引脚的功能。
(1)GPIOx_AFRL
(2)GPIOx_AFRH
4. 设置UART
串口框图
(1)USART_CR1寄存器
Bit28 M1位
Bit15 OVER8
串口为了提高数据采样的准确度,一般会采用时钟的频率为波特率N倍的方式
8倍采样率:
16倍采样率:
Bit10 PCE位
Bit3 TE位
Bit2 RE位
Bit0 UE位
(2)USART_CR2寄存器
(3)USART_BRR
BRR[15:4]:
BRR[15:4] = USARTDIV[15:4]
BRR[3:0] :
当over8 = 0时,(16倍采样率)
BRR[3:0] = USARTDIV[3:0]
当over8 = 1时,(8倍采样率)
BRR[2:0] = USARTDIV[3:0] >> 1
BRR[3] 必须保持清0状态
(4)USART_ISR寄存器
当发送寄存器(USART_TDR)中的内容被发送到移位寄存器时,硬件自动将其置1。
如果读到TXE位为1时,表示发送数据寄存器为空,用户可以向发送数据寄存器中写入数据;
当用户向发送数据寄存器写入数据后,发送数据寄存器不为空,硬件自动将其置0。
如果读到TXE位为0时,表示发送数据寄存器不为空,用户不可以向发送寄存器中写入数据。
当接收移位寄存器中的数据被传送到接收数据寄存器(USART_RDR)时,硬件自动将RXNE位置1,此时读RXNE位为1时,用户可以从接收数据寄存器中读取数据。
当接收数据寄存器中的数据被读取之后,硬件自动将RXNE位清0,
此时读RXNE位为0时,用户不可以从接收数据寄存器中读取数据,需要等待接收数据寄存器有数据。
(5)USART_RDR寄存器
(6)USART_TDR寄存器
(7)USART_PRESC寄存器
- 注:这个寄存器只有在USART未使能状态下才能修改
(六)代码实现
UART发送代码实现思路
URAT接收代码实现思路
- 注:\n是换行符,\r是回车符