Keil中 printf函数 的使用

本文介绍了如何在Keil环境下使用printf函数并通过fputc重定向数据至串口,以及如何利用FireWater协议在VOFA+上位机上显示波形,包括注意事项如同时发送多个变量的技巧。

 /**** 该文章只是个人的一些总结,是对自我提升的一种手段,如有错误欢迎各位指出,如果有幸能解决大家的问题那就再好不过了。****/

一、重定向函数

        printf函数是C语言中用来打印数据的函数,但在Keil中是不能直接调用的。

        与C语言中的使用相同的是,调用printf函数必须引用<stdio.h>头文件。调用printf函数后,系统又会调用更底层的 fputc() 函数(putchar函数),故若要在Keil中使用printf函数,我们必须人为实现fputc() 函数(putchar函数)。

        具体代码的实现如下:

/********STC15********/
char putchar(char ch)
{
    SBUF = ch;
    while(TI == 0);
    TI = 0;
    return ch;
}

/********STM32********/
void Send_Byte(uint8_t dat)
{
    USART_SendData(USART1,dat);
	while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);	
}

int fputc(int ch,FILE *f)
{
    Send_Byte(ch);
    return ch;
}

         该函数也被称作重定向函数,printf()函数默认将数据打印在屏幕上,与C语言不同,由于单片机没有屏幕,所以需要用 fputc() 函数对数据进行重定向,将数据重定向到串口发送。每调用一次printf()函数,系统进一步调用 fputc() 函数,从而数据通过串口输出。此函数无需调用,只需写在程序中,但必须写下该函数printf函数才能正常运行。

二、利用printf函数发送数据至VOFA+上位机

        使用VOFA+时选用的是FireWater协议,该协议是使用最简单的协议。

        使用该协议时,协议规定必须在发送的数据后加上换行符 ' \n '。

        "<any>:ch0,ch1,ch2,...,chN\n"

  • any和冒号可以为空,但换行(\n)不可省略;
  • any不可以为"image",这个前缀用于解析图片数据;
  • 此处\n为换行,并非指字符斜杠+字符n;
  • \n也可以为\n\r,或\r\n。

        完成以上操作后,即可在VOFA+上看到正常显示的波形。若要同时显示多个变量的数据波形呢?此处需要注意打印多个数据不能多次调用printf函数来发送不同数据,只能在一个printf函数中同时发送多个变量。

具体代码如下:

printf("%f,%f\n",(float)count_2,(float)sum_2);

### STM32 使用 Keil5 中 `printf` 函数打印中文时出现乱码的解决方案 当在 STM32 开发环境中使用 `printf` 打印中文字符时,如果遇到乱码问题,通常是因为编码不匹配造成的。具体来说,开发环境(如 VSCode 或其他编辑器)使用的 UTF-8 编码与编译工具链(如 Keil MDK)默认采用的 ANSI 编码之间存在差异。 为了有效解决这一问题,可以采取以下措施: #### 方法一:更改源文件编码格式 通过调整源文件的编码格式来确保一致性和兼容性是一个有效的办法。可以通过简单的操作实现这一点: 1. **保存并转换文件编码** 将项目中的所有涉及中文字符的 C 文件用记事本或其他文本编辑器打开,并将其编码方式设置为 ANSI 后再覆盖保存原有文件[^2]。 ```cpp // 示例代码片段展示如何正常显示中文字符串 char const* greeting = "你好"; printf("%s, 这里是测试消息。\r\n", greeting); ``` 这种方法简单易行,适用于小型项目或单次处理需求;但对于大型复杂工程项目而言可能不够高效便捷。 #### 方法二:配置 Keil 工程属性支持多字节字符集(MBCS) 另一种更为推荐的做法是在 Keil IDE 内部进行相应设定以适应不同语言环境下编程的需求——即启用 MBCS 支持功能。这一步骤能够从根本上消除由于平台间编码标准差异所带来的困扰。 进入 Project -> Options for Target 'Target 1'... 菜单项下的 C/C++ 选项卡中找到 Preprocessor Symbols 部分,添加 `_MBCS` 定义[^4]: ![image](https://example.com/image.png) 此方法不仅解决了当前项目的中文乱码难题,还提高了整个工作流程的一致性和稳定性,尤其适合长期维护和技术积累较多的企业级应用场合。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值