STM32
直播中

张玲

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

在STM32 CUbeIDE中使用的printf重定向函数失败了是为什么?

STM32 CUbeIDE中使用的printf重定向函数失败了是为什么?

回帖(1)

李娟

2021-12-1 14:38:30
  关于STM32CubeIDE的安装和使用,我在就不多说了,有兴趣去看我上一篇博客。以前一直在使用Keil 来编程,最近换到STM32 CUbeIDE 的过程中,发现在Keil 中使用的printf重定向函数,在STM32 CUbeIDE中居然失败了,经过一番查找,发现是定义的方式和Keil有点不一样,只是添加了预处理的条件进行了选择,具体的方法如下:
1、定义方式1

  这种方式比较简单,如下定义数组,用于保存发送的数据。










1、u8定义其实就是uint8_t ,所以定义的数组为  uint8_t u_buf[64],数组大小可以自己根据实际情况定义,uint8_t 最大就是256了,但是一般来说,256就足够了。
   2、
1、u8定义其实就是uint8_t ,所以定义的数组为  uint8_t u_buf[64],数组大小可以自己根据实际情况定义,uint8_t 最大就是256了,但是一般来说,256就足够了。   
2、sprintf 把字符写入自己提前定义的 数组 **u_buf**中。
3、 __VA_ARGS__ 是一个可变参数的宏,实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。
要包含头文件, #include #include


#include
#include
extern u8 u_buf[64];  //定义的数组,保存数据
#define printf(...)  HAL_UART_Transmit((UART_HandleTypeDef *)&huart1, (uint8_t *)u_buf,
                                sprintf((char*)u_buf,__VA_ARGS__), 0xFFFF);
2、定义方式2

  这种方式就是大家常见的定义方式了,只是加了一个编译条件。不要忘记包含头文件, #include







#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif


PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1,(uint8_t*)&ch, 1, 0xFFFF);
return ch;
}
3、STM32 CubeIDE 输出小数



举报

更多回帖

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