系列文章目录
1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下
2.开发环境的选择和调试(从零开始,加油)
3.欲速则不达,今天是对RA2E1 基础知识的补充学习。
4.e2 studio 使用教程
5.Keil配置使用(使用 RASC 生成 Keil 工程)
6.Keil配置使用(使用 RASC 生成 Keil 工程)
7.(电脑重装系统)学习RA产品家族选型手册
8.问题解决、学习RA寄存器、用寄存器的方式点亮第一个LED灯。
9.继续学习RA寄存器
10.FSP固件库开发及FSP配置详解。
11.FSP固件库开发点亮第一个灯。
12.FSP固件库开发按键输入检测控制LED灯闪烁
13.FSP固件库开发启动文件详解
14.FSP固件库开发延时函数(时钟详解)
15.FSP固件库外部中断处理编程(外部中断检测按键控制LED闪烁)
16.FSP固件库系统定时器(滴答定时器SysTick)每2秒LED闪烁一次
17.FSP固件库开发GPT — PWM通用定时器 定时2s LED 闪烁
18.FSP固件库开发GPT — PWM输出波形 — LED呼吸灯
19.RA2E1串口通信基础知识
20.RA2E1_UART —— 串口通信例程
文章目录
系列文章目录
前言
一、串口通信控制LED闪烁是什么?
二、使用步骤
1.硬件图
2.新建工程
3.keil编程
视频效果:
总结
月亮很圆
前言
随着昨天的串口通信的实例完成,今天开始延伸扩展一下串口通信控制LED的闪烁。
一、串口通信控制LED闪烁是什么?
可以在串口调试助手输入指令,让开发板根据这些指令执行一些任务,现在我们编写程序让开发板接收UART数据,然后根据数据内容控制LED的亮灭。
二、使用步骤
1.硬件图
2.新建工程
对于 Keil 开发环境:
拷贝一份我们之前的 Keil 工程模板 “RA_UART”, 然后将工程文件夹重命名为 “RA_UART_Control”,并进入该文件夹里面双击 Keil 工程文件,打开该工程。
FSP 配置完全一致,因此我们省略掉这部分。
3.keil编程
#include "hal_data.h"
#include "stdio.h""
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
/* LED引脚置低电平 LED灯亮 */
#define LED1_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_LOW)
#define LED2_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_02, BSP_IO_LEVEL_LOW)
/* LED引脚置高电平 LED灯灭 */
#define LED1_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_HIGH)
#define LED2_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_02, BSP_IO_LEVEL_HIGH)
/* 调试串口 UART0 初始化 */
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);
}
/* 发送完成标志 */
volatile bool uart_send_complete_flag = false;
/* 串口中断回调 */
void uart0_callback (uart_callback_args_t * p_args)
{
switch (p_args->event)
{
case UART_EVENT_RX_CHAR:
{
/* 根据字符指令控制RGB彩灯颜色 */
switch (p_args->data)
{
case '1':
LED1_ON;
break;
case '2':
LED2_ON;
break;
case '3':
LED1_OFF;
break;
case '4':
LED2_OFF;
break;
case '5':
LED1_ON; LED2_ON;
break;
case '6':
LED1_OFF; LED2_OFF;
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_uart4_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
/*******************************************************************************************************************//**
* 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) //相当于主函数 函数最终执行的地方
{
UART0_Init();
printf("这是一个串口控制 LED 例程\r\n");
printf("打开串口助手发送以下指令,控制 LED 的状态\r\n");
printf ("\t指令 ------ 状态\r\n ");
printf ("\t 1 ------ LED1_ON\r\n ");
printf ("\t 2 ------ LED2_ON\r\n ");
printf ("\t 3 ------ LED1_OFF\r\n ");
printf ("\t 4 ------ LED2_OFF\r\n ");
printf ("\t 5 ------ LED 全亮\r\n ");
printf ("\t 6 ------ LED 全灭\r\n ");
while(1){
}
/* TODO: add your own code here */
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
视频效果:
RA2E1 串口通信控制led闪烁 全亮全灭文章来源:https://www.toymoban.com/news/detail-434043.html
总结
串口通信很强,希望对大家有所帮助,博主也会不断进步。文章来源地址https://www.toymoban.com/news/detail-434043.html
月亮很圆
到了这里,关于【致敬未来的攻城狮计划】— 连续打卡第二十一天:RA2E1_UART —— 串口控制LED亮灭的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!