stm32f407探索者开发板(十六)——串行通信原理讲解-UART

简介: stm32f407探索者开发板(十六)——串行通信原理讲解-UART

一、串口通信接口背景知识

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异步通信方式特点

  1. 全双工异步通信。
  2. 小数波特率发生器系统,提供精确的波特率。
  3. 可配置的16倍过采样或8倍过采样,因而为速度容差与时钟容差的灵活配置提供了可能。
  4. 可编程的数据字长度( 8位或者9位) ;
  5. 可配置的停止位(支持1或者2位停止位) ;
  6. 可配置的使用DMA多缓冲器通信。
  7. 单独的发送器和接收器使能位。
  8. 检测标志:①接受缓冲器②发送缓冲 器空③传输结束标志
  9. 多个带标志的中断源。触发中断。
  10. 其他:校验控制,四个错误检测标志。

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);   
    }
  }
}
相关文章
|
1月前
|
传感器
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
|
1月前
stm32f407探索者开发板(十九)——外部中断实验-EXIT
stm32f407探索者开发板(十九)——外部中断实验-EXIT
|
1月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
167 0
|
1月前
stm32f407探索者开发板(二十三)——定时器中断实验
stm32f407探索者开发板(二十三)——定时器中断实验
|
1月前
|
程序员
stm32f407探索者开发板(二十一)——窗口看门狗
stm32f407探索者开发板(二十一)——窗口看门狗
|
1月前
|
芯片
stm32f407探索者开发板(二十)——独立看门狗实验
stm32f407探索者开发板(二十)——独立看门狗实验
|
1月前
|
监控
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
|
1月前
stm32f407探索者开发板(十五)——NVIC中断优先级管理
stm32f407探索者开发板(十五)——NVIC中断优先级管理
|
1月前
stm32f407探索者开发板(十四)——IO引脚复用和映射
stm32f407探索者开发板(十四)——IO引脚复用和映射
|
1月前
stm32f407探索者开发板(十三)——JLINK在线调试_软件调试_方法与技巧
stm32f407探索者开发板(十三)——JLINK在线调试_软件调试_方法与技巧