STM32Cube串口USART发送接收数据

本文代码使用 HAL 库。

前言

这篇文章介绍 实现 USART 异步模式下 通过 串口助手 发送,接收 数据


一、USART 同步/异步串行接收/发送器

USART(Universal Synchronous Asynchronous Receiver Transmitter)是一种通用的串行通信接口,它可以用来 发送 和 接收 数据。

USART 可以用来 连接两个设备 ,以实现数据传输。它可以用来连接计算机、打印机、终端机、网络设备等。

USART 可以使用 同步 或 异步 方式传输数据。

  • 在 同步 模式下,发送和接收的数据都是 同步 的,即发送和接收的数据都是以相同的速率传输的。在绝大多数场合下发送端和接收端采用的都是同一个时钟
  • 而在 异步 模式下,发送和接收的数据是异步的,即发送和接收的数据可以以不同的速率传输。发送端和接收端可以有各自独立的时钟来控制数据的发送和接收,这两个时钟各自独立,互不同步

二、USART 原理图

任何 USART 双向 通信至少需要 两个 脚:接收数据输入(RX) 和 发送数据输出(TX) 。

  • RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。
  • TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。

从下图可以看到 USART 的发送引脚为PA9 USART1_TX, 接收引脚为 PA10 USART1_RX在这里插入图片描述

三、CubeMX 创建工程

  1. 选择芯片。
    在这里插入图片描述
  2. 选择 Debug 模式
    在这里插入图片描述
  3. 选择外部时钟
    在这里插入图片描述
  4. 配置系统时钟,在 红框中输入 72 ,然后点击 回车 两次,即可配置好
    在这里插入图片描述
  5. 设置 io 端口
    在这里插入图片描述
  6. 设置为 异步通信。
    在这里插入图片描述
  7. 可 重新设置名字
    在这里插入图片描述
  8. 设置工程模式和版本
    在这里插入图片描述
  9. 选取加入.c /.h文件(便于编写代码)
    在这里插入图片描述
  10. 创建工程
    在这里插入图片描述
    然后 打开工程,可以看到我们的 usart.c , usart.h
    在这里插入图片描述

四、usart.c 文件解析

  1. 使用 UART_HandleTypeDef 结构体 定义变量具象 USART 对象。huart1usart.h 中被定义。
    在这里插入图片描述
  2. 使用 MX_USART1_UART_Init 设置 USART1 的参数(波特率,数据位长度,奇偶校验位等)
    使用 HAL_UART_Init() 初始化结构体变量,完成对该 USART 外设的初始化。
    在这里插入图片描述
  3. HAL_UART_MspInit( ) 函数中完成对 时钟 的 使能 和 GPIO/DMA 等的配置。
    在这里插入图片描述
  4. 关闭使能。
    在这里插入图片描述

五,设计实验:

在 串口输入字符点亮led

  • 在 串口 输入 ’ A ',则 led 点亮
  • 在 串口 输入 ’ a ',则 led 熄灭
  1. 串口发送函数
HAL_UART_Transmit ( UART_HandleTypeDef * huart , uint8_t * pData , uint16_t Size , uint32_t Timeout );
  1. 串口接收函数
HAL_UART_Receive_IT (UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  1. printf 重定向:
int fputc(int str, FILE *f)     /* printf 打印 */
{
	while(HAL_UART_Transmit(&huart1, (uint8_t *)&str, 1, 300) != HAL_OK);
	return 0;
}
int fgetc( FILE *f)       /* scanf 输入 */
{
	char c = 0;
	while(HAL_UART_Receive(&huart1, (uint8_t *)&c, 1, 300) != HAL_OK);
	return c;
}
  1. 控制 led 亮灭。
    对于 led 的代码以及工程文件,可以参考我之前的文章,详细的介绍了 led
    STM32f103 CubeMX封装 led程序
uint8_t buff[128]={0};  /* 接收数据数组 */
buff[0] = getchar();   /* 获取字符 */
 
  switch(buff[0])
  {
   case 'A':
	  {
		  Blue_ON();    /* led 点亮 */
		  printf("led is on !\r\n");
	  }
	  break;
	  case 'a':
	  {
		  Blue_OFF();   /* led 熄灭 */
		  printf("led is off !\r\n");
	  }
	  break;
 }

实验现象:

实验现象 我放在了 B占,有兴趣的可以看看:

STM32 串口USART 发送数据控制led亮灭


总结

下一篇文章 讲 USART 串口 中断

首先,我们需要了解一下USART串口DMA的基本概念。 USART是一种通用异步收发传输器,常用于串行通信。USART可以通过DMA传输数据,通过DMA传输数据可以减轻CPU的负担,提高系统性能。 接下来,我们来详细介绍USART串口DMA的接收和发送流程。 1. 串口DMA发送流程: (1)配置USART:首先需要配置USART的工作模式、波特率、发送数据长度等参数,并使能USART发送功能。 (2)配置DMA:配置DMA通道,设置DMA传输模式、数据长度、传输方向等参数,并使能DMA传输功能。 (3)准备数据:将要发送数据存放在发送缓冲区中。 (4)启动DMA传输:通过调用DMA传输函数启动DMA传输。 (5)等待传输完成:等待DMA传输完成,并检查传输是否成功。 2. 串口DMA接收流程: (1)配置USART:首先需要配置USART的工作模式、波特率、接收数据长度等参数,并使能USART接收功能。 (2)配置DMA:配置DMA通道,设置DMA传输模式、数据长度、传输方向等参数,并使能DMA传输功能。 (3)准备缓冲区:设置接收缓冲区,并开启接收中断。 (4)启动DMA传输:通过调用DMA传输函数启动DMA传输。 (5)等待传输完成:等待DMA传输完成,并检查传输是否成功。 (6)数据处理:当DMA传输完成后,处理接收到的数据。 以上就是USART串口DMA接收和发送流程的详细介绍。需要注意的是,在实际应用中,还需要根据具体的需求做相应的配置和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖果罐子♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值