UART在5.2.0版本E2S中的重定向

环贸财神 2025-11-28 4092人围观

18.8

UART在5.2.0版本E2S中的重定向

18.8.1

重定向失效原因

随着FSP库版本更新到5.2.0,在开发过程中就会发现4.0.0版本的串口重定义并不适用于最新版本。继续使用原来的重定向代码时,编译器就会报错。根据报错的信息发现,缺少了几个函数的定义,这里补全定义即可。

3b464296-b3b4-11f0-8c8f-92fbcf53809c.png

图19-20 串口重定义编译器报错

18.8.2

重定向代码

Uart重定向函数函数的内容修改成如下所示。

列表11:代码清单19-10:Uart重定向函数

左右滑动查看完整内容

#ifdefined __GNUC__ && !defined __clang__
int_write(intfd,char*pBuffer,intsize);//防止编译警告
int_read(intfd,char*pBuffer,intsize);
/* 重定向 printf 输出 */
int_write(intfd,char*pBuffer,intsize)
{
(void) fd;
R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t*) pBuffer, (uint32_t) size);
while(uart_send_complete_flag ==false)
; 
uart_send_complete_flag =false;
returnsize;
}
/* 重定向 scanf 函数 */
int_read(intfd,char*pBuffer,intsize)
{
(void) fd;
R_SCI_UART_Read(&g_uart0_ctrl, (uint8_t*) pBuffer, (uint32_t) size);
while(uart_receive_complete_flag ==false)
;
uart_receive_complete_flag =false;
/* 回显 */
R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t*) pBuffer, (uint32_t) size);
returnsize;
}
#else
intfputc(intch, FILE *f)
{
(void)f;
R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t*)&ch,1);
while(uart_send_complete_flag ==false);
uart_send_complete_flag =false;
returnch;
}
#endif

Uart重定向头文件修改如下所示。

列表12:代码清单19-11:Uart重定向头文件

左右滑动查看完整内容

#ifndef__BSP_DEBUG_UART_H
#define__BSP_DEBUG_UART_H
#include"hal_data.h"
#include"stdio.h"
#include
 
  
#include
  
    #include
   
     voidDebug_UART0_Init(void); #endif
   
  
 

补全缺失函数如下所示。

列表13:代码清单19-12:补全缺失函数

左右滑动查看完整内容

/*函数声明防止编译器警告*/
int_isatty(intfd);
int_close(intfd);
int_lseek(intfd,intptr,intdir);
int_fstat(intfd, structstat*st);
__attribute__((weak))int_isatty(intfd)
{
if(fd>= STDIN_FILENO && fd<= STDERR_FILENO)
 return1;
  errno = EBADF;
return0;
 }
 __attribute__((weak)) int _close(int fd)
 {
if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
return0;
 errno = EBADF;
return-1;
 }
 __attribute__((weak)) int _lseek(int fd, int ptr, int dir)
 {
 (void) fd;
 (void) ptr;
 (void) dir;
 errno = EBADF;
return-1;
 }
 __attribute__((weak)) int _fstat(int fd, struct stat *st)
 {
if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
 {
 st->st_mode = S_IFCHR;
return0;
}
errno = EBADF;
return0;
}

18.8.3

下载验证

保证开发板相关硬件连接正确,用Type-CUSB线连接开发板“USBTOUART”接口电脑。本次实验需要使用到串口调试助手,配置好串口参数并打开串口后,在调试助手的发送区域输入任意字符并点击发送,即可在接收区看见相同字符,如图19_17。

图19-21 实验1下载验证

Powered By Z-BlogPHP