查看EK-RA6M4的原理图,如下图所示,串口 UART0 挂在了Pmod2接口的 P411,P410 这两个引脚上,而这两个引脚又可以复用为 SPI1 功能的两个引脚。此时,我们将希望修改FSP配置,让这两个引脚作为程序的 printf() 标准输出调试打印。
接下来我们打开项目中的FSP配置文件,配置使能相应串口的Pin功能,并重新生成代码。
接下来我们选择 Stacks , 点击 "New Stack" -> "Connectivity" -> "UART(r_sci_uart)" 添加串口通信功能协议栈。
如下图所示,我们可以配置串口的相应属性,如波特率等。配置好之后,点击 “Generate Project Content” 按钮,将会自动生成串口的相关代码。
接下来,我们可以修改 src/hal_entry.c 源文件,在里面添加串口的初始化 和 发送测试函数如下:
void hal_entry (void)
{
... ...
#define HELLO_MSG "Hello EK-RA6M4 Board
"
R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)HELLO_MSG, strlen(HELLO_MSG));
while (1)
{
... ...
}
其中:
使用 USB转串口连接 UART0的相应引脚( TxD0:P411, RxD0:P410 ),重新编译运行程序,串口上将会打印相应的字符串。
首先,我们在项目中创建 src/console.h 头文件如下。
#ifndef CONSOLE_H_
#define CONSOLE_H_
#include
#include "r_sci_uart.h"
#include "hal_data.h"
#define g_console(x) &g_uart0_##x
#define g_console_ctrl g_console(ctrl)
#define g_console_cfg g_console(cfg)
extern volatile bool g_console_txComplete;
/* Function declaration */
extern fsp_err_t console_initialize(void);
extern fsp_err_t deinit_console(void);
extern void console_callback(uart_callback_args_t *p_args);
extern int _write(int fd,char *pBuffer,int size);
#endif /* CONSOLE_H_ */
接下来创建 src/console.c 源文件如下:
#include "console.h"
/* Tx complete flags */
volatile bool g_console_txComplete = false;
int _write(int fd,char *pBuffer,int size)
{
fsp_err_t err = FSP_SUCCESS;
(void)fd;
g_console_txComplete = false;
err = R_SCI_UART_Write(g_console_ctrl, (uint8_t *)pBuffer, (uint32_t)size);
if(FSP_SUCCESS != err)
__BKPT();
while(g_console_txComplete == false)
{
}
return size;
}
fsp_err_t console_initialize(void)
{
fsp_err_t err = FSP_SUCCESS;
/* Initialize console UART */
err = R_SCI_UART_Open (g_console_ctrl, g_console_cfg);
FSP_ERROR_RETURN(FSP_SUCCESS == err, err);
return FSP_SUCCESS;
}
fsp_err_t deinit_console(void)
{
fsp_err_t err = FSP_SUCCESS;
/* Close module */
err = R_SCI_UART_Close (g_console_ctrl);
FSP_ERROR_RETURN(FSP_SUCCESS == err, err);
return FSP_SUCCESS;
}
void console_callback(uart_callback_args_t *p_args)
{
switch (p_args->event)
{
case UART_EVENT_TX_COMPLETE:
g_console_txComplete = true;
break;
default:
break;
}
}
在添加上面的源文件后,我们需要把自己定义的 console 串口回调函数,加入到串口中断回调函数中去,这时需要修改 FSP 的相关配置。具体方式如下图所示:
另外,printf() 函数工作还需要修改堆栈大小,这里我们调整 Heap 的大小为 1024,然后重新生成代码即可。
接下来再修改 src/hal_entry.c 源文件如下,此时 printf函数就能够正常工作了。
... ...
#include "console.h"
... ...
void hal_entry (void)
{
... ...
console_initialize();
printf("Hello EK-RA6M4 Board
");
while (1)
{
... ...
}
编译重新运行后,串口上能够正常打印相应字符串。
全部0条评论
快来发表一下你的评论吧 !