STM32
直播中

张桂兰

7年用户 1291经验值
私信 关注
[问答]

请问stm32cubeMX如何实现类似printf的功能?

请问STM32cubeMX如何实现类似printf的功能?

回帖(1)

周梦斌

2021-12-2 15:09:39
本程序编写基于秉火霸道STM32F103ZET6运行环境。





USB DFU(Download Firmware Update)固件更新
在这篇文章里我们已经知道,当PD3为低电平的时候,USB接口供电,即可用,这一点在上一篇文章已经讲解了,我们在STM32CubeMX把这个管脚默认拉低即可。
1、STM32CubeMX配置

1.1、USB使能






1.2、时钟











1.3、调试接口






1.4、USB设备











1.5 生成Keil工程












2、编写程序,实现类似printf的功能


2.1、添加打印函数

打开u***d_cdc_if.c这个文件,然后在用户代码编写区添加打印函数:
void u***_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);}注意,这里我们用到了可变参,所以需要添加头文件#include
然后在u***d_cdc_if.h记得对u***_printf进行声明。

/* USER CODE BEGIN EXPORTED_FUNCTIONS */void u***_printf(const char *format, ...);/* USER CODE END EXPORTED_FUNCTIONS */
2.2、调用打印函数

接下来在main函数的while(1)中调用u***_printf,注意需要包含u***d_cdc_if.h头文件
int main(void){         //略....          while (1)          {            /* USER CODE END WHILE */                    /* USER CODE BEGIN 3 */                        u***_printf("Hello USB VCOMn");                        HAL_Delay(1000);          }           //略....  }





然后我们打开串口调试助手,这里我用的是sscom:





可以看到数据已经在打印了。
至此USB CDC功能验证成功!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分