当前位置: 首页 > news >正文

使用Renesas R7FA8D1BH (Cortex®-M85)实现多功能UI

目录

概述

1 系统框架介绍

1.1 模块功能介绍

1.2 UI页面功能

2 软件框架结构实现

2.1 软件框架图

2.1.1 应用层API

2.1.2  硬件驱动层

2.1.3 MCU底层驱动

 2.2 软件流程图 

4 软件功能实现

4.1 状态机功能核心代码

 4.2 页面功能函数

 4.3 源代码文件

5 功能测试

5.1 软件的代码结构

5.2 功能测试 


测试视频

使用Renesas R7FA8D1BH (Cortex®-M85)控制多类i2c类型设备,实时读取数据显示在OLED 屏幕,按键实现页面切换

概述

本文主要介绍使用Renesas R7FA8D1BH (Cortex®-M85)实现多功能UI,包括整个系统的硬件框架,软件框架结构,还介绍了软件实现的逻辑,包括:状态机跳转的核心代码,源代码等内容。

1 系统框架介绍

1.1 模块功能介绍

1)数据采集部分

SHT20:  温湿度传感器,采集环境温度和湿度

ISL29035:  光照传感器,采集环境的光照强度

DS18B20: 高精度温度传感器,设备工作环境温度监测

ADC(Temperatre): MCU内部温度监测

ADC(可调电阻): 模拟数据输入

2)显示部分

OLED: 实时显示传感器的数据 

3)模式切换

KEY-UP:  物理按键,正方向切换UI

KEY-DOWM:  物理按键,反方向切换UI

1.2 UI页面功能

1)页面一显示数据

2)页面二数据

 3)页面三数据

 4)页面四数据

2 软件框架结构实现

2.1 软件框架图

2.1.1 应用层API

1)  实时读取各类sensor的数据

2)实时获取按键的状态

3)处理sensor数据,根据按键状态实现UI页面的切换

2.1.2  硬件驱动层

1)实现外围驱动的driver

2)  读取MCU内部的各类应用模块参数

2.1.3 MCU底层驱动

1)实现I2C驱动(用于驱动I2C接口设备)

2)实现UART驱动(用于debug)

3)  IO层驱动实现

4)内部各个模块驱动(ADC,RTC)

 2.2 软件流程图 

4 软件功能实现

4.1 状态机功能核心代码

1)定义函数指针

代码第12行: 定义状态跳转函数指针

代码第13行:外部引用的函数指针变量

2)入口函数

代码65行: 系统启动后,跳转到第一个页面为ADC数据显示功能

3)根据按键值判断页面的位置 

4)页面功能函数

 4.2 页面功能函数

1)显示ADC数据

代码第110行: 实时显示ADC的数据

2)显示DS18B20 数据页面

显示数据函数:

3)显示ISL29035数据页面

4)显示SHT20数据页面

数据显示函数

 

 4.3 源代码文件

创建app_state.c文件,编写如下代码:

 /*FILE NAME  :  app_state.cDescription:  app UIAuthor     :  tangmingfei2013@126.comDate       :  2024/06/03*/
#include "bsp_i2c.h" 
#include "hal_data.h"
#include "oled_drv.h"
#include "bsp_led.h"
#include "bsp_timer.h"
#include "bsp_uart.h"
#include "bsp_adc.h"
#include "ds18b20.h" 
#include "app_ui.h" 
#include "key.h" 
#include "app_state.h" typedef enum{INIT_DQ = 0,NEXT_0,NEXT_1,NEXT_2,NEXT_3,BACK,}APP_STATE;static void dispADC_state( void *ptr );
static void dispDS18B20_state( void *ptr );
static void dispISL29035_state( void *ptr );
static void dispSHT2X_state( void *ptr );STATE_FUNC pSt_State = dispADC_state;uint8_t key_getState( void )
{static uint8_t run_state = INIT_DQ;if( Key_Scan(KEY1_SW2_PIN) == KEY_ON){run_state++;}else if( Key_Scan(KEY2_SW3_PIN) == KEY_ON){run_state--;}if( run_state >= NEXT_3 ){run_state = NEXT_3;}if( run_state <= NEXT_0 ){run_state = NEXT_0;}return run_state;
}void state_machine(void)
{pSt_State((void *)pSt_State);
}void run_action( uint8_t state )
{switch( state ){case NEXT_0:pSt_State = dispADC_state;return;case NEXT_1:pSt_State = dispDS18B20_state;return;case NEXT_2:pSt_State = dispISL29035_state;return;case NEXT_3:pSt_State = dispSHT2X_state;return;default:break;}
}static void dispADC_state( void *ptr )
{uint8_t run_state;(void)ptr;oled_Clear();oled_SetCharSize( FONT_16 );  oled_PrintfString(13,0,(uint8_t*)"Renesas MCU ");  while(1){run_state = key_getState();if( run_state != NEXT_0 ){run_action( run_state );return;}ui_active();}
}static void dispDS18B20_state( void *ptr )
{uint8_t run_state;(void)ptr;oled_Clear();oled_SetCharSize( FONT_16 );  oled_PrintfString(13,0,(uint8_t*)"Renesas MCU ");  while(1){run_state = key_getState();if( run_state != NEXT_1 ){run_action( run_state );return;}ui_dispDS18b20();}
}static void dispISL29035_state( void *ptr )
{uint8_t run_state;(void)ptr;oled_Clear();oled_SetCharSize( FONT_16 );  oled_PrintfString(13,0,(uint8_t*)"Renesas MCU ");  while(1){run_state = key_getState();if( run_state != NEXT_2 ){run_action( run_state );return;}ui_disISL29035();}
}static void dispSHT2X_state( void *ptr )
{uint8_t run_state;(void)ptr;oled_Clear();oled_SetCharSize( FONT_16 );  oled_PrintfString(13,0,(uint8_t*)"Renesas MCU ");  while(1){run_state = key_getState();if( run_state != NEXT_3 ){run_action( run_state );return;}ui_disSht2x();}
}

