之前在使用STC芯片或者是STM32时候,在没有屏幕显示的情况下,都会使用的printf输出一些调试信息,方便我们调试代码信息。
对于STM32的串口输出的配置过程,可以参照我之前的帖子,欢迎大家给出意见,帖子链接如下所示:
https://forum.eepw.com.cn/thread/383039/1
【DIY手势翻页笔】手势翻页笔-过程贴:课程一printf输出-电子产品世界论坛
之前也是有幸参加论坛举办的活动,虽然自己有着STC的调试经验,在STM32的移植方面也是i遇到的问题,在帖子里面对于一些常见的问题,也做得简单的介绍。
一:下面我对瑞萨开发板的硬件开发平台:
瑞萨5.6.0版本,FSP库使用的5.6.0版本
二:简单介绍瑞萨开发环境的中对 printf的搭建过程:
2.1 串口0的使能过程如下:打开瑞萨的配置图
使能串口0,并且配置好 串口的发送引脚和接收引脚 P101 P100
2.2 配置串口0的基本参数如下所示:
2.3 配置完成以后,我们点击生成代码,添加对printf输出函数的重定义过程:
串口0的回调函数
void user_uart_callback (uart_callback_args_t * p_args) { if(p_args->event == UART_EVENT_TX_COMPLETE) { uart_send_complete_flag = true; } }
重定义操作如下:
PUTCHAR_PROTOTYPE { err = R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1); if(FSP_SUCCESS != err) __BKPT(); while(uart_send_complete_flag == false){} uart_send_complete_flag = false; return ch; }
在程序的初始化时候,对串口0进行初始化,代码如下:
err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg); assert(FSP_SUCCESS == err); unsigned char buff[]="RA E2STUDIO"; uint8_t buff_len = strlen(buff); err = R_SCI_UART_Write(&g_uart0_ctrl, buff, buff_len); if(FSP_SUCCESS != err) __BKPT(); while(uart_send_complete_flag == false){} uart_send_complete_flag = false;
主程序,添加printf的输出函数:
printf("rui sa RA2E1 printf \r\n") ; printf("EEPE huan qu luo si dao huo dong \r\n") ; R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS); // NOLINT100->160
然后编译工程发现,程序会报错,编译截图如下所示:
编译器会报错,提示 工程缺少 工具链什么的,然后我查询了一下,电脑上面已经添加了工具链,还是一直报错。
解决办法:
是瑞萨的开发工具版本比较高,对printf输出函数的兼容性的问题。
需要对开发环境配置一下:
在项目一栏下,对软件进行配置一下。在other linker flags 添加图示 函数
然后再对程序编译,就可以正常编译了,使用串口监测一下瑞萨的串口输出功能;
添加了上图的字符之后,我们再次编译的时候就可以了,提示 0 错误,0警告了。
实物测试图片如下所示:
后记:解决了在瑞萨的官方环境下对调用 printf 函数,软件报错的情况。后续,在和大家分享其他的开发经验。