打印
[STM32F1]

基于STM32的USART串口通信实现及代码示例

[复制链接]
1178|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Clyde011|  楼主 | 2024-10-5 16:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

最近我在项目中用到了STM32的USART功能,来实现设备间的串口通信。STM32的USART配置起来相对灵活,但也有些细节需要注意。下面我分享一下简单的USART串口通信代码,希望对刚入门的朋友有帮助。

硬件需求:
  • STM32开发板STM32F103
  • USB转TTL串口模块
  • 串口调试工具(如串口助手)

配置步骤:我主要使用STM32CubeMX来配置外设,生成基础代码。首先,我打开STM32CubeMX,进行如下配置:
  • 选择适合的芯片型号(例如STM32F103C8)。
  • 打开USART1外设,选择异步模式(Asynchronous)。
  • 设置波特率为115200(可以根据实际情况调整)。
  • 配置串口引脚,如PA9为TX,PA10为RX。
  • 生成代码。

代码实现:下面是初始化和发送字符串的代码。该代码基于HAL库,非常简单直观。
#include "stm32f1xx_hal.h"

UART_HandleTypeDef huart1;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();

  char *message = "Hello, USART1!\r\n";

  while (1)
  {
    HAL_UART_Transmit(&huart1, (uint8_t*)message, strlen(message), HAL_MAX_DELAY);
    HAL_Delay(1000); // 每秒发送一次
  }
}

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

static void MX_GPIO_Init(void)
{
  __HAL_RCC_GPIOA_CLK_ENABLE();
}

void SystemClock_Config(void)
{
  // 系统时钟配置代码...
}

void Error_Handler(void)
{
  while(1)
  {
    // 错误处理
  }
}

运行结果:当代码成功下载到STM32后,你可以通过串口助手打开相应的COM口,并将波特率设置为115200。你会看到每秒都会打印出“Hello, USART1!”的消息。
这个简单的例子展示了如何使用STM32实现基本的串口通信功能。希望对大家有帮助,后续会继续分享更多串口相关的内容。

总结:STM32的USART外设功能强大且灵活,适合用于各种通信场合。在使用过程中,大家要注意波特率、引脚配置等细节。

使用特权

评论回复
评论
LGZ888 2024-10-6 08:23 回复TA
一步一步很清楚的操作流程,很感谢。 
沙发
公羊子丹| | 2024-10-5 16:24 | 只看该作者
哇,刚好我也在折腾USART串口通信,你这代码真是及时雨啊!

使用特权

评论回复
板凳
周半梅| | 2024-10-5 16:24 | 只看该作者
看起来挺清晰的!用CubeMX确实方便不少,比手写寄存器配置舒服多了。

使用特权

评论回复
地板
帛灿灿| | 2024-10-5 16:25 | 只看该作者
哈哈,我以前一直搞不定波特率,原来可以用HAL库这么简单搞定啊。

使用特权

评论回复
5
童雨竹| | 2024-10-5 16:29 | 只看该作者
你这代码挺适合我这种刚入门的,简洁明了,受教了!

使用特权

评论回复
6
万图| | 2024-10-5 16:29 | 只看该作者
每秒发送一次 "Hello, USART1!",这个测试方式也挺直观的,学到了!

使用特权

评论回复
7
Wordsworth| | 2024-10-5 16:29 | 只看该作者
我用的是STM32F4系列的,感觉你的代码改改就能直接用了,谢谢分享!

使用特权

评论回复
8
Bblythe| | 2024-10-5 16:29 | 只看该作者
有没有尝试过用中断方式搞串口通信?听说效率更高,正在琢磨这个。

使用特权

评论回复
9
Pulitzer| | 2024-10-5 16:30 | 只看该作者
感谢!搞定了我USART的问题,果然HAL库不需要太多配置。

使用特权

评论回复
10
Uriah| | 2024-10-5 16:30 | 只看该作者
串口通信确实是基础中的基础啊,配上你这篇文章,学习起来顺畅多了。

使用特权

评论回复
11
略略u| | 2024-10-11 21:57 | 只看该作者
STM32的USART配置起来相对灵活,但也有些细节需要注意

使用特权

评论回复
12
Stahan| | 2024-10-13 21:07 | 只看该作者
hal库用起来就是方便

使用特权

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

本版积分规则

29

主题

3400

帖子

0

粉丝