为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);
}