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

h1654155285.8644

6年用户 233经验值
擅长:处理器/DSP
私信 关注
[经验]

【瑞萨RA4系列开发板体验】+UART0串口编程

在上一个帖子中,对RA4M2型单片机在Keil下的编程进行了说明,这个帖子主要介绍在Keil下的串口编程,包括项目的建立、串口的设置、串口的编程这三部分内容。
一、项目的建立
首先打开RASC软件,建立新的项目,需要填写项目的名称和存放地址,如下图所示。
0建立项目.png
点击“NEXT”,选择所使用的开发板、单片机型号、IDE,如下图所示。
2选择IDE.png
由于所测评的板子在Board列表中没有,故选择“Custom User Board”,即用户自行设计的威廉希尔官方网站 板,如果以后自己绘制板子的话,也需要选择该项。单片机的型号选择“R7FA4M2AD3CFP”,IDE选择呢“Keil MDK Version 5”。然后再点击“NEXT”。
3不使用RTOS.png
选择不使用RTOS后,再点击“NEXT”,当显示如下界面时,说明项目已经建立完成。
4建立完成.png
二、串口的配置
在上一步完成项目建立后,打开设置的项目存放地址,双机Keil图表,打开所建立的项目,打开界面如下图所示。
5打开Keil.png
在对串口进行设置时,点击Keil软件的“Tools”中的“RA Smart Configurator”,如下所示。
6点击RA Smart Configure.png
此时弹出配置界面。在该界面中,首先对串口的引脚进行设置。本测试,使用的是串口0,其中TXD引脚为P411,RXD引脚为P410,点击步骤如下:
Pins→Peripherals→Connectivity:SCI→SCI0→Input/Output,选择需要设置的引脚编号。操作界面如下:
7配置引脚 - 副本.png
引脚设置完成后,在配置串口参数,再将串口加入项目,操作顺序为:New Stack→Connectivity→UART,该操作如下图所示:
8加入串口 - 副本.png
将串口加入项目后,再设置串口的参数,参数设置界面如下所示。
9串口参数设置.png
1、Name:该串口的名称设置为g_uart0
2、Channel:设置通道,因为选择了串口0 ,因此该处设置为0
3、Baud Rate:波特率,设置为115200
4、Callback:该处要设置中断回调函数。即单片机出现中断时,所要调动的函数名称。该处设置为Uart0_Callback。该处的名称,可以自己设置。
上述设置完成后,即可点击“Generate Project Content”,用来生成代码。
10生成代码.png
三、串口编程
通过上述操作,已经将串口的设置放于代码中,但是还需要打开串口,编写串口的回调函数。
1、打开串口
在hal_entry.c文件中加入串口初始化函数,该函数用来打开串口。

void UART0_Init(void)
{
	fsp_err_t err = FSP_SUCCESS;
	err = R_SCI_UART_Open (&g_uart0_ctrl, &g_uart0_cfg);
	assert(FSP_SUCCESS == err);
}

2、串口数据发送函数

R_SCI_UART_Write(&g_uart0_ctrl, test, 5);

在主循环中,编写了上述语句,表示使用串口0发送test数组的5个字节,如需发送其余内容和数量,可自行修改。
3、编写回调函数
由于在串口设置中填写了串口回调函数,因此需要编写串口回调函数。该函数的编写与普通的串口中断相同,也是根据不同的中断类型填写不同的操作。代码如下:

void Uart0_Callback (uart_callback_args_t * p_args)
{
	switch (p_args->event)
	{
		case UART_EVENT_RX_CHAR:
		{
			R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&(p_args->data), 1);
			break;
		}
		case UART_EVENT_TX_DATA_EMPTY:
		{
			uart_send_complete_flag = true;
			break;
		}
		default:
			break;
	}
}

4、完整代码
最终hal_entry文件中的代码如下:

#include "hal_data.h"

FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER

volatile bool uart_send_complete_flag = false;
uint8_t test[]="Renesas MCU TEST!";

void UART0_Init(void)
{
	fsp_err_t err = FSP_SUCCESS;
	err = R_SCI_UART_Open (&g_uart0_ctrl, &g_uart0_cfg);
	assert(FSP_SUCCESS == err);
}

/*******************************************************************************************************************//**
 * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used.  This function
 * is called by main() when no RTOS is used.
 **********************************************************************************************************************/
void hal_entry(void)
{
    /* TODO: add your own code here */
	
	UART0_Init();
	
	while(1)
	{
		R_SCI_UART_Write(&g_uart0_ctrl, test, 17);
		R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_SECONDS);
	}

#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

void Uart0_Callback (uart_callback_args_t * p_args)
{
	switch (p_args->event)
	{
		case UART_EVENT_RX_CHAR:
		{
			R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&(p_args->data), 1);
			break;
		}
		case UART_EVENT_TX_DATA_EMPTY:
		{
			uart_send_complete_flag = true;
			break;
		}
		default:
			break;
	}
}

四、执行效果
程序在执行时,每2秒发送一次字符串"Renesas MCU TEST!",并将串口输入的数据再自动转发。效果如下列视频所示。

VID20221120183022

回帖(1)

华仔stm32

2022-11-21 10:35:49
感谢分享!很详细的教程!
1 举报

更多回帖

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