瑞萨单片机william hill官网
直播中

jf_1137202360

8年用户 1379经验值
擅长:嵌入式技术
私信 关注

【瑞萨RA4系列开发板体验】串口测试与标准输入输出重定向

本帖最后由 jf_1137202360 于 2022-12-13 14:01 编辑

下载Demo代码
https://github.com/renesas/ra-fsp-examples/tree/master/example_projects/ek_ra4m2
基于ra-fsp-examplesexample_projectsek_ra4m2sci_uartsci_uart_ek_ra4m2_epkeilsci_uart_ek_ra4m2_ep.uvprojx
工程测试

串口配置
原理图可以看到使用串口9,引脚P109P110


串口9JTAG引脚有复用
所以先配置位SWD调试接口
再配置串口9引脚
再配置串口9属性
再重新生成

接上USB后始终不能接收到数据,CH340G串口枚举正常,设备管理器串口号也正常,
使用逻辑分析仪直接查看P109TX引脚是有数据的,CH340G对应引脚也有数据,说明H340G有问题,短接TX RX 也不能收发,更加说明CH340G本身就有问题了。
买了几片CH340G,到时换了再确认。
先直接使用其他的USB转串口线接到P109P110测试。

标准输入输出重定向测试
网上可以搜到大量MDK重定向标准输入输出的文章,都是只有结果,直接给出了代码。作为嵌入式开发,第一手资料是芯片手册和开发环境的帮助文档,所以了解如何去获取相关内容更重要。这样对于一个全新的平台也能很快入手。
MDK菜单栏
Help->uVision Help
我们知道printf属于stdio,所以我们就搜索stdio关键字,一个个看搜索出来的结果,很快就能看到如下关键内容,正是我们需要的

FSP的接口实在是不好用,所以重写收发接口。

uart_ep.c中实现串口查询收发
引用: void uart_poll_send(uint8_t ch)

{

g_uart_ctrl.p_reg->TDR = ch;

while(g_uart_ctrl.p_reg->SSR_b.TEND == 0);

}



uint8_t uart_poll_read(void)

{

while(g_uart_ctrl.p_reg->SSR_b.RDRF == 0);

return g_uart_ctrl.p_reg->RDR;

}


添加文件retarget.c
引用: #include

#include

#include "hal_data.h"



void uart_poll_send(uint8_t ch);

uint8_t uart_poll_read(void);



int fputc(int ch, FILE *f)

{

(void)f;

uint8_t data = (uint8_t)ch;

  /* Your implementation of fputc(). */

uart_poll_send(data);

  return ch;

}





int fgetc(FILE *f)

{

    (void)f;

    /* Your implementation of fgetc(). */

    return (int)uart_poll_read();

}



hal_entry.c
引用: void hal_entry(void)

{

    /* Initializing UART */

    uart_initialize();

int a;

  int b;

printf("Hello World!rn");

  while(1)

{

printf("please input a and b:");

scanf("%d %d",&a,&b);

printf("%d+%d=%drn",a,b,a+b);

}

}


总结
个人觉得瑞萨的串口驱动写的很烂,根本不好使用,搞一堆什么回调,貌似看起来是搞得驱动,实际根本不是驱动,杂糅在一起,根本没有分层思想,搞得很复杂,实际上根本不方便使用。哪怕就是要简单使用查询进行收发都不行,只能用它那一堆回调。哪怕是和意法半导体一样搞个标准外设库,提供基本的外设配置接口也好,具体逻辑用户自己去实现就可以了。总之瑞萨的FSP个人觉得是一个比较反人类的设计。

附件: 您需要登录才可以下载或查看附件。没有帐号?注册

更多回帖

发帖
×
20
完善资料,
赚取积分