STM32Cube串口USART发送接收数据

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

前言


这篇文章介绍 实现 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。

91bfb95d8dab8cfeb95a2fb122a06df.png

三、CubeMX 创建工程


选择芯片。

c0012d4db7fe2806de49c70239ae049.png

选择 Debug 模式

0f68bca94d9d0b69a1f38d5cafb9fff.png

选择外部时钟

41093917a7685d72da7891c85ed9f24.png

配置系统时钟,在 红框中输入 72 ,然后点击 回车 两次,即可配置好

75cbad2da5fc149d91001668a4ade01.png

设置 io 端口

6d916adc184d37867039e501e8fbf5c.png

设置为 异步通信。

13ee025928ffaa06d0d364a6bb9a33c.png

可 重新设置名字

74bd02b85d5ffa7afcd6348ed049e08.png

设置工程模式和版本

56e5df05e928664c57d2c919f116450.png

选取加入.c /.h文件(便于编写代码)

4ccd3ee707e93cd8b8a629c482a74f4.png

创建工程

7370d8dafe74828564fc8e513f66dc9.png

然后 打开工程,可以看到我们的 usart.c , usart.h

a85e2117b90ecebf2e61af166b75a17.png

四、usart.c 文件解析


使用 UART_HandleTypeDef 结构体 定义变量具象 USART 对象。huart1 在 usart.h 中被定义。a632c04bf2c8e349479563af4dc8ace.png


使用 MX_USART1_UART_Init 设置 USART1 的参数(波特率,数据位长度,奇偶校验位等)

使用 HAL_UART_Init() 初始化结构体变量,完成对该 USART 外设的初始化。

5ff1f2598e888f034cf4680d77ae04c.png

在 HAL_UART_MspInit( ) 函数中完成对 时钟 的 使能 和 GPIO/DMA 等的配置。

fa9a91bbfe094bd96f1cbc66a6995c0.png

关闭使能。

fa99e8a199fd727f311f19b1368f8c1.png

五,设计实验:


在 串口输入字符点亮led

在 串口 输入 ’ A ',则 led 点亮。

在 串口 输入 ’ a ',则 led 熄灭。

串口发送函数

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;
}


控制 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 串口 中断。


相关文章
|
5月前
|
传感器
【STM32】I2C练习,SHT3X温度传感器的数据读取
【STM32】I2C练习,SHT3X温度传感器的数据读取
|
3月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
566 0
|
3月前
STM32CubeMX 串口收发一帧数据
STM32CubeMX 串口收发一帧数据
49 9
|
3月前
|
芯片
STM32CubeMX 串口数据收发
STM32CubeMX 串口数据收发
106 2
|
3月前
|
监控
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
179 0
|
3月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
135 0
|
4月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
353 2
|
5月前
|
传感器
STM32标准库ADC和DMA知识点总结-1
STM32标准库ADC和DMA知识点总结
|
4月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
468 4