STM32 Cubemx Printf重定向

1.对于版本比较低的STM32CubeMX(比如V4.25.0),生成的工程缺少syscall.c文件。将syscall.c文件复制到startup目录下,而新版本的STM32CubeMX(V5.6.0)会自动生成syscall.c文件,在Src文件夹下。

2.添加必须要的代码段:

 1 /* Private function prototypes -----------------------------------------------*/
 2 void SystemClock_Config(void);
 3
 4 /* USER CODE BEGIN PFP */
 5 /* Private function prototypes -----------------------------------------------*/
 6 #ifdef __GNUC__
 7 #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
 8 #else
 9 #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
10 #endif
11 /* USER CODE END PFP */
12
13 /* USER CODE BEGIN 4 */
14 /*retargets the C library printf function to the USART*/
15 PUTCHAR_PROTOTYPE
16 {
17   HAL_UART_Transmit(&huart1,(uint8_t*)&ch, 1, 0xFFFF);
18   return ch;
19 }
20 /* USER CODE END 4 */

3.属性设置,添加链接标识用于打印浮点型数据  -u _printf_float

4.Printf 一定要带上 \r\n, 不然无法输出打印信息。

原文地址:https://www.cnblogs.com/mickey-double/p/12515270.html

时间: 2024-10-28 11:18:19

STM32 Cubemx Printf重定向的相关文章

stm32系列单片机之printf重定向

在程序的调试过程中,除了那些高大上的调试手段外,printf无疑是我们最熟悉最顺手的调试方法.通过使用printf,我们可以很方便很直观的获取当前程序的运行状态. printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息.但是在单片机开发中,一般情况下并不存在标准输出设备,因此我们需要将printf的输出信息重定向,也就是输出到其他输出设备中去. 在stm32平台上实现重定向的方式有两种,重定向至UART ,或者通过JTAG的SW模式将printf重定向至SWO引脚输出.

STM32 CubeMX 学习:001-GPIO的使用

背景 在上一讲STM32 CubeMX 学习:搭建开发环境中,我们已经利用CubeMx搭建了可编译的工程. 今天就开始来介绍STM32 GPIO的有关知识,以及如何驱动它. HOST-OS : Windows-10 STM32 Cube :v5.6 MCU : STM32F429 LIB : stm32cube_fw_f4_v1250 知识 在STM32中,GPIO有这些属性:输入.输出.复用功能:也可以设置速度,上下拉,推挽开漏等电器特性. 在Drivers/STM32F4xx_HAL_Dri

STM32 的 printf() 函数串口重定向(HAL库标准库都适用)

1.建立工程 2.核心:添加新文件usar_fputc.c (名字随便自己命名),把文件添加到项目中去 #include "stdio.h" #include "stm32f1xx_hal.h" extern UART_HandleTypeDef huart1; uint8_t ch; uint8_t ch_r; //重写这个函数,重定向printf函数到串口 /*fputc*/ int fputc(int c, FILE * f) { ch=c; HAL_UART

关于<printf重定向到串口导致程序无法运行>的问题

摘自:http://www.openedv.com/posts/list/3172.htm usart这部分代码我也是从网上copy出来的,一下是作者的解释:简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用semihosting(半主机模式), 标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数. 例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下: #ifdef __GNU

基于STM32F030F4P9和STM32 CUBEMX 输出PWM波形

STM32F030F4P9定时器功能比较丰富,在此记录项目中使用其自动输出PWM波形(频率:50HZ).CubeMX配置定时器如下图说明. 在此定时器基础时钟为48MHZ,配置中不做分频处理,预分频系数为48,定时器计数器寄存器为20000,可求得周期为: T = ( ( 1 / (48Mhz / 48) ) * 20000) = 20ms 在PWM输出配置选项中,改变Pulse可改变PWM的占空比.CH Polarity配置当计数器中的值小于Pulse时,输出高电平, CH Idle Stat

STM32 CubeMX如何生成微秒(us)级延时

会自动在tim.c里面生成代码,如下: /* Includes ------------------------------------------------------------------*/#include "tim.h" /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ TIM_HandleTypeDef htim17; /* TIM17 init function */void MX_TIM17_Init(void){ htim1

STM32 CubeMX 中如何查看系统时钟

uint32_t sysclock = 0; sysclock = HAL_RCC_GetSysClockFreq(); 这样就可以在线仿真时看sysclock了,这些函数都在rcc这个库里面,还可以查看时钟树上其他总线上的时钟.

stm32 cubemx hal 工程中 微秒延迟 delay_us

参考的正点原子的代码 测试平台 stm32f429i-disco 配了一个gpio 时钟 gpio /* USER CODE BEGIN 0 */ typedef uint8_t u8; typedef uint32_t u32; u8 fac_us; void delay_init(u8 SYSCLK) { #if SYSTEM_SUPPORT_OS //?????? OS. u32 reload; #endif HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKS

一步步学习操作系统(2)——在STM32上实现一个可动态加载kernel的"my-boot"

如果要做嵌入式Linux,我们首先要在板子上烧写的往往不是kernel,而是u-boot,这时需要烧写工具帮忙.当u-boot烧写成功后,我们就可以用u-boot附带的网络功能来烧写kernel了.每当板子上电时,u-boot一般会被加载到内存的前半段,如果我们的kernel之前就已经被烧写到开发板了,那么u-boot会加载kernel到内存的后半段并跳转到kernel的起始地址处执行(或者直接跳转到kernel的起始地址处执行,如果kernel可以直接在flash上执行的话.) 如上图所示,绿