本帖最后由 meiyaolei 于 2024-8-10 23:26 编辑
以下是一个基于STM32CubeMX和MDK-ARM(Keil uVision 5.38a)的详细步骤,用于配置串口2(USART2)并使用PA3和PA4作为TX(发送)和RX(接收)引脚,同时实现printf重定向到串口输出。
步骤 1: STM32CubeMX配置
打开STM32CubeMX:启动STM32CubeMX软件。
创建新项目:选择“MCU/MPU Selector”标签页,搜索并选择STM32H533RB芯片,然后点击“Start Project”。
配置时钟:在“Pinout & Configuration”界面中,确保系统时钟(Clock Configuration)被正确设置以满足你的应用需求。这通常涉及配置HSI、HSE、PLL等。
配置USART2:
在“Pinout & Configuration”界面的右侧,找到“Connectivity” -> “USART2”。
点击USART2将其添加到项目中。
在Pinout视图中,确保USART2的TX(发送)连接到PA3,RX(接收)连接到PA4(尽管对于调试输出,RX通常不被使用)。
在USART2的配置界面中,设置波特率(如115200)、数据位(8位)、停止位(1位)、无奇偶校验等。
配置NVIC(如果需要中断):如果计划使用中断来处理串口数据,需要在NVIC设置中启用USART2的中断。
配置GPIO:确保PA3和PA4被配置为USART2的TX和RX功能。
项目设置:在“Project” -> “Project Settings”中,配置项目名称、选择MDK-ARM作为IDE,并设置合适的项目路径。
生成代码:点击“Project” -> “Generate Code”生成MDK-ARM项目。
步骤 2: MDK-ARM(Keil uVision)配置
打开项目:在Keil uVision中打开STM32CubeMX生成的项目。
重定向printf:为了将printf输出重定向到USART2,你需要添加一些代码。这通常涉及到重写fputc函数。
在usart.c(或你的串口驱动文件)中添加以下代码:
#include <stdio.h>
int fputc(int ch, FILE *f)
{
// 假设HAL_UART_Transmit是串口发送函数,USART2_Handler是你的串口句柄
HAL_UART_Transmit(&USART2_Handler, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
return ch;
}
解析一下:
串口2配置完成后,点击“generate code”,底层驱动就配置好了;
代码编写
首先串口时钟使能,GPIO时钟使能: __HAL_RCC_USART2_CLK_ENABLE();
GPIO端口模式设置: __HAL_RCC_GPIOA_CLK_ENABLE();
串口参数初始化:HAL_UART_Init(&huart2)
开启中断并且初始化 HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USART2_IRQn);
使能串口:
编写串口发送函数:重映射PRINTF 函数进行数据的发送。
打开软件生成的工程代码,需要在main.c中添加3个文件:
#include "stdio.h" #include "string.h" #include "stdint.h"
定义输出数组:const uint8_t OUTPUT_str[] = "HelloSTM32! Hello STEVE! Hello STM32H533!\r\n"; 主函数中使用系统滴答定时器延时500ms,通过串口2的HAL_UART_Transmit函数将数组发送出来,并通过串口工具查看一下: 下载代码前配置一下KEIL: 主程序代码如下:
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(500);
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
HAL_UART_Transmit(&huart1,OUTPUT_str,sizeof(OUTPUT_str),100);
}
打开串口调试工具:
配置串口的波特率115200,选择端口号,配置:校验位 :无校验 停止位:1位
实际输出结果:
|