打印
[STM32H5]

【STM32 Nucleo-64测评】+串口输出

[复制链接]
979|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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,通过串口2HAL_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位
实际输出结果:
















使用特权

评论回复
沙发
SophiaOP| | 2024-8-14 09:45 | 只看该作者
h5跟h7定位有什么不同啊

使用特权

评论回复
板凳
MessageRing| | 2024-8-14 09:52 | 只看该作者
这个重定向printf函数写法很多嘛

使用特权

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

本版积分规则

认证:工程师
简介:超越自我,为设计激发灵感和想象。

153

主题

636

帖子

3

粉丝