本章主要介绍如何使用#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打印函数!
以上就是本篇文章的全部内容了,有疑问的小伙伴欢迎留言.
如有错误,也欢迎指正
感谢观看!下期再见.