最近我在项目中用到了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外设功能强大且灵活,适合用于各种通信场合。在使用过程中,大家要注意波特率、引脚配置等细节。
|
一步一步很清楚的操作流程,很感谢。