IAR for STM8 的 编译器 对Printf 的格式输出不支持吗

2025-03-10 21:39:04
推荐回答(1个)
回答1:

  1: 一定一定要在主程序中加入 STDIO.H
2:putchar()要重新定义
3:串口波特率 115200 8 NO 1形式
4: 编译器library 选型中 选择FULL
5:如果实验以上还是不行,还有一个方法就是自己来写printf函数!

以下是网上摘抄的的printf函数,经过测试,完全可以用!

#include "stm8s.h"
#include
#include
#include //itoa()......库中没有
#include //memset()

#include
#include
#define TRUE 1
#define FALSE 0
//#include
#define MAXBUF 15

#define DEFAULT_PRECI 3 //符点型默认精度

/*
由于不同的编译器 putcha 和 getchar 形参和返回值略有不同。
因此此处采用宏定义的方式区别。

_RAISONANCE_ 和 _COSMIC_ 这2个宏是由编译器自动添加的预编译宏
*/
#ifdef _RAISONANCE_
#define PUTCHAR_PROTOTYPE int putchar (char c)
#define GETCHAR_PROTOTYPE int getchar (void)
#elif defined (_COSMIC_)
#define PUTCHAR_PROTOTYPE char putchar (char c)
#define GETCHAR_PROTOTYPE char getchar (void)
#else /* _IAR_ */
#define PUTCHAR_PROTOTYPE int putchar (int c)
#define GETCHAR_PROTOTYPE int getchar (void)
#endif /* _RAISONANCE_ */

/*
*********************************************************************************************************
* 函 数 名: putchar
* 功能说明: 重定义 putchar 函数, 这样可以使用printf函数从串口1打印输出
* 形 参: 等待发送的字符
* 返 回 值: 返回已发送的字符
*********************************************************************************************************
*/
PUTCHAR_PROTOTYPE
{
/* 发送一个字符 c 到UART1 */
UART2_SendData8(c);

/* 等待发送完毕 */
while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET);
//while (UART2_GetFlagStatus(UART2_FLAG_TC) == RESET);

return (c);
}

/*
*********************************************************************************************************
* 函 数 名: getchar
* 功能说明: 重定义C库中的 getchar 函数,这样可以使用scanff函数从串口1输入数据
* 形 参: 无
* 返 回 值: 返回已读到的字符
*********************************************************************************************************
*/
GETCHAR_PROTOTYPE
{
#ifdef _COSMIC_
char c = 0;
#else
int c = 0;
#endif

/* 等待新数据到达 */
while (UART2_GetFlagStatus(UART2_FLAG_RXNE) == RESET);

/* 读取数据寄存器 */
c = UART2_ReceiveData8();

return (c);
}