8.5 串口发送项目:轮询方式串口发送"Hello World!"

# 8.5 串口发送项目:轮询方式串口发送"Hello World!"

通过STM32F103的USART1与CH340C芯片实现基本的串口通信功能。项目实验目标为使用轮询方式控制STM32每隔1秒向电脑端发送一次字符串“Hello World!”,并通过串口调试助手验证数据接收。

# 下载源码 点击查看PDF文档

# 8.5.1 STM32CubeMx配置

# 1. 建立新工程

① 建立一个新的STM32工程;
② 选择芯片“STM32F103C8T6”;
③ 设置工程的名称为“08 USART_1”;
④ 选择SWD调试方式; ⑤ 开启外部高速时钟源并修改主频为72MHz。

# 2. 配置USART1

① 点击“Pinout&Configuration”标签页;
② 在左侧导航栏中点击“Connectivity”;
③ 双击“USART1”进行配置;
④ 选模式Mode选择“Asynchronous”。

USART1使能配置

将USART1的工作参数设置如下:

  • Baud Rate:115200
  • Word Length:8 bits
  • Parity:None
  • Stop Bits:1
  • Over Sampling:16 Samples
引脚配置图

# 3. 引脚分配

检查USART1的引脚分配:PA9(USART1_TX)自动配置为输出模式。PA10(USART1_RX)自动配置为输入模式。若引脚未自动分配,需手动右击PA9和PA10选择“USART1_TX”和“USART1_RX”功能。

引脚配置图

# 4. 生成代码

勾选生成单独外设文件,保存生成工程代码。


# 8.5.2 串口发送项目软件设计

# 1. USART初始化函数

USART初始化函数,通过结构体参数化配置硬件,实现自动寄存器计算、硬件状态同步及参数校验。

//代码清单8-2 USART初始化函数
static void MX_USART3_UART_Init(void) {
    huart3.Instance = USART1;
    huart3.Init.BaudRate = 115200;       //波特率设为115200
    huart3.Init.WordLength = UART_WORDLENGTH_8B;   //数据位长度为8
    huart3.Init.StopBits = UART_STOPBITS_1;        //停止位长度为1
    huart3.Init.Parity = UART_PARITY_NONE;         //无校验位
    huart3.Init.Mode = UART_MODE_TX_RX;            //发送接收模式
    huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;   //无硬件流控制
    huart3.Init.OverSampling = UART_OVERSAMPLING_16;
    if (HAL_UART_Init(&huart1) != HAL_OK)          //验证参数合法性
    {
        Error_Handler();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 2. 主循环发送逻辑

在main.c的while循环区插入:HAL_UART_Transmit(&huart1, (uint8_t*)"Hello World!\r\n", 13, 1000); HAL_Delay(1000); 实现每秒通过USART发送13字节数据,含1秒超时等待。

//代码清单8-3 发送函数
/* USER CODE BEGIN WHILE */
while (1) {
    //以轮询方式发送“Hello World!”
    HAL_UART_Transmit(&huart1, (uint8_t*)"HelloWorld!\r\n", 13, 1000);
    //延迟1s
    HAL_Delay(1000);
}
1
2
3
4
5
6
7
8

# 8.5.3 串口发送项目下载验证

# 1.下载步骤

ST-LINK下载器连接嵌入式学习板的烧录接口和电脑端,点击STM32CubeIDE软件开发界面中的“Run”按钮,一键完成代码程序的编译下载。

# 2.验证步骤

在本实验中,使用在微软应用商店中下载的“串口调试助手”软件作为电脑端的调试工具。选择与CH340C对应的COM端口。

串口调试助手界面

程序运行后,串口调试助手的接收区将每秒接收一次“Hello World!”字符串。

串口接收效果