![]() 板载串口实现printf打印上一篇我讲解了使用JINK RTT来实现串口输出打印printf函数功能, 本次测评我来讲解另外一种串口打印方式,直接使用板载的串口功能来实现。 首先打开原理图 由原理图可知道,其实原理图并没有给出具体的串口引脚,这是我们可以自由发挥,随机选择IO口来定义串口,我就选择UART0 的P400和P401 来实现串口功能吧!!!大家不要照抄,可以另外定义串口引脚 话不多说了,直接上干货!!!! (1)打开 瑞萨的专业IDE 按照我的操作,点击1 和 2 按照我的操作,点击1 和 2 按照我的操作,点击1 和 2 我随便选的串口,大家可以另行,不要盲从 选中stacks New Stacks->connectivity->UART 然后生成代码 一定要先关闭这个IDE,才能打开KEIL 打开KEIl 选择JLINK 选择最大50MHZ,最快 接下来进行串口重定义printf 加入头文件 #include "hal_data.h" #include <stdio.h> #include "hal_data.h" #include <stdio.h> #define USART_REC_LEN 50 //定义最大接收字节数 50 #define First_String "Receive:" //返回给PC端的起始字符串 #define First_String_num strlen(First_String) //起始字符串长度 #define g_uartx_ctrl g_uart0_ctrl //如果是串口9需要printf重映射,就写g_uart9_ctrl volatile bool uart_send_complete_flag = false; // 发送完成标志 uint8_t USART_RX_BUF[USART_REC_LEN] = First_String; //接收缓冲,最大USART_REC_LEN个字节.起始字符串为First_String的宏定义 uint16_t USART_RX_STA = First_String_num; //接收状态标记,根据起始字符串来初始化起始字符位置 void UART_Init(void); void UART_Agreement(uart_callback_args_t * p_args); //串口通讯协议 void UART_Init(void) { fsp_err_t err = FSP_SUCCESS;
} void uartzhongduan(uart_callback_args_t * p_args) { switch (p_args->event) { //如果是串口接收中断 case UART_EVENT_RX_CHAR: { UART_Agreement(p_args);//串口通讯协议判断 if(USART_RX_STA&0x8000)//如果接收完成 { USART_RX_BUF[USART_RX_STA&0x3FFF] = 0x0d;//将字符串自动换行 USART_RX_STA++; //因为增加了0x0d,所以字符串数量+1 R_SCI_UART_Write(&g_uart2_ctrl, (uint8_t*)USART_RX_BUF, USART_RX_STA&0x3fff);//将字符串数据输出 USART_RX_STA=First_String_num; //将USART_RX_STA初始化 } break; } //如果是串口发送中断 case UART_EVENT_TX_COMPLETE: { uart_send_complete_flag = true; break; } default: break; } } void UART_Agreement(uart_callback_args_t * p_args) { if((USART_RX_STA&0x8000)==0) //bit15没有被置为1,接收未完成 { if(USART_RX_STA&0x4000) //bit14被置为1,表示接收到了'\n'(0x0d) { if((p_args->data)!=0x0a)USART_RX_STA=0; //如果bit14被置1了,但是bit15并不是换行操作,表示接收错误,重新开始 else USART_RX_STA|=0x8000; //接收完成了 } else //还没收到'\n'(0x0d) { if((p_args->data)==0x0d)USART_RX_STA|=0x4000; //如果接收到了'\n'(0x0d),bit14被置为1 else { USART_RX_BUF[USART_RX_STA&0x3FFF]=(uint8_t)(p_args->data);//如果没有接收到结束标志,继续将数据写入USART_RX_BUF[] USART_RX_STA++; if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0; //如果接收到的数据大于定义最大接收字节数,表示接收数据错误,重新开始接收 } } } } /* 重定向 printf 输出 */ #if defined GNUC && !defined clang int _write(int fd, char *pBuffer, int size); //防止编译警告 int _write(int fd, char *pBuffer, int size) { (void)fd; R_SCI_UART_Write(&g_uartx_ctrl, (uint8_t *)pBuffer, (uint32_t)size); while(uart_send_complete_flag == false); uart_send_complete_flag = false; return size; } #else int fputc(int ch, FILE *f) { (void)f; R_SCI_UART_Write(&g_uart2_ctrl, (uint8_t *)&ch, 1); while(uart_send_complete_flag == false); uart_send_complete_flag = false; return ch; } #endif 打开串口助手,可以观察到我写的 欢迎来到瑞萨电子 在添加一些日期,我的水印 至此串口调试完成 详细细节请看视屏 ![]() 板载串口实现printf打印 |
只有小组成员才能发言,加入小组>>
1433个成员聚集在这个小组
加入小组【RA-Eco-RA4M2开发板评测】定时器辅助串口不定长数据接收
561 浏览 0 评论
【RA-Eco-RA4M2开发板评测】使用Jlink的RTT来实现串口打印功能
585 浏览 0 评论
【RA-Eco-RA4M2开发板评测】1、3.3v量程电压表
410 浏览 0 评论
236 浏览 0 评论
【RA-Eco-RA4M2开发板评测】利用GPIOPUT结合继电器控制台灯频闪
509 浏览 0 评论
2091浏览 4评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】RA0E1-32PIN-V1.0开发板测试一下点灯
2782浏览 3评论
3320浏览 2评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】使用Jlink RTT完成printf打印功能
941浏览 2评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】配置开发环境和编写一个点灯程序
1738浏览 2评论