文章目录
- 一、串口通信接口背景知识
- 1.1 处理器与外部设备通信的两种方式
- 1.2 按照数据传送方向
- 1.3 是否带有时钟信号
- 1.4 常见的串行通信接口
- 二、STM32F4串口通信基础
- 2.1 STM32的串口通信接口
- 2.2 UART异步通信方式引脚连接方法
- 2.3 UART异步通信方式引脚(STM32F407ZGT6)
- 2.4 UART异步通信方式特点
- 2.5 STM32串口通信过程
- 2.6 STM32串口异步通信需要定义的参数
- 三、STM32串口框图
一、串口通信接口背景知识
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);
}
}
}