NO.1 QN9021 Printf重定向

本章主要介绍如何使用#include "stdio.h"头文件里的标准打印函数,这里用到的是printf重定向的知识,简单的理解就是 stdio.h头文件通过调用 QN9021上的串口来实现自身Prinf函数的功能。

下面是一简单的打印示例:

打印示例
char Hello_0 = 'a';
char Hello_1 = 255;
char Hello_2 = 255; 
char Hello_3[20] = "Hello NXP QN9021!" ;

printf("Hello NXP QN9021!\r\n");
printf("Hello_0 = %c\r\n",Hello_0 );//打印字符
printf("Hello_1 = %d\r\n",Hello_1 );//打印十进制的整数
printf("Hello_2 = 0x%x\r\n",Hello_2 );//打印十六进制数
printf("Hello_3 = %s\r\n",Hello_3 );//打印字符串

因为在官方的SDK中是无法使用printf的,需要我们自己来重定向一下才能使用

官方提供的打印函数比较简单,这里也介绍一下,如下所示:

uart_printf(QN_UART0, (uint8_t *)"Hello NXP !\r\n");

这个函数只能打印字符串数据,无法像printf可以带参数打印,非常不方便调试,所以反向证明实现printf这个打印函数对于后续程序的调试是非常重要的

那么怎么实现printf打印函数呢?

第一步:在main文件下编写fpuc函数,因为执行printf会调用此函数,咱们将串口通道通过此函数传送给printf函数,这样printf打印函数就可以将我们想要打印的数据通过串口输出,我们再用PC的串口工具对其进行接收,如此QN9021的printf函数的通道就成功打通了.

fpuc函数如下:

int fputc(int ch, FILE *f)
{
    UartPutc((uint8_t) *&ch);
    return ch;
}

第二步:在keil IDE下把魔法棒中的Use MicroLIB这个选项勾选,代表我们要使用这个微型库来实现我们的printf打印函数

这里我贴一下我整个main文件的源码:

#include "uart.h"
#include "timer.h"
#include "system.h"
#include "stdio.h"

DEVICE_CONTEXT  g_Context;

int fputc(int ch, FILE *f)
{
    UartPutc((uint8_t) *&ch);
    return ch;
}

//extern void Uart_Process(void);
/**
 * @brief Uart example
 */
int main (void)
{
	char Hello_0 = 'a';
	char Hello_1 = 255;
	char Hello_2 = 255; 
	char Hello_3[20] = "Hello NXP QN9021!" ;

    SystemInit();
	timer_init(QN_TIMER0,NULL);		//初始化串口0
    uart_init(QN_UART0, __USART_CLK, UART_115200);
	
    uart_tx_enable(QN_UART0, MASK_ENABLE);
    uart_rx_enable(QN_UART0, MASK_ENABLE);
	uart_rx_int_enable(QN_UART0, MASK_ENABLE);
    uart_printf(QN_UART0, (uint8_t *)"Hello NXP!\r\n");

	printf("Hello NXP QN9021!\r\n");
	printf("Hello_0 = %c\r\n",Hello_0 );//打印字符
	printf("Hello_1 = %d\r\n",Hello_1 );//打印十进制的整数
	printf("Hello_2 = 0x%x\r\n",Hello_2 );//打印十六进制数
	printf("Hello_3 = %s\r\n",Hello_3 );//打印字符串
    while (1)                                /* Loop forever */
    {
		//Uart_Process();//串口命令处理函数
		printf("Hello NXP QN9021!ing......\r\n");
		timer_delay(QN_TIMER0, 7, TIMER_COUNT_MS(1000, 7)); //延时1s
    }
}

 编译后可烧录到板子,PC端串口工具打印如下:

 根据上述的两步的简单配置,我们即可以实现Printf打印函数!

以上就是本篇文章的全部内容了,有疑问的小伙伴欢迎留言.

如有错误,也欢迎指正

感谢观看!下期再见.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值