编译软件:MDK5.38a,调试器使用板载的ST-linkV3(速度要快很多)
一:利用STM32cubeMX配置一下,串口的初始化;
查看一下原理图:
STM32H503RB使用的串口3,引脚使用PA3,PA4引脚
ST-linkV3调试器版图:
打开STM32cubeMX软件配置一下串口3的底层驱动部分
串口3配置完成后,点击“generate code”,底层驱动就配置好了;
二:代码编写
2.1打开软件生成的工程代码,需要在main.c中添加3个文件,如下所示:
#include "stdio.h" #include "string.h" #include "stdint.h"
定义输出数组:
const uint8_t hello_str[] = "Hello EEPW & DigiKey! Hello STM32H503!\r\n";
在主函数中利用系统滴答定时器的延时功能延时500ms,通过串口3的HAL_UART_Transmit函数将数组发送出来,并通过串口工具查看一下:
编译一下代码,查看一下没有问题,演示视频如下
下面我是用printf数据出一下
首先我们需要将串口3重定义一下:
/*串口3重定义*/
int fputc(int ch, FILE *f) { HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xFFFF); return ch; }
需要注意的是:将代码写在用户区,否则再次生成的时候,代码就会被覆盖;
需要配置一下代码使用lib功能,否则printf功能不能正常实现:
主程序代码如下:
if (function == 0) { HAL_Delay(500); HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); HAL_UART_Transmit(&huart3,hello_str,sizeof(hello_str),100); } else if(function == 1) { printf(" Hello EEPW & DigiKey! Hello STM32H503!\r\n"); HAL_Delay(500); HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); HAL_Delay(500); printf(" Hello congconggege! Hello world!\r\n"); HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); HAL_Delay(500); }
这里需要将 程序功能定义为 1,
打开串口调试工具:配置串口的波特率115200,选择端口号,配置:校验位 :无校验 停止位:1位
下载验证一下功能是否正常。视频如下:
视频效果:板载LED灯以500ms时间间隔闪烁,同时输出两组不同的字符串,功能正常。