【致敬未来的攻城狮计划】— 连续打卡第二十一天:RA2E1_UART —— 串口控制LED亮灭

news2025/4/4 13:26:42

系列文章目录

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闪烁 全亮全灭


总结

        串口通信很强,希望对大家有所帮助,博主也会不断进步。


月亮很圆

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/489589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js高级记录

目录 1.怎么理解闭包? 2.闭包的作用? 3.闭包可能引起的问题? 4.变量提升 5.函数动态参数 6.剩余参数 ...(实际开发中提倡使用) 7.展开运算符 8.箭头函数 9.解构赋值(数组、对象) 1.怎么理…

为UOS启用VNC和Windows远程桌面

1 参考资料 UOS系统中安装x11vnc远程桌面 如何通过windows电脑远程UOS桌面RDP 已在ARM版本和X86版本中验证均可用 2 准备工作 2.1 设置代理(可选) 如果设备本身能和公网通,就不需要了。 由于我们全程需要在root账号下进行,系…

RadSystems Studio crack视觉设计和快速行动

RadSystems Studio crack视觉设计和快速行动 RadSystems Studio是一个充满激情的开发和保存环境,不需要专门的编程。该软件提供数字解决方案和组件,以尽快在API和UI中构建程序,只需少量代码,甚至无需编写。该软件减少了编写时间并…

Kubeadm方式搭建K8s集群【1.27.0版本】

文章目录 一、集群规划及架构二、系统初始化准备(所有节点同步操作)三、安装并配置cri-dockerd插件四、安装kubeadm(所有节点同步操作)五、初始化集群六、Node节点添加到集群七、安装网络组件Calico八、测试CoreDNS解析可用性九、拓展1、ctr和crictl命令具体区别2、calico多网卡…

【计算机视觉 | 图像分割】通用AI大模型Segment Anything在医学影像分割的性能究竟如何?

最近看到了一篇论文: 论文地址为: https://arxiv.org/pdf/2304.14660.pdf这篇文章用来探究最近大火的大模型SA在医学图像上的效果。 文章目录 一、前言二、数据集展示三、方法展示四、结果分析 一、前言 近半年来,ChatGPT、DALLE等引发了大…

网络安全之IPSEC

目录 VPN 分类 业务层次划分 网络层次划分 VPN的常用技术 隧道技术 IPSEC VPN IPSEC的安全服务 IPSEC的技术协议族架构 ESP AH IPSEC架构 IKE 两种工作模式 两个通信协议 密钥管理协议 两个数据库 解释域 DOI 传输模式 使用场景 封装结构 隧道模式 使用场…

Spring框架|这n篇就够了

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…

论文笔记——chatgpt评估+

文章目录 1. chatgpt 效果评估:Evaluating ChatGPT’s Information Extraction Capabilities: An Assessment of Performance, Explainability, Calibration, and Faithfulness文章简介文章结论 2. 事件抽取: OneEE: A One-Stage Framework for Fast Overlapping an…

DolphinScheduler海豚调度教程

DolphinScheduler 教程 (一)入门指南 简介 关于Dolphin Apache DolphinScheduler是一个分布式易扩展的可视化DAG工作流任务调度开源系统。解决数据研发ETL 错综复杂的依赖关系,不能直观监控任务健康状态等问题。DolphinScheduler以DAG流式…

MySQL知识学习06(SQL语句在MySQL中的执行过程)

1、MySQL 基本架构概览 下图是 MySQL 的一个简要架构图,从下图可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。 先简单介绍一下下图涉及的一些组件的基本作用帮助大家理解这幅图 连接器: 身份认证和权限相关(登录 MySQL 的时候)。查询缓…

mysql数据之表管理-mysql高级管理

1. #创建表tt01 #对id字段设置零填充约束、主键约束、自增长约束 #对name字段设置非空约束、默认值约束 #对cardid字段设置非空约束、唯一键约束 插入数据记录: 1)因为id字段设置了自增长,如果不指定id字段值,则默认从1开始递…

electron+vue3全家桶+vite项目搭建【17】pinia状态持久化

文章目录 引入问题演示实现效果展示、实现步骤1.封装状态初始化函数2.封装状态更新同步函数3.完整代码 引入 上一篇文章我们已经实现了electron多窗口中,pinia的状态同步,但你会发现,如果我们在一个窗口里面修改了状态,然后再打开…

第十四届蓝桥杯Python B组省赛复盘

第十四届蓝桥杯Python B组省赛复盘 文章目录 第十四届蓝桥杯Python B组省赛复盘试题 A: 2023【问题描述】(5 分)【思路】 试题 B: 硬币兑换【问题描述】【思路】 试题 C: 松散子序列【问题描述】【输入格式】【输出格式】【样例输入】【样例输出】【评测…

Python | 人脸识别系统 — 活体检测

本博客为人脸识别系统的活体检测代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址: 注意:阅读本博客前请先参考以下博客 工具安装、环境配置:人脸识别系统-简介 UI界面设计:人脸识别系统-UI界面设…

6---N字形变化

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下: P A H N A P L S I I G Y I R 之后,你的输出需要从左往右逐…

JavaScrpit—数据类型转换

目录 1、起 源 理 念 2、特 点 框 架 AngularJS框架 WebSocket协议 3、书 写 位 置 注 释 浏览器调试js代码 4、变量作用 全局变量 局部变量 常量 5、数据类型 数 组 严格检查数据类型 字符串 6、类型转换 字符串转数字 转bool值 能力判断 7、编码方式 …

Spring IOC相关注解运用——上篇

目录 前言 一、Component 二、Repository、Service、Controller 三、Scope 四、Autowired 五、Qualifier 六、Value 1. 直接设置固定的属性值 2. 获取配置文件中的属性值 3. 测试结果 往期专栏&文章相关导读 1. Maven系列专栏文章 2. Mybatis系列专栏文章 3.…

记录一次Linux下ChatGLM部署过程

前言 本地化的GPT就是香,就是有点费钱。 项目地址:https://github.com/THUDM/ChatGLM-6B 前期准备 服务器(本机的跳过) 由于本地电脑显卡都不行,所以我租了AutoDL的一台算力服务器。Tesla T4 16G显存,…

自供电-测力刀柄资料整理

自供电-测力刀柄资料整理 2. 相关专利2.1 实时测量铣削过程中床主轴温度装置【1】2.2 一种基于应变片的测力系统【2】 3. 相关商业化产品3.1 spike 测力刀柄【3】3.2 瑞士奇石乐(Kistler)旋转切削测力仪【4】3.3 kistler的通用型压电式切削力测量系统3.4…

SPSS如何进行聚类分析之案例实训?

文章目录 0.引言1.快速聚类分析2.分层聚类分析3.两阶段聚类分析 0.引言 因科研等多场景需要进行绘图处理,笔者对SPSS进行了学习,本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结,本文对聚类分析进行阐述。…