Keil中 printf函数 的使用

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

一、重定向函数

        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);

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值