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

[复制链接]
3555|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库,非常简单直观。
  1. #include "stm32f1xx_hal.h"

  2. UART_HandleTypeDef huart1;

  3. void SystemClock_Config(void);
  4. static void MX_GPIO_Init(void);
  5. static void MX_USART1_UART_Init(void);

  6. int main(void)
  7. {
  8.   HAL_Init();
  9.   SystemClock_Config();
  10.   MX_GPIO_Init();
  11.   MX_USART1_UART_Init();

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

  13.   while (1)
  14.   {
  15.     HAL_UART_Transmit(&huart1, (uint8_t*)message, strlen(message), HAL_MAX_DELAY);
  16.     HAL_Delay(1000); // 每秒发送一次
  17.   }
  18. }

  19. static void MX_USART1_UART_Init(void)
  20. {
  21.   huart1.Instance = USART1;
  22.   huart1.Init.BaudRate = 115200;
  23.   huart1.Init.WordLength = UART_WORDLENGTH_8B;
  24.   huart1.Init.StopBits = UART_STOPBITS_1;
  25.   huart1.Init.Parity = UART_PARITY_NONE;
  26.   huart1.Init.Mode = UART_MODE_TX_RX;
  27.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  28.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  29.   if (HAL_UART_Init(&huart1) != HAL_OK)
  30.   {
  31.     Error_Handler();
  32.   }
  33. }

  34. static void MX_GPIO_Init(void)
  35. {
  36.   __HAL_RCC_GPIOA_CLK_ENABLE();
  37. }

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

  42. void Error_Handler(void)
  43. {
  44.   while(1)
  45.   {
  46.     // 错误处理
  47.   }
  48. }

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

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

评论

一步一步很清楚的操作流程,很感谢。  发表于 2024-10-6 08:23
公羊子丹 发表于 2024-10-5 16:24 | 显示全部楼层
哇,刚好我也在折腾USART串口通信,你这代码真是及时雨啊!
周半梅 发表于 2024-10-5 16:24 | 显示全部楼层
看起来挺清晰的!用CubeMX确实方便不少,比手写寄存器配置舒服多了。
帛灿灿 发表于 2024-10-5 16:25 | 显示全部楼层
哈哈,我以前一直搞不定波特率,原来可以用HAL库这么简单搞定啊。
童雨竹 发表于 2024-10-5 16:29 | 显示全部楼层
你这代码挺适合我这种刚入门的,简洁明了,受教了!
万图 发表于 2024-10-5 16:29 | 显示全部楼层
每秒发送一次 "Hello, USART1!",这个测试方式也挺直观的,学到了!
Wordsworth 发表于 2024-10-5 16:29 | 显示全部楼层
我用的是STM32F4系列的,感觉你的代码改改就能直接用了,谢谢分享!
Bblythe 发表于 2024-10-5 16:29 | 显示全部楼层
有没有尝试过用中断方式搞串口通信?听说效率更高,正在琢磨这个。
Pulitzer 发表于 2024-10-5 16:30 | 显示全部楼层
感谢!搞定了我USART的问题,果然HAL库不需要太多配置。
Uriah 发表于 2024-10-5 16:30 | 显示全部楼层
串口通信确实是基础中的基础啊,配上你这篇文章,学习起来顺畅多了。
略略u 发表于 2024-10-11 21:57 来自手机 | 显示全部楼层
STM32的USART配置起来相对灵活,但也有些细节需要注意
Stahan 发表于 2024-10-13 21:07 | 显示全部楼层
hal库用起来就是方便
您需要登录后才可以回帖 登录 | 注册

本版积分规则

159

主题

5916

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部