[GD32L233C-START 评测] [GD32L233C] + 4.使用RTThread的rt_kprintf或stdio的printf

chrisrh   2022-2-7 09:50 楼主

基于 GD32L233C使用RTThread_rt_kprintf

​①:在rtconfig.h中打开console

image.png  

②:魔术棒中勾选USB MicroLIB

image.png  

③:board.c中头文件添加:

#include <rthw.h>
#include "systick.h"
#include <rtthread.h>
#include "gd32l23x.h"
#include "gd32l233c_start.h"
#include "gd32l23x_usart.h"

④:在rt_hw_board_init()中添加:

//通过"gd32l233c_start.h"中的函数初始化串口0
gd_eval_com_init(EVAL_COM);

 

⑤:屏蔽#error "TODO 2“

//#error "TODO 2: Enable the hardware uart and config baudrate."

⑥:屏蔽#error "TODO 3“,重映射串口DEBUG_USARTx到rt_kprintf()函数

void rt_hw_console_output(const char *str)
{
//#error "TODO 3: Output the string 'str' through the uart."
/**
  * [url=home.php?mod=space&uid=159083]@brief[/url] 重映射串口DEBUG_USARTx到rt_kprintf()函数
  *   Note:DEBUG_USARTx是在bsp_usart.h中定义的宏,默认使用串口1
  * @param  str:要输出到串口的字符串
  * @retval 无
  * [url=home.php?mod=space&uid=1020061]@attention[/url] */
	/* 进入临界段 */
	rt_enter_critical();

	/* 直到字符串结束 */
	while (*str!='\0')
	{
		/* 换行 */
		if (*str=='\n')
		{
			usart_data_transmit(EVAL_COM, '\r'); 
			while (usart_flag_get(EVAL_COM, USART_FLAG_TC) == RESET);
		}

		usart_data_transmit(EVAL_COM, *str++); 				
		while (usart_flag_get(EVAL_COM, USART_FLAG_TC) == RESET);	
	}	

	/* 退出临界段 */
	rt_exit_critical();
}

⑦:修改完便可以使用rt_kprintf打印了

 

 

基于 GD32L233C使用printf

main中添加如下,可使用printf

①:头文件添加stdio:

#include "stdio.h"

②:在最后添加:

/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{
	usart_data_transmit(USART0, (uint8_t) ch );              //发送字符
	while (usart_flag_get(USART0,USART_FLAG_TC) == RESET);   //检查是否发送完毕
	return (ch);
}

③:便可以使用printf打印了

 

回复评论 (1)

RTThread的rt_kprintf或stdio的printf打印差别还不小,

printf打印简单不少

点赞  2022-2-8 07:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复