串口通信与其相关配置
参考资料:
《开发指南》P178 串口实验
《参考手册》P516 通用同步异步收发器
1. 串口通信
通信双方(cpu与外部设备)之间通信的两种方式:
- 并行通信
▶传输原理:数据各个位同时进行传输
▶优点:速度快
▶缺点:占用引脚资源多 - 串行通信
▶传输原理:数据按位顺序传输
▶优点:占用引脚资源少
▶缺点:速度相对较慢
1.1 串行通信
1.1.1 按数据传送方向分类
▶单工:
数据传输只支持数据在一个方向上传输,如图:
▶半双工:
运行数据在两个方向上传输,但是在同一时刻只允许在一个方向上传输。可理解为:可改变方向的单工传输。
▶全双工:
允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发生设备和接收设备都有独立的接收和发送能力。
1.1.2 按数据的通信方式分类
**▶同步通信:**带时钟同步信号传输。
即要求接收端时钟频率和发送端时钟频率一致;一旦开始时,发送方要以固定的节奏去发送数据,而接收方要以同样的节奏时刻做好接收数据的准备。
-SPI,IIC通信接口
**▶异步通信:**不带时钟同步信号。
收发双方可以有各自自己的时钟;异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,接收方是在数据的起始位和停止位的帮助下实现信息同步的。
-UART(通用异步收发器),单总线
通俗的讲,异步是你扔出去一个内容,对方靠着内容前后他能嗅到的异样在人潮之中发现了它,把这个内容存下来;而同步是对方在时刻等着你发布号令,你告诉对方我要发送了哦,然后双方一拍即合。
1.1.3 常见的串行通信接口
STM32的串口通信接口有:
◉UART:通用异步收发器
◉USART:通用同步异步收发器
有3个USART和2个UART
1.1.4 UART异步通信方式引脚连接方式
-RXD:数据输入引脚。数据接收
-RTD:数据输出引脚。数据发送
①芯片1和芯片2的连接方式:
②芯片与PC机的引脚连接方式:
说明:PC机的串口是DB9,与芯片的串口的TTL电平不兼容,所以需要通过RS232转换器,将芯片串口的TTL电平转换为232电平,因此才可以进行通信。
1.1.5 串口通信过程
数据接收过程:
数据来源于外部设备,一位一位的传输到芯片的数据接收引脚(RXD),传输的速度由波特率来决定。
数据发送过程:
类似于数据接收。
1.1.6 通信过程需定义的参数
①起始位
②数据位(8位或9位)
③奇偶校验位
④停止位(1,15,2位)
⑤波特率设置
例如:
2. 串口通信配置
2.1 常用库函数
2.2 串行通信的配置步骤
- 串口时钟使能,GPIO时钟使能
RCC_APB2PeriphClockCmd();
- GPIO初始化(将GPIO配置为复用功能)
GPIO_Init();
- 串口参数初始化
USART_Init();
初始化波特率,数据字长,奇偶校验,使能 - 使能串口
USART_Cmd();
- 开启中断并且初始化中断
NVIC_PriorityGroupConfig();
中断优先级分组
NVIC_Init();
初始化优先级
USART_ITConfig();
开启串口接收中断 - 编写handler函数
USARTx_IRQHandler();
- 串口数据收发
void USART_SendData();
发送数据
uint16_t USART_ReceiveData();
接收数据 - 串口传输状态获取
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TyperDef* USARTx, uint16_t USART_IT);
USART_GetITStatus()和USART_GetFlagStatus()的区别
都是访问串口的SR状态寄存器,唯一不同是,USART_GetITStatus()会判断中断是否开启,如果没开启,也会返回false。
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint32_t USART_IT)
该函数不仅会判断标志位是否置1,同时还会判断是否使能了相应的中断。所以在串口中断函数中,如果要获取中断标志位,通常使用该函数。------串口中断函数中使用。
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint32_t USART_FLAG)
该函数只判断标志位。在没有使能相应的中断时,通常使用该函数来判断标志位是否置1。------做串口轮询时使用。