[STM32F1]

如何在STM32 MCU上实现UART串口通信——代码示例

[复制链接]
574|9
手机看帖
扫描二维码
随时随地手机跟帖
Clyde011|  楼主 | 2024-10-4 16:58 | 显示全部楼层 |阅读模式
在使用STM32系列的微控制器时,UART(通用异步收发传输)是最常用的通信方式之一。在项目中,UART可以帮助我们与其他设备进行数据传输,比如调试、传感器数据获取、模块通信等。今天,我将分享一个基于STM32的简单UART通信代码,帮助大家更好地理解其应用。

硬件配置:
  • STM32F103C8T6(蓝色小板)
  • 串口工具(USB转TTL模块)
  • ST-LINK调试器

UART初始化
我们可以通过STM32的HAL库来初始化UART。在CubeMX中选择USART作为串口,并配置波特率、数据位、停止位、校验方式等。以下是配置的初始化代码:
#include "stm32f1xx_hal.h"

UART_HandleTypeDef huart1;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
<h3>代码解释:</h3><ol><li><strong>初始化UART:</strong> 通过HAL库,我们首先初始化USART1作为串口通信工具,波特率设为115200。</li><li><strong>发送数据:</strong> 代码中每隔一秒发送一串数据 <code>"Hello, STM32 UART!\r\n"</code>。</li><li><strong>接收数据:</strong> 在接收部分,代码等待接收10个字节的数据,然后将其直接回传给发送端。</li><li><strong>延时:</strong> 使用<code>HAL_Delay()</code>函数每隔1秒进行数据通信。</li></ol><h3>运行效果:</h3><p>将STM32与串口工具连接后,可以在串口调试助手中查看发送的字符串,同时如果发送任意数据给STM32,它将会直接回传给你。</p><h3>总结:</h3><p>这个简单的UART通信示例展示了如何在STM32 MCU上实现基本的数据收发功能。通过调整波特率、数据长度和接收模式,我们可以轻松扩展这个代码用于更复杂的项目中,比如与传感器模块的通信等。</p>希望这个例子能帮助大家更好地理解STM32的UART通信实现!static void MX_USART1_UART_Init(void);

int main(void)
{
  // 初始化
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();

  uint8_t txData[] = "Hello, STM32 UART!\r\n";
  uint8_t rxData[10];

  // 无限循环
  while (1)
  {
    // 发送数据
    HAL_UART_Transmit(&huart1, txData, sizeof(txData)-1, HAL_MAX_DELAY);
   
    // 接收数据
    HAL_UART_Receive(&huart1, rxData, 10, HAL_MAX_DELAY);
   
    // 将接收到的数据回传
    HAL_UART_Transmit(&huart1, rxData, 10, HAL_MAX_DELAY);

    // 延迟1秒
    HAL_Delay(1000);
  }
}

// USART1初始化函数
static void MX_USART1_UART_Init(void)
{
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
}

代码解释:
  • 初始化UART: 通过HAL库,我们首先初始化USART1作为串口通信工具,波特率设为115200。
  • 发送数据: 代码中每隔一秒发送一串数据 "Hello, STM32 UART!\r\n"。
  • 接收数据: 在接收部分,代码等待接收10个字节的数据,然后将其直接回传给发送端。
  • 延时: 使用HAL_Delay()函数每隔1秒进行数据通信。

运行效果:
将STM32与串口工具连接后,可以在串口调试助手中查看发送的字符串,同时如果发送任意数据给STM32,它将会直接回传给你。

总结:
这个简单的UART通信示例展示了如何在STM32 MCU上实现基本的数据收发功能。通过调整波特率、数据长度和接收模式,我们可以轻松扩展这个代码用于更复杂的项目中,比如与传感器模块的通信等。

希望这个例子能帮助大家更好地理解STM32的UART通信实现!

使用特权

评论回复
公羊子丹| | 2024-10-4 16:59 | 显示全部楼层
这段代码写得很清楚,我也正好在用STM32做串口通信,这太实用了!

使用特权

评论回复
周半梅| | 2024-10-4 16:59 | 显示全部楼层
哇!刚测试了一下,运行得很顺利,串口通信成功!感谢分享!

使用特权

评论回复
帛灿灿| | 2024-10-4 17:00 | 显示全部楼层
一直对UART不太熟,这个示例真的太友好了,直接拿来就能用!

使用特权

评论回复
童雨竹| | 2024-10-4 17:00 | 显示全部楼层
感谢!我调试了好久的UART,这下终于明白怎么用STM32配置了!

使用特权

评论回复
万图| | 2024-10-4 17:00 | 显示全部楼层
你这个代码简直是救星,项目卡在串口上了,看到你这个帖子总算搞定了!

使用特权

评论回复
Wordsworth| | 2024-10-4 17:01 | 显示全部楼层
CubeMX配置后还真得靠代码实现才能弄明白,多谢详细示例!

使用特权

评论回复
Bblythe| | 2024-10-4 17:01 | 显示全部楼层
哈哈,我用的是F103的蓝板,跟你的配置一模一样,运行成功!

使用特权

评论回复
Pulitzer| | 2024-10-4 17:01 | 显示全部楼层
STM32的HAL库用起来真方便,之前一直觉得UART麻烦,学到了!

使用特权

评论回复
Uriah| | 2024-10-4 17:01 | 显示全部楼层
回传数据的部分好用!我正好需要测试模块的双向通信。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

3374

帖子

0

粉丝