作者:jf_1137202360
下载Demo代码基于\ra-fsp-examples\example_projects\ek_ra4m2\sci_uart\sci_uart_ek_ra4m2_ep\keil\sci_uart_ek_ra4m2_ep.uvprojx 工程测试
串口配置原理图可以看到使用串口9,引脚P109和P110
串口9和JTAG引脚有复用 所以先配置位SWD调试接口
再配置串口9引脚
再配置串口9属性
再重新生成
坑接上USB后始终不能接收到数据,CH340G串口枚举正常,设备管理器串口号也正常, 使用逻辑分析仪直接查看P109TX引脚是有数据的,且CH340G对应引脚也有数据,说明H340G有问题,短接TX RX 也不能收发,更加说明CH340G本身就有问题了。 买了几片CH340G,到时换了再确认。 先直接使用其他的USB转串口线接到P109和P110测试。
标准输入输出重定向测试网上可以搜到大量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!\r\n");
- while(1)
- {
- printf("please input a and b:");
- scanf("%d %d",&a,&b);
- printf("%d+%d=%d\r\n",a,b,a+b);
- }
- }
复制代码
总结个人觉得瑞萨的串口驱动写的很烂,根本不好使用,搞一堆什么回调,貌似看起来是搞得驱动,实际根本不是驱动,杂糅在一起,根本没有分层思想,搞得很复杂,实际上根本不方便使用。哪怕就是要简单使用查询进行收发都不行,只能用它那一堆回调。哪怕是和意法半导体一样搞个标准外设库,提供基本的外设配置接口也好,具体逻辑用户自己去实现就可以了。总之瑞萨的FSP个人觉得是一个比较反人类的设计。
|