一、串口通信接口背景知识
1.1 处理器与外部设备通信的两种方式
- 并行通信
传输原理:数据各个位同时传输。
优点:速度快
缺点:占用引脚资源多
- 串行通信
传输原理:数据按位顺序传输。
优点:占用引脚资源少
缺点:速度相对较慢
串行通信:
1.2 按照数据传送方向
单工:
数据传输只支持数据在一个方向上传输
半双工:
允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
全双工:
允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立。
1.3 是否带有时钟信号
- 同步通信:带时钟同步信号传输。
SPI,IIC通信接口 - 异步通信:不带时钟同步信号。
UART(通用异步收发器),单总线
1.4 常见的串行通信接口
二、STM32F4串口通信基础
2.1 STM32的串口通信接口
- UART:通用异步收发器
- USART:通用同步异步收发器
STM32F4XX目前最多支持8个UART,STM32F407一般是6个。 具体可以对照选型手册和数据手册来看
- STM32F103目前最多支持5个UART
2.2 UART异步通信方式引脚连接方法
RXD:数据输入引脚。数据接受。
TXD:数据发送引脚。数据发送。
2.3 UART异步通信方式引脚(STM32F407ZGT6)
2.4 UART异步通信方式特点
- 全双工异步通信。
- 小数波特率发生器系统,提供精确的波特率。
- 可配置的16倍过采样或8倍过采样,因而为速度容差与时钟容差的灵活配置提供了可能。
- 可编程的数据字长度( 8位或者9位) ;
- 可配置的停止位(支持1或者2位停止位) ;
- 可配置的使用DMA多缓冲器通信。
- 单独的发送器和接收器使能位。
- 检测标志:①接受缓冲器②发送缓冲 器空③传输结束标志
- 多个带标志的中断源。触发中断。
- 其他:校验控制,四个错误检测标志。
2.5 STM32串口通信过程
2.6 STM32串口异步通信需要定义的参数
①起始位
②数据位(8位或者9位)
③奇偶校验位(第9位)
④停止位(1,15,2位)
⑤波特率设置
- 范例
三、STM32串口框图
参考代码
int main(void) { u8 t; u8 len; u16 times=0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 delay_init(168); //延时初始化 uart_init(115200); //串口初始化波特率为115200 LED_Init(); //初始化与LED连接的硬件接口 while(1) { if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度 printf("\r\n您发送的消息为:\r\n"); for(t=0;t<len;t++) { USART_SendData(USART1, USART_RX_BUF[t]); //向串口1发送数据 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束 } printf("\r\n\r\n");//插入换行 USART_RX_STA=0; }else { times++; if(times%5000==0) { printf("\r\nALIENTEK 探索者STM32F407开发板 串口实验\r\n"); printf("正点原子@ALIENTEK\r\n\r\n\r\n"); } if(times%200==0)printf("请输入数据,以回车键结束\r\n"); if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行. delay_ms(10); } } }