创建app_state.h文件,编写如下代码:

 /*FILE NAME  :  app_state.hDescription:  app ui interfaceAuthor     :  tangmingfei2013@126.comDate       :  2024/06/03*/#ifndef APP_STATE_H#define APP_STATE_H#include "hal_data.h"typedef void (*STATE_FUNC)(void *ptr);
extern STATE_FUNC pSt_State;void state_machine(void);#endif   /* APP_STATE_H */

5 功能测试

5.1 软件的代码结构

代码结构分为3个部分

1) MCU的驱动层

2) Device的驱动层

3) 功能应用层

5.2 功能测试 

1)页面一

2)页面二

 3)页面三

4)页面四

相关文章:

使用Renesas R7FA8D1BH (Cortex®-M85)实现多功能UI

目录 概述 1 系统框架介绍 1.1 模块功能介绍 1.2 UI页面功能 2 软件框架结构实现 2.1 软件框架图 2.1.1 应用层API 2.1.2 硬件驱动层 2.1.3 MCU底层驱动 2.2 软件流程图 4 软件功能实现 4.1 状态机功能核心代码 4.2 页面功能函数 4.3 源代码文件 5 功能测试 5.1…...

【java】常见限流算法原理及应用

目录 前言 限流的作用 4种常见限流算法 固定窗口限流 基本原理 简单实现 优点和缺点 滑动窗口限流 基本原理 简单实现 优点和缺点 漏桶限流 基本原理 简单实现 优点和缺点 令牌桶限流 基本原理 简单实现 优点和缺点 算法比较与选择 前言 在现代分布式系统…...

Git 原理(提交对象)(结合图与案例)

Git 原理&#xff08;提交对象&#xff09; 这一块主要讲述下 Git 的原理。 在进行提交操作时&#xff0c;Git 会保存一个提交对象&#xff08;commit object&#xff09;&#xff1a; 该提交对象会包含一个指向暂存内容快照的指针&#xff1b; 该提交对象还包含了作者的姓…...

STM32如何修改外部晶振频率和主频

对于STM32F10x系列的单片机&#xff0c;除了STM32F10x_CL单片机&#xff0c;其它的单片机一般外部晶振HSE的时钟频率都默认是8MHz。如果我们使用的外部晶振为12Mhz&#xff0c;那么可以把上图绿色标记改为:12000000 72MHz的主频8MHz的外部晶振HSE*倍频系数9。当然如果像上面把外…...

【JAVA入门】Day48 - 线程池

【JAVA入门】Day48 - 线程池 文章目录 【JAVA入门】Day48 - 线程池一、线程池的主要核心原理二、自定义线程池三、线程池的大小 我们之前写的代码都是&#xff0c;用到线程的时候再创建&#xff0c;用完之后线程也就消失了&#xff0c;实际上这是不对的&#xff0c;它会浪费计算…...

图像亮度均衡算法

图像亮度均衡算法 图像亮度均衡算法的作用是提升图像的对比度和细节&#xff0c;使得图像的亮度分布更加均匀&#xff0c;从而改善视觉效果。通过调整亮度值&#xff0c;可以更好地揭示图像中的细节&#xff0c;尤其在低光或高光条件下的图像处理。 常见的图像亮度均衡算法包括…...

C++中的new与delete

目录 1.简介 2.底层 1.简介 new是升级版的malloc&#xff0c;它会先开空间再去调用构造函数。 delete是升级版的free&#xff0c;它会先调用析构函数再free掉空间。 class A { public:A(int a10, int b10){a a1;b b1;}private:int a;int b; };int main() {//new会先开空间…...

