【RoboMaster】最好理解的UART和USART解说!【STM32】

同步博客地址从STM32开始的RoboMaster生活:进阶篇 III [UART & USART]

项目&教程仓库-STM32-RoboMaster-


1.0 什么是UART和USART?有什么区别嘛?

1.1 UART定义

Universal Asynchronous Receiver/Transmitter:通用异步收发传输器,是一种串行异步收发协议,应用十分广泛。UART工作原理是将数据的二进制位一位一位的进行传输。在UART通讯协议中信号线上的状态位高电平代表’1’低电平代表’0’。当然两个设备使用UART串口通讯时,必须先约定好传输速率和一些数据位。分类属于并行传输,通常1字节数据的8位同时传输,结束后再继续传第2个字节,如同波浪一般,一波一波传输。

1.2 UART与USART的区别

  • UART

UART.png

​ 从图上可以看出整个传输过程。首先,在没有数据传输任务的时候,互相之间都是高电平 ( 1 ) ,然后,在有传输任务的时候,有1.5字节宽的起始信号,然后开始传输真正的信号,结束任务后,再给1.5字节宽的结束信号,最后回归没有数据传输的高电平。

  • USART <-- Universal Synchronous/Asynchronous Receiver/Transmitter 通用同步异步接收发送器

USART.png

​ USART是UART的升级版,区别在于多了CLK线,在CLK没有信号的时候,就表明没有数据传输任务,有CLK信号的时候,就是正在传输信号,并且CLK提供了时钟同步功能,效验也更精确。但在实际使用的时候,其实并不会感觉UART和USART有很大的区别,除非接触非常底层的东西。

2.0 UART和USART在哪里?

RM A detail.jpg

UART detail.png

  • UART

    • UART7

    尽管大疆第一个图中标明的是USART7,但是其实只能使用异步通讯,也就是普通的UART。

    • UART8

    尽管大疆第一个图中标明的是USART8,但是其实只能使用异步通讯,也就是普通的UART。

  • USART

    • USART6
  • DJI ON BOARD SDK

    • USART3

    这个是大疆预留的官方接口,与一般的USART的接线不同,不能直接使用,也不推荐使用。

3.0 UART和USART有啥用?

  1. 与PC端通讯

    可以作为Debug的一种手段,或者监控数据流通的方法。

  2. 与其他设备通讯

    比如两个MCU互相通讯,也就是作为主从机来使用。

4.0 UART和USART的两种不同使用模式

4.1 Polling

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  • 参数
    • huart:指向UART引脚配置结构体
    • pData:指向需要传输的字符串
    • Size:传输数据的字节大小
    • Timeout:最大等待完成时限,单位为毫秒,也可以用HAL_MAX_DELAY来直接无限等待
  • 返回值
    • HAL_StatusTypeDef:如果传输完成,返回HAL_OK;如果没有在时限内完成,返回HAL_TIMEOUT;如果在传输出错,返回HAL_ERROR;如果该UART正在被占用,返回HAL_BUSY

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  • 参数
    • huart:指向UART引脚配置结构体
    • pData:指向需要传输的字符串
    • Size:传输数据的字节大小
    • Timeout:最大等待完成时限,单位为毫秒,也可以用HAL_MAX_DELAY来直接无限等待
  • 返回值
    • HAL_StatusTypeDef:如果传输完成,返回HAL_OK;如果没有在时限内完成,返回HAL_TIMEOUT;如果在传输出错,返回HAL_ERROR;如果该UART正在被占用,返回HAL_BUSY

4.2 Interrupt

HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  • 参数
    • huart:指向UART引脚配置结构体
    • pData:指向需要传输的字符串
    • Size:传输数据的字节大小
  • 返回值
    • HAL_StatusTypeDef:如果传输完成,返回HAL_OK;如果在传输出错,返回HAL_ERROR;如果该UART正在被占用,返回HAL_BUSY

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  • 参数
    • huart:指向UART引脚配置结构体
    • pData:指向需要传输的字符串
    • Size:传输数据的字节大小
  • 返回值
    • HAL_StatusTypeDef:如果传输完成,返回HAL_OK;如果在传输出错,返回HAL_ERROR;如果该UART正在被占用,返回HAL_BUSY

这里的函数并不是直接接收数据,而是表明开启UART的Interrupt模式
接收完数据后,该UART的Interrupt模式会自动关闭,需要再手动开启


void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
   
	......
}
  • 在写代码的时候,在main.c中创建HAL_UART_TxCpltCallback函数
  • 在该函数中填写UART发送结束后,需要执行的代码

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
   
	......
}
  • 在写代码的时候,在main.c中创建HAL_UART_RxCpltCallback函数
  • 在该函数中填写UART接收结束后,需要执行的代码

5.0 练习项目

5.1 项目简介

  • 电脑控制LED灯:在电脑上按下r,反转红色LED状态,按下g,反转绿色LED状态,按下1~8,反转对应的LED1~8的状态,并且返回打印反转的LED灯号

5.2 芯片配置

  • 芯片视角

Chip for RM03.png

  • GPIO配置列表

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值