【瑞萨RA4E1评估板】GPIO和UART测试
[复制链接]
本次测试GPIO和UART,看上去这两项可能是最基本的项目了,但是在不熟悉的MCU系统环境的情况下,这还是有点复杂地。
首先,使用上次的方法创建一个项目。项目类型不要使用Blinky项目,应该选用Meal项目,名称goip
根据原理图对项目进行规划,LED1—> P407,LED2—>P408,
UART RX—>P110 ,UART TX—> P109
打开设置中的标签Pins,对LED1和LED2进行设置。
PIN参数
Mode :输出,初始低电平。这个是根据原理图,LED在低电平时是不发光地。
Drive:驱动为高电平输出,现在的单片机输出能力较强,以前都需要三极管做驱动才能点亮LED,当然那时的LED也比较费电。
其它默认就可以,
相同设置方法,将LED2也设置完成。
接下来是uart设置,这个有点麻烦,首先是设置系统为SWD,默认可能是jtag,这样可以节省引脚,同时在本测试中因为和UART引脚冲突必须修改。
UART引脚和Jtag冲突。
修改成SWD,选择stacks >>uart,增加一个UART组件,现在都流行通用串行硬件了,看来思维应该改改了,需要进步啊。
修改通道为9,只有通道9才可以将引脚设置到arduino兼容引脚上。
还有设置回调函数。
user_uart_callback()这个函数是事件监听函数,一会需要用到。
设置完成后,同步到项目中。
按这里就可以啦。
打开源程序hal_data.c 加入下面代码就可以让led交替闪烁了。
for(;;)
{
err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07, BSP_IO_LEVEL_HIGH);
err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);
err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07, BSP_IO_LEVEL_LOW);
err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);
}
系统生成的程序已经完成了初始化设置,打开串口就可以发送数据了。
这其中有一点小技巧:
打开右侧窗格处的问号,可以展开辅助文档和说明函数。而且想要使用什么函数直接拖到程序中就可以了。
#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;
/*******************************************************************************************************************//**
* 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 */
fsp_err_t err = FSP_SUCCESS;
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
/* Open the transfer instance with initial configuration. */
err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
assert(FSP_SUCCESS == err);
unsigned char buff[]="EEWORLD RA4E1";
size_t buff_len = strlen(buff);
err = R_SCI_UART_Write(&g_uart0_ctrl, buff, buff_len);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
for(;;)
{
err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07, BSP_IO_LEVEL_HIGH);
err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);
err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07, BSP_IO_LEVEL_LOW);
err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);
}
}
/*******************************************************************************************************************//**
* This function is called at various points during the startup process. This implementation uses the event that is
* called right before main() to set up the pins.
*
* @param[in] event Where at in the start up process the code is currently at
**********************************************************************************************************************/
void R_BSP_WarmStart(bsp_warm_start_event_t event)
{
if (BSP_WARM_START_RESET == event)
{
#if BSP_FEATURE_FLASH_LP_VERSION != 0
/* Enable reading from data flash. */
R_FACI_LP->DFLCTL = 1U;
/* Would normally have to wait tDSTOP(6us) for data flash recovery. Placing the enable here, before clock and
* C runtime initialization, should negate the need for a delay since the initialization will typically take more than 6us. */
#endif
}
if (BSP_WARM_START_POST_C == event)
{
/* C runtime environment and system clocks are setup. */
/* Configure pins. */
R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);
}
}
#if BSP_TZ_SECURE_BUILD
FSP_CPP_HEADER
BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable ();
/* Trustzone Secure Projects require at least one nonsecure callable function in order to build (Remove this if it is not required to build). */
BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable ()
{
}
FSP_CPP_FOOTER
#endif
/* Callback function */
void user_uart_callback(uart_callback_args_t *p_args)
{
/* TODO: add your own code here */
switch(p_args->event)
{
case UART_EVENT_TX_COMPLETE:
uart_send_complete_flag =true;
break;
default:
break;
}
if(p_args->event == UART_EVENT_TX_COMPLETE)
{
uart_send_complete_flag = true;
}
}
这是主要的代码,回调函数就是拖出来了,不需要写的。启动程序就可以看到输出了。
终结:
这次的测试由于开发环境不是很熟悉导致了多次测试问题,主要有测试的设备选择问题,开始选了OpenOCD经过出现了各种问题,后来才发现可以选择Renesas GDB设备,
还有就是每次都要将项目clearn,还需要中断所有的才可以,当然我的经验也可能不对,如果有什么正宗的方法请告知在下,先行谢谢!
|