如何在STM32CubeMX下为STM32工程配置调试打印功能

为STM32工程配置调试打印功能

一、配置调试用的打印串口

c 复制代码
#include <stdio.h>		//标准输入输出库

//1.在STM32CubeMX中打开并配置好某串口设备;
//2.在main.c文件中添加如下代码行对输入输出重定向;
//3.在文件开头包含stdio.h头文件。
#pragma import(__use_no_semihosting)
struct __FILE
{
    int a;
};

FILE __stdin, __stdout;

void _sys_exit(int x)
{
    
}

//printf函数的父类函数
int fputc(int ch, FILE *f)
{
    //调试串口的发送函数
    HAL_UART_Transmit(&husart?, (uint8_t *)&ch, 1, 10);
    return ch;
}

//scanf函数的父类函数
int fgetc(FILE *f)
{
    uint8_t ch = 0;
    //调试串口的接收函数
    HAL_UART_Receive(&husart?, (uint8_t *)&ch, 1, 10);
    return (int)ch;
}

二、配置USB作为虚拟打印端口

c 复制代码
#include <stdarg.h>

//1.在STM32CubeMX中配置好RCC(HCLK = 72MHz)、打开USB功能,
//2.在中间件和软件包菜单项里,勾选USB_DEVICE,并选择工作模式为
//   Communication Device Class(Virtual Port Com)
//3.生成代码后,工程文件中会自动生成usb_device.c、usbd_desc.c
//  以及usbd_cdc_if.c三个文件,我们需要在usbd_cdc_if.c文件末尾
//  添加如下usb打印函数,以后就是用该打印函数进行调试输出
//4.记得在开头包含头文件stdarg.h
void usb_printf(const char *format, ...)
{
    va_list args;
    uint32_t length;
    
    va_start(args, format);
    length = vsnprintf((char *)UserTxBufferFS, 
                       APP_TX_DATA_SIZE, 
                       (char *)format, args);
    va_end(args);
    CDC_Transmit_FS(UserTxBufferFS, length);
}
相关推荐
俊基科技2 小时前
A-59U工业级多模语音处理模块在矿山矿井通信与呼叫报警系统中的应用
嵌入式硬件·嵌入式开发·硬件开发·ai降噪·回音消除·拾音降噪
周周记笔记4 小时前
GD32F450xx MCU Datasheet 解读:硬件测试工程师的测试方法论
单片机·嵌入式硬件
潘潘的嵌入式日记6 小时前
I²C 从机接收总被覆盖?双缓冲要在 STOP 时交接
c语言·开发语言·单片机
AOI小白新手上路7 小时前
江科协51单片机16-1 AD/DA ADC 三通道综合显示(LCD1602 版)改造说明
单片机·嵌入式硬件·51单片机
HUI-4748 小时前
EG1135|SSOP‑16 同步整流降压控制器,大功率外置 MOS 降压优选
单片机·嵌入式硬件·硬件工程
单片机仿真设计9 小时前
【proteus仿真】基于 STM32 单片机恒温箱控制系统设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
国科安芯9 小时前
星载CAN总线通信网络中抗辐射MCU的通信可靠性设计分析
网络·人工智能·分布式·单片机·嵌入式硬件·架构
新晨单片机设计10 小时前
S003A-基于STM32单片机温度计(数码管显示)【Proteus仿真+Keil程序+原理图】
stm32·单片机·stm32单片机功能定制
一条破秋裤10 小时前
TIM 输入捕获与 PWMI:从边沿到频率、占空比
笔记·stm32·学习
AOI小白新手上路10 小时前
江科协51单片机16-1 DA数模转换实验(PWM 呼吸灯)
单片机·嵌入式硬件·51单片机