在HTML中添加视频

在HTML中添加视频&#xff0c;你可以使用<video>标签。这个标签允许你在网页上嵌入视频内容&#xff0c;并支持多种视频格式&#xff0c;如MP4、WebM和Ogg等。不过&#xff0c;由于浏览器对视频格式的支持程度不同&#xff0c;因此通常建议提供多种格式的视频文件&#x…...

YoloV10 训练自己的数据集(推理,转化,C#部署)

目录 一、下载 三、开始训练 train.py detect.py export.py 超参数都在这个路径下 四、C#读取yolov10模型进行部署推理 如下程序是用来配置openvino 配置好引用后就可以生成dll了 再创建一个控件&#xff0c;作为显示 net framework 4.8版本的 再nuget工具箱里下载 …...

Science Robotic 内在触觉实现直观的物理人机交互

触觉传感器和电子皮肤是为机器人提供物理交互感的常见设备&#xff0c;但当用于机器人的大面积覆盖时&#xff0c;它们会变得复杂且昂贵。德国宇航中心近期发表的Science Robotics研究工作&#xff0c;使用内部高分辨率关节力扭矩传感器&#xff0c;在机械臂中实现了固有的全身…...

string类(C++)

哈喽各位&#xff01;&#xff0c;久违了&#xff0c;最近怎么样捏&#xff0c;本次进入C的string类&#xff0c;加油加油呀&#xff01; 随记&#xff1a;鼓励创新&#xff0c;宽容失败&#xff01; 1.标准库的string类 1.1string类的了解 string的文献参考链接-->strin…...

【C语言】自定义类型——结构体

目录 一、结构体的类型的声明 二、结构体变量的创建和初始化 三、匿名结构体类型 四、结构体自引用 五、结构体内存对齐 &#xff08;1&#xff09;对齐规则 &#xff08;2&#xff09;计算结构体大小练习 &#xff08;3&#xff09;需要内存对齐的原因 &#xff08;4…...

MySQL练手题--日期连续类型(困难)

一、准备工作 Create table If Not Exists Failed (fail_date date); Create table If Not Exists Succeeded (success_date date); Truncate table Failed; insert into Failed (fail_date) values (2018-12-28); insert into Failed (fail_date) values (2018-12-29); inser…...

【AD24报错】运行DRC后出现 Un-Routed Net Constraint ### Net Not Assigned 的解决方案

AD24在运行PCB设计规则检查&#xff08;DRC&#xff09;后报错 Un-Routed Net Constraint ### Net Not Assigned 的解决方案 一、解决方案二、可能会报错Dead Copper的因素三、可能会报错Un-Routed Net Constraint的因素 Un-Routed Net Constraint ### Net Not Assigned 的解决…...

Linux嵌入式驱动开发指南(速记版)---Linux基础篇

第一章 Ubuntu系统入门 1.1 Linux磁盘管理 1.1.1 Linux磁盘管理基本概念 关键词&#xff1a; Linux 磁盘管理 挂载点 /etc/fstab文件 分区 ls /dev/sd* 联系描述&#xff1a; Linux 磁盘管理体系通过“挂载点”概念替代了 Windows 中的“分区”概念&#xff0c;将硬盘部分以文…...

PDF——压缩大小的方法

方法一&#xff1a;QQ浏览器->格式转换->PDF转纯图PDF...

无监督神经组合优化的扩散模型框架

文章目录 Abstract1. Introduction2. Problem Description2.1 无监督神经组合优化3. Neural Probabilistic Optimization Objective for Approximate Likelihood Models3.1 具有联合变分上界的训练扩散模型Abstract 从离散集合的不可处理分布中进行采样,而不依赖相应的训练数据…...

Web前端开发

首先打开&#xff0c;VS code新建文件夹&#xff0c;命名为index.HTML&#xff0c;然后先对内容进行输入&#xff0c;也就是在波蒂里面进行输入&#xff0c;将社会主义核心价值观的基本内容输入好&#xff0c;然后在页面呈现的效果是这样的 因为有一个alert警告框标签&#xff…...

transformer模型进行英译汉,汉译英

上面是在测试集上的表现 下面是在训练集上的表现 上面是在训练集上的评估效果 这是在测试集上的评估效果,模型是transformer模型,模型应该没问题,以上的是一个源序列没加结束符和加了结束符的情况。 transformer源序列做遮挡填充的自注意力,这就让编码器的输出中每个token的语…...

python 异步读取文件,速度变快了吗

“python 异步读取文件&#xff0c;速度变快了吗” 当我问出这个问题&#xff0c;大部分人第一反应应该是python新人&#xff0c;不懂异步 首先说一下我对异步的理解&#xff1a; asyncio 是 gevent greenlet 的组合gevent 底层使用了libev、selectors 模块&#xff0c;这两…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...