瑞萨单片机论坛
直播中

刘玉

未满1年用户 28经验值
擅长:可编程逻辑 MEMS/传感技术 测量仪表 嵌入式技术 光电显示
私信 关注
[经验]

【RA-Eco-RA4E2-64PIN-V1.0开发板试用】RA4E2 之使用串口进行LED点灯

串口点灯

本期测评我来讲解展示一下使用串口助手上位机软件发送指令来实现RA4E2开发板上的LED1 LED2的点灯操作。替代传统的按键点灯。
话不多说,直接上干货。
1.打开图片.png

选择RA4E2
图片.png
图片.png

图片.png

图片.png

  1. 先配置LED1和LED2
    查看原理图
    图片.png
    LED1为P207
    LED2为P113

图片.png
图片.png
2.配置串口
查看原理图
图片.png
窗口引脚为P109 P110

图片.png

图片.png

图片.png

点击生成代码

3, 打开KEIL
图片.png

添加一下代码
#include "hal_data.h"
#include <stdio.h>

/********* 参数宏定义 *********/
#define USART_REC_LEN 50 //定义最大接收字节数 50
#define First_String "Receive:" //返回给PC端的起始字符串
#define First_String_num strlen(First_String) //起始字符串长度

FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER

/*作用:串口9初始化,P109--TXD,P110--RXD
*传入参数:无
*返回参数:无
*/
void UART9_Init(void)
{
fsp_err_t err = FSP_SUCCESS;

err = R_SCI_UART_Open(&g_uart0_ctrl,&g_uart0_cfg);

assert(err == FSP_SUCCESS);

}

volatile bool uart_send_complete_flag = false; // 发送完成标志
uint8_t USART_RX_BUF[USART_REC_LEN] = First_String; //接收缓冲,最大USART_REC_LEN个字节.起始字符串为First_String的宏定义

/*

=============================================================================================================
                                          USART_RX_STA

=============================================================================================================
bit15 | bit14 | bit13--bit0

接收完成标志位(0x0A,换行键)  |         接收到0x0d(回车键)             |     接收到的有效数据个数

=============================================================================================================

*/
uint16_t USART_RX_STA = First_String_num; //接收状态标记,根据起始字符串来初始化起始字符位置

/********* 函数宏定义 *********/
#define LED1_lighting_off R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_02_PIN_07,BSP_IO_LEVEL_LOW)
#define LED1_lighting_up R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_02_PIN_07,BSP_IO_LEVEL_HIGH)
#define LED2_lighting_off R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_01_PIN_13,BSP_IO_LEVEL_LOW)
#define LED2_lighting_up R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_01_PIN_13,BSP_IO_LEVEL_HIGH)

/*函数说明:led1闪烁
*传入参数:无
*返回参数:无
*/
void led_1_flicker(void)
{
LED1_lighting_up;
R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
LED1_lighting_off;
R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
}

/*函数说明:led2闪烁
*传入参数:无
*返回参数:无
*/
void led_2_flicker(void)
{
LED2_lighting_up;
R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
LED2_lighting_off;
R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
}

static volatile uint8_t falg = 0;
/*用于串口9的接收和发送中断
*传入参数:
*p_args:这个不需要我们管,系统自动会将数据传入
*返回参数:无
/
void UART9_callback(uart_callback_args_t * p_args)
{
switch (p_args->event)
{
//如果是串口接收中断
case UART_EVENT_RX_CHAR:
{
/
根据字符指令控制RGB彩灯颜色 */
switch (p_args->data)
{
case '1':
LED1_lighting_up;
falg = 1;
break;
case '2':
LED1_lighting_off;
falg = 2;
break;
case '3':
LED2_lighting_up;
falg = 3;
break;
case '4':
LED2_lighting_off;
falg = 4;
break;
case '5':
LED1_lighting_up; LED2_lighting_up;
falg = 5;
break;
case '6':
LED1_lighting_off; LED2_lighting_off;
falg = 6;
break;
default:
break;
}
break;
}
//如果是串口发送中断
case UART_EVENT_TX_COMPLETE:
{
uart_send_complete_flag = true;
break;
}
default:
break;
}
}

/* 重定向 printf 输出 */
#if defined GNUC && !defined clang
int _write(int fd, char *pBuffer, int size); //防止编译警告
int _write(int fd, char *pBuffer, int size)
{
(void)fd;
R_SCI_UART_Write(&g_uartx_ctrl, (uint8_t *)pBuffer, (uint32_t)size);
while(uart_send_complete_flag == false);
uart_send_complete_flag = false;
return size;
}
#else
int fputc(int ch, FILE *f)
{
(void)f;
R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1);
while(uart_send_complete_flag == false);
uart_send_complete_flag = false;
return ch;
}
#endif

图片.png

LED宏定义
图片.png
串口接收点灯
图片.png
串口重定向
图片.png
主函数
图片.png
输入1 代表 LED1亮
输入2 代表 LED1灭
输入3 代表 LED2亮
输入4 代表 LED2灭
输入5 代表 LED1亮 LED2亮
输入6 代表 LED1灭 LED2灭

串口点灯

更多回帖

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