8. 利用PY32Studio+HAL库开发printf函数

发布时间:2026/10/2 7:14:31
8. 利用PY32Studio+HAL库开发printf函数 前言上一章利用UART实现了数据收发的功能我们在学习C语言时经常用printf函数用于程序调试但是MCU是无法直接用这个函数的。所以我们通过改写函数将 printf 重定向 到串口之上然后通过串口调试助手来显示。一、功能通过printf函数直接将文本通过UART1串口输出。二、硬件通过USB转TTL模块连接PC与Startkit板, Startkit板与USB转TTL模块的连线方式如下Startkit 开发板USB转TTL模块Tx(PA0)RxRx(PA1)TxGNDGND三、原理printf底层会调用fputc输出单个字符我们重定向这个函数把字符通过 UART 发送出去就可以串口打印。#include stdio.h // 重定向fputcprintf最终调用这个函数输出单个字符 int fputc(int ch, FILE *f) { // 阻塞发送1个字节huart1串口句柄按需改成其他的串口句柄超时时间设为1000避免长时间阻塞 HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, 1000); return ch; }使用直接printf(Hello world, val %d\r\n, 123);缺点HAL_UART_Transmit是阻塞式大量打印会卡住程序不要在中断回调函数调用否则会占用大量时间。四、PY32Studio配置4.1 创建一个新工程首先用PY32Studio创建一个F032_PRINTF的新工程。4.2 配置时钟在芯片视图中点击时钟视图在时钟视图中选择HSI为时钟源配置PLL_MULx9SYS_SELPLL系统时钟为72MHz.4.3 配置UART1第一步配置完时钟后配置UART1的参数激活UART1配置UART1的参数波特率115200停止位1数据长度8位奇偶校验无。第二步点击生成工程五、编写应用代码5.1 应用代码在PY32Studio生成的代码的基础上添加以下代码在uart.c文件中包括下面头文件/* USER CODE BEGIN Includes */ #include stdio.h /* USER CODE END Includes */在uart.c文件中重写fputc()函数:/* USER CODE BEGIN ExternalFunctions */ int fputc(int ch, FILE *f) { HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, 1000); //阻塞式发送超时时间设为10001s return ch; } /* USER CODE END ExternalFunctions */在main.c文件添加一个test_value的变量在While(1)循环中调用printf函数发送test_value的值并对test_value加1。int main(void) { /* USER CODE BEGIN 1 */ uint16_t test_value 0; //测试数据 /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ Studio_RCC_Init(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ Studio_GPIO_Init(); Studio_UART1_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while(1) { printf(testvalue %d\r\n,test_value); //打印测试数据 test_value; //测试数据加1 HAL_Delay(1000); //延时1000ms /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }5.2 设置在选项卡中选择安装的编译器版本和Debug类型。5.3 编译下载点击编译图标开始编译程序编译成功后开始下载程序下载成功后开始调试程序5.4调试点击调试图标进入调试界面运行程序。打开串口调试助手在端口名中选择对应的对口名称并设置波特率数据位校验位停止位。打开端口可以观察到MCU发送过来的数据。六、总结本章内容我们重写了fputc函数并通过printf函数打印数据。后面的练习中可以利用这个printf函数更方便地调试程序。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询