UART在5.2.0版本E2S中的重定向

描述

18.8

UART在5.2.0版本E2S中的重定向

18.8.1

重定向失效原因

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

串口

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

18.8.2

重定向代码

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

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

左右滑动查看完整内容

 

#if defined __GNUC__ && !defined __clang__
int _write(int fd, char *pBuffer, int size); //防止编译警告
int _read(int fd, char *pBuffer, int size);
/* 重定向 printf 输出 */
int _write(int fd, char *pBuffer, int size)
 {
 (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;
return size;
 }
/* 重定向 scanf 函数 */
int _read(int fd, char *pBuffer, int size)
 {
 (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);
return size;
 }
#else
intfputc(int ch, 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;
return ch;
 }
#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(int fd);
int _close(int fd);
int _lseek(int fd, int ptr,int dir);
int _fstat(int fd, 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下载验证

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分