Renesas R7FA8D1BH (Cortex®-M85) I2C接口应用(OLED)

目录

概述

1 软硬件

1.1 软硬件环境信息

1.2 开发板信息

1.3 调试器信息

2 FSP和KEIL配置I2C

2.1 I2C硬件电路

2.2 FSP配置参数

3 软件功能实现

3.1 FSP生成项目

3.2 FSP中I2C接口函数

3.2.1 I2C Master的函数列表

3.2.2 函数功能介绍

3.3 I2C接口

4 验证i2c接口

4.1 测试程序实现

4.2 OLED驱动程序

5 测试


概述

本文主要介绍Renesas R7FA8D1BH (Cortex®-M85) I2C接口应用方法,包括使用FSP配置I2C接口参数,并生成基于KEIL的工程代码。还是使用该I2C接口设计一个驱动程序,用于控制OLED。以验证I2C函数的功能。

1 软硬件

1.1 软硬件环境信息

软硬件信息版本信息
Renesas MCUR7FA8D1BH
KeilMDK ARM 5.38
FSP 版本5.3.0
调试工具:N32G45XVL-STBDAP-LINK

1.2 开发板信息

笔者选择使用野火耀阳开发板_瑞萨RA8,该板块的主控MCU为R7FA8D1BHECBD,7FA8D1BHECBD的内核为ARM Contex-M85。

1.3 调试器信息

对于R7FA8D1BHECBD芯片,其使用的内核为Cortex®-M85 Core, ST-LINK-V2或者J-LINK-V9不支持下载和调试功能。笔者经过多次尝试,发现N32G45XVL-STB板卡上自带的DAP-LINK可以下载和调试R7FA8D1BHECBD。

下图为N32G45XVL-STB开发板实物图:

2 FSP和KEIL配置I2C

2.1 I2C硬件电路

耀阳开发板_瑞萨RA8上设计了专门的OLED硬件接口,其对应的I2C接口为:

SCK:    P802

SDA:    P801

2.2 FSP配置参数

1)配置Pin引脚信息

选择SCI2: 其对应的IO端口分别为P802=SCL,  P801=SDA

2)  创建I2C对应的Stack

 3)配置I2C对应的Stack的相关参数

3 软件功能实现

3.1 FSP生成项目

使用FSP配置完成参数之后,就可以使用FSP的Generate Project生成项目,在hal_data.c文件中生成i2c相关的参数

3.2 FSP中I2C接口函数

3.2.1 I2C Master的函数列表

SCI_B HAL模块上的简单I2C主模块支持与I2C从设备的事务处理。必须提供回调函数,它将在传输或接收完成时调用。回调参数将包含有关事务状态、传输的字节和指向用户定义上下文的指针的信息。

特性


1)支持多种传输速率
      标准模式支持高达100 kHz的交易率。
      快速模式支持高达400 kHz的交易率。
2)SDA延迟(以纳秒为单位)可以指定为配置的一部分。
3)I2C Master从从设备读取数据。
4)I2C Master写从设备。
5)中止任何正在进行的事务。
6)设置从设备地址。
7)非阻塞行为是通过使用回调实现的。
8)额外的构建时特性
      可选的(构建时)DTC分别支持读和写。
      可选的(构建时)支持10位从属寻址。

3.2.2 函数功能介绍

1)R_SCI_B_I2C_Open()


fsp_err_t R_SCI_B_I2C_Open	(	i2c_master_ctrl_t *const 	p_api_ctrl,
i2c_master_cfg_t const *const 	p_cfg 
)	

参数介绍

Opens the I2C device.

Return values

FSP_SUCCESSRequested clock rate was set exactly.
FSP_ERR_ALREADY_OPENModule is already open.
FSP_ERR_IP_CHANNEL_NOT_PRESENTChannel is not available on this MCU.
FSP_ERR_ASSERTIONParameter check failure due to one or more reasons below:
  1. p_api_ctrl or p_cfg is NULL.
  2. extended parameter is NULL.
  3. Callback parameter is NULL.
  4. Clock rate requested is greater than 400KHz
  5. Invalid IRQ number assigned

2) R_SCI_B_I2C_Read()


fsp_err_t R_SCI_B_I2C_Read	(	i2c_master_ctrl_t *const 	p_api_ctrl,
uint8_t *const 	p_dest,
uint32_t const 	bytes,
bool const 	restart 
)	

参数介绍

从I2C设备执行读取操作。当操作(成功)完成时,调用者将通过回调中的I2C_MASTER_EVENT_RX_COMPLETE收到通知。

Return values

FSP_SUCCESSFunction executed without issue.
FSP_ERR_ASSERTIONThe parameter p_ctrl, p_dest is NULL, bytes is 0.
FSP_ERR_INVALID_SIZEProvided number of bytes more than uint16_t size (65535) while DTC is used for data transfer.
FSP_ERR_NOT_OPENDevice was not even opened.

3)R_SCI_B_I2C_Write()

fsp_err_t R_SCI_B_I2C_Write	(	i2c_master_ctrl_t *const 	p_api_ctrl,
uint8_t *const 	p_src,
uint32_t const 	bytes,
bool const 	restart 
)	

 参数介绍

对I2C设备进行写操作。

如果相关通道上已经有正在进行的I2C传输,则此函数将失败。否则,将开始I2C写操作。当用户没有提供回调时,该函数执行阻塞写入。否则,写操作是非阻塞的,并且当操作完成时将通过回调中的I2C_EVENT_TX_COMPLETE通知调用者。

Return values

FSP_SUCCESSFunction executed without issue.
FSP_ERR_ASSERTIONp_ctrl, p_src is NULL.
FSP_ERR_INVALID_SIZEProvided number of bytes more than uint16_t size (65535) while DTC is used for data transfer.
FSP_ERR_NOT_OPENDevice was not even opened.

4)R_SCI_B_I2C_Abort()


fsp_err_t R_SCI_B_I2C_Abort	(	i2c_master_ctrl_t *const 	p_api_ctrl	)	

 参数介绍

中止任何正在进行的传输并强制I2C外设进入就绪状态。

此功能将安全地终止任何正在进行的I2C传输与设备。如果传输被中止,用户将通过一个中止事件的回调得到通知。由于回调是可选的,因此在这种情况下,该函数还将返回一个特定的错误代码。

Return values

FSP_SUCCESSTransaction was aborted without issue.
FSP_ERR_ASSERTIONp_ctrl is NULL.
FSP_ERR_NOT_OPENDevice was not even opened.

5)  R_SCI_B_I2C_SlaveAddressSet()


fsp_err_t R_SCI_B_I2C_SlaveAddressSet	(	i2c_master_ctrl_t *const 	p_api_ctrl,
uint32_t const 	slave,
i2c_master_addr_mode_t const 	addr_mode 
)	

参数介绍

设置从设备的地址和寻址方式。

该功能用于设置从设备地址和寻址方式,而无需重新配置整个总线。

Return values

FSP_SUCCESSAddress of the slave is set correctly.
FSP_ERR_ASSERTIONp_ctrl or address is NULL.
FSP_ERR_NOT_OPENDevice was not even opened.
FSP_ERR_IN_USEAn I2C Transaction is in progress.

 6) R_SCI_B_I2C_CallbackSet()

fsp_err_t R_SCI_B_I2C_CallbackSet	(	i2c_master_ctrl_t *const 	p_api_ctrl,
void(*)(i2c_master_callback_args_t *) 	p_callback,
void const *const 	p_context,
i2c_master_callback_args_t *const 	p_callback_memory 
)	

Updates the user callback and has option of providing memory for callback structure. Implements i2c_master_api_t::callbackSet

Return values

FSP_SUCCESSCallback updated successfully.
FSP_ERR_ASSERTIONA required pointer is NULL.
FSP_ERR_NOT_OPENThe control block has not been opened.
FSP_ERR_NO_CALLBACK_MEMORYp_callback is non-secure and p_callback_memory is either secure or NULL.

7) R_SCI_B_I2C_StatusGet()

fsp_err_t R_SCI_B_I2C_StatusGet	(	i2c_master_ctrl_t *const 	p_api_ctrl,
i2c_master_status_t * 	p_status 
)	

参数介绍

Provides driver status.

Return values

FSP_SUCCESSStatus stored in p_status.
FSP_ERR_ASSERTIONNULL pointer.

8) R_SCI_B_I2C_Close()

fsp_err_t R_SCI_B_I2C_Close	(	i2c_master_ctrl_t *const 	p_api_ctrl	)	

参数介绍

关闭I2C设备。下电I2C外设。

此功能将安全地终止任何正在进行的I2C传输与设备。如果传输被中止,用户将通过一个中止事件的回调得到通知。由于回调是可选的,因此在这种情况下,该函数还将返回一个特定的错误代码。

Return values

FSP_SUCCESSDevice closed without issue.
FSP_ERR_ASSERTIONThe parameter p_ctrl is NULL.
FSP_ERR_NOT_OPENDevice was not even opened.

3.3 I2C接口

 1)创建bsp_i2c.c文件,编写如下代码:

 /*FILE NAME  :  bsp_i2c.cDescription:  user i2c interface Author     :  tangmingfei2013@126.comDate       :  2024/06/03*/
#include "bsp_i2c.h" 
#include "hal_data.h"#define TIME_OUT    10000i2c_master_event_t g_i2c_callback_event;void sci_b_i2c_master_callback (i2c_master_callback_args_t * p_args)
{if (NULL != p_args){g_i2c_callback_event = p_args->event;}
}  void i2c2_init_para( uint32_t const slaveAddress )
{fsp_err_t err;err = R_SCI_B_I2C_Open(&g_i2c0_ctrl, &g_i2c0_cfg);assert(FSP_SUCCESS == err);err = R_SCI_B_I2C_SlaveAddressSet(&g_i2c0_ctrl, slaveAddress, I2C_MASTER_ADDR_MODE_7BIT);assert(FSP_SUCCESS == err);
}void i2c2_write_bytes(uint8_t *pbuff, uint16_t length )
{unsigned int timeout_ms = TIME_OUT;fsp_err_t err;err = R_SCI_B_I2C_Write(&g_i2c0_ctrl, pbuff, length, false);assert(FSP_SUCCESS == err);g_i2c_callback_event = I2C_MASTER_EVENT_ABORTED;/* Since there is nothing else to do, block until Callback triggers*/while ((I2C_MASTER_EVENT_TX_COMPLETE != g_i2c_callback_event) && timeout_ms){R_BSP_SoftwareDelay(1U, BSP_DELAY_UNITS_MILLISECONDS);timeout_ms--;;}
}void i2c2_read_bytes(uint8_t *pbuff, uint16_t length )
{unsigned int timeout_ms = TIME_OUT;fsp_err_t err;g_i2c_callback_event = I2C_MASTER_EVENT_ABORTED;err = R_SCI_B_I2C_Read(&g_i2c0_ctrl, pbuff, length, false);assert(FSP_SUCCESS == err);/* Since there is nothing else to do, block until Callback triggers*/while ((I2C_MASTER_EVENT_RX_COMPLETE != g_i2c_callback_event) && timeout_ms){R_BSP_SoftwareDelay(1U, BSP_DELAY_UNITS_MILLISECONDS);timeout_ms--;;}
}/* End of this file */

 2)创建bsp_i2c.h文件,编写如下代码:

 /*FILE NAME  :  bsp_i2c.hDescription:  user i2c interface Author     :  tangmingfei2013@126.comDate       :  2024/06/03*/#ifndef BSP_I2C_H#define BSP_I2C_H#include "hal_data.h"void i2c2_init_para( uint32_t const slaveAddress );
void i2c2_write_bytes(uint8_t *pbuff, uint16_t length );
void i2c2_read_bytes(uint8_t *pbuff, uint16_t length );#endif   /* BSP_I2C_H */

4 验证i2c接口

4.1 测试程序实现

笔者使用i2c接口驱动一个OLED,该设备的驱动实现原理,在该篇文章中已经有详细的介绍。本文主要介绍直接使用Renesas 的I2C接口来驱动OLED。

详解0.9寸OLED驱动开发(linux platform tree i2c 应用实例)_i2c总线的oled-CSDN博客

4.2 OLED驱动程序

1)创建oled_drv.c文件,编写如下代码:

/** \file$Id: oled.c 40486 2018-08-12 13:50:21Z tangmingfei2013@126.com $Copyright (c)tangmingfei2013@126.com Holding B.V.
All Rights Reserved.This source code and any compilation or derivative thereof is the proprietary
information of mingfei.tang Holding B.V. and is confidential in nature.
Under no circumstances is this software to be combined with any
Open Source Software in any way or placed under an Open Source License
of any type without the express written permission of mingfei.tang Holding B.V.
*/
/*******************************************************************************
* EXPORT INCLUDE FILES
*******************************************************************************/
#include "bsp_i2c.h" 
#include "oled_drv.h"
/*******************************************************************************
* LOCAL INCLUDE FILES
*******************************************************************************/
#include "font.h"static uint8_t charSize;
/******************************************************************************
* LOCAL FUNCTION DECLARATIONS
******************************************************************************/
static void oled_WriteRegister(uint8_t val,  uint8_t reg);/******************************************************************************
* EXPORTED FUNCTIONS
******************************************************************************/
void oled_Init(void)
{ i2c2_init_para(OLED_ADDRESS);oled_WriteRegister(0xAE,PARA);//--display offoled_WriteRegister(0x00,PARA);//---set low column addressoled_WriteRegister(0x10,PARA);//---set high column addressoled_WriteRegister(0x40,PARA);//--set start line address  oled_WriteRegister(0xB0,PARA);//--set page addressoled_WriteRegister(0x81,PARA); // contract controloled_WriteRegister(0xFF,PARA);//--128   oled_WriteRegister(0xA1,PARA);//set segment remap oled_WriteRegister(0xA6,PARA);//--normal / reverseoled_WriteRegister(0xA8,PARA);//--set multiplex ratio(1 to 64)oled_WriteRegister(0x3F,PARA);//--1/32 dutyoled_WriteRegister(0xC8,PARA);//Com scan directionoled_WriteRegister(0xD3,PARA);//-set display offsetoled_WriteRegister(0x00,PARA);//oled_WriteRegister(0xD5,PARA);//set osc divisionoled_WriteRegister(0x80,PARA);//oled_WriteRegister(0xD8,PARA);//set area color mode offoled_WriteRegister(0x05,PARA);//oled_WriteRegister(0xD9,PARA);//Set Pre-Charge Periodoled_WriteRegister(0xF1,PARA);//oled_WriteRegister(0xDA,PARA);//set com pin configuartionoled_WriteRegister(0x12,PARA);//oled_WriteRegister(0xDB,PARA);//set Vcomholed_WriteRegister(0x30,PARA);//oled_WriteRegister(0x8D,PARA);//set charge pump enableoled_WriteRegister(0x14,PARA);//oled_WriteRegister(0xAF,PARA);//--turn on oled paneloled_Clear();#if OLED_DEBUG  oled_SetCharSize( FONT_16 );  oled_PrintfString(10,0,(uint8_t*)"Renesas MCU ");  oled_SetCharSize( FONT_12 );oled_PrintfString(1,3,(uint8_t*)"Type: R7FA8D1BH");  oled_PrintfString(2,6,(uint8_t*)"Cortex-M85 core");
#endif} void oled_SetCharSize( uint8_t val )
{charSize = val;
}void oled_SetPostion( uint8_t x, uint8_t y) 
{oled_WriteRegister(0xb0+y,PARA);oled_WriteRegister(((x&0xf0)>>4)|0x10,PARA);oled_WriteRegister((x&0x0f),PARA); 
}void oled_displayOn(void)
{oled_WriteRegister(0X8D,PARA); oled_WriteRegister(0X14,PARA); oled_WriteRegister(0XAF,PARA);
}void oled_DisplayOff(void)
{oled_WriteRegister(0X8D,PARA);oled_WriteRegister(0X10,PARA);oled_WriteRegister(0XAE,PARA);
}void oled_Clear(void)  
{  uint8_t i,n;for(i=0;i<8;i++)  {  oled_WriteRegister (0xb0+i,PARA);   oled_WriteRegister (0x00,PARA);oled_WriteRegister (0x10,PARA); for( n = 0;n < 128; n++){oled_WriteRegister(0,DATA);} } 
}void oled_UpScreenOn(void)  
{  uint8_t i,n;for(i=0;i<8;i++)  {  oled_WriteRegister (0xb0+i,PARA);oled_WriteRegister (0x00,PARA); oled_WriteRegister (0x10,PARA);for(n=0;n<128;n++){oled_WriteRegister(1,DATA); }} 
}void oled_PrintfChar(uint8_t x,uint8_t y,uint8_t val )
{      	uint8_t character = 0;uint8_t i=0;character = val-' ';if( x > X_WIDTH-1){x = 0;y += 2;}if( charSize == FONT_16 ){oled_SetPostion(x,y);	for( i = 0; i < 8; i++){oled_WriteRegister(F8X16[character*16+i],DATA);}oled_SetPostion(x,y+1);for(i=0;i<8;i++){oled_WriteRegister(F8X16[character*16+i+8],DATA);}}else {oled_SetPostion(x,y);for(i=0;i<6;i++){oled_WriteRegister(F6x8[character*6+i],DATA);}}
}void oled_PrintfString(uint8_t x,uint8_t y,uint8_t *str  )
{uint8_t index = 0;while ( str[index]!='\0' ){oled_PrintfChar(x,y,str[index] );x += 8;if( x > 120 ){  x=0;y+=2;}index++;}
}void oled_PrintmutiChar(uint8_t x,uint8_t y,uint8_t *str,  uint8_t length )
{for(uint8_t index = 0; index < length; index++ ){oled_PrintfChar(x,y,str[index] );x += 8;if( x > 120 ){  x=0;y+=2;}}
}/******************************************************************************
* LOCAL FUNCTIONS
******************************************************************************/
static void oled_WriteRegister(uint8_t val,  uint8_t reg)
{  fsp_err_t err;unsigned char buff[2];err = R_SCI_B_I2C_SlaveAddressSet( &g_i2c0_ctrl, OLED_ADDRESS, I2C_MASTER_ADDR_MODE_7BIT);assert(FSP_SUCCESS == err);buff[0] = reg;buff[1] = val;i2c2_write_bytes(buff, 2);
}
/* End of this file */

2)创建oled_drv.h文件,编写如下代码:

/** \file$Id: oled.h 40486 2018-08-12 13:50:21Z tangmingfei2013@126.com $Copyright (c)tangmingfei2013@126.com Holding B.V.
All Rights Reserved.This source code and any compilation or derivative thereof is the proprietary
information of mingfei.tang Holding B.V. and is confidential in nature.
Under no circumstances is this software to be combined with any
Open Source Software in any way or placed under an Open Source License
of any type without the express written permission of mingfei.tang Holding B.V.
*/
#ifndef __OLED_DRV_H
#define __OLED_DRV_H/******************************************************************************
* C++ DECLARATION WRAPPER
******************************************************************************/#ifdef __cplusplus
extern "C" {
#endif#include "hal_data.h"
/******************************************************************************
* LOCAL MACROS AND DEFINITIONS
******************************************************************************/
#define OLED_DEBUG      1
#define OLED_ADDRESS    0x3ctypedef enum
{FONT_16 = 0,FONT_12 = 1,
}OLED_CHARSIZE;typedef enum
{PARA = 0,DATA = 0x40,
}OLED_PARE_REG;typedef enum
{X_WIDTH = 128,Y_WIDTH = 64,
}OLED_SCREEN_SIZE;/******************************************************************************
* EXPORTED MACROS AND DEFINITIONS
******************************************************************************/ /******************************************************************************
* EXPORTED FUNCTIONS
******************************************************************************/
void oled_Clear(void) ;
void oled_Init(void);
void oled_UpScreenOn(void);void oled_PrintfString(uint8_t x,uint8_t y,uint8_t *str);
void oled_PrintfChar(uint8_t x,uint8_t y,uint8_t val);
void oled_SetPostion( uint8_t x, uint8_t y) ;
void oled_SetCharSize( uint8_t val );
void oled_PrintmutiChar(uint8_t x,uint8_t y,uint8_t *str,  uint8_t length);/******************************************************************************
* END OF C++ DECLARATION WRAPPER
******************************************************************************/#ifdef __cplusplus
}
#endif#endif /* __OLED_DRV_H */

5 测试

1)调用OLED驱动函数

 2)编译代码,下载代码到板卡中,运行结果如下:

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

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

相关文章

Vant Design - VUE 时间区间限制

效果图&#xff0c;限制7天 实现代码 <a-range-picker v-model"dateTime" style"width: 100%" :disabled-date"disabledDate" format"YYYY-MM-DD HH:mm:ss" :showTime"true" :placeholder"[开始时间, 结束时间]&quo…

浅析MySQL-索引篇01

什么是索引&#xff1f; 索引是帮助存储引擎快速获取数据的一种数据结构&#xff0c;类似于数据的目录。 索引的分类 按数据结构分类&#xff1a; MySQL 常见索引有 BTree 索引、HASH 索引、Full-Text 索引。 Innodb是MySQL5.5之后的默认存储引擎&#xff0c;BTree索引类型也…

量产工具一一文字系统(三)

目录 前言 一、文字数据结构抽象 1.描述一个文字的位图 2.描述一个字库操作 3.font_manager.h 二、实现Freetype封装 1.freetype.c 三、实现文字管理 1.font_manager.c 四、单元测试 1.font_test.c 2.disp_manager.c 3.disp_manager.h 4.上机测试 前言 前面我们…

从搜索框的提示词中再探防抖和节流

前言 最近逛掘金时&#xff0c;看到了一篇文章。发现是我之前写过的一篇文章主题是防抖和节流的&#xff0c;看防抖时没感觉哪里不一样&#xff0c;但是当我看到节流时发现他的节流怎么这么繁琐(・∀・(・∀・(・∀・*)&#xff1f; 抱着疑惑的想法&#xff0c;我仔细拜读了这…

深度学习简介-AI(三)

深度学习简介 深度学习简介深度学习例子深度学习训练优化1.随机初始化2.优化损失函数3.优化器选择4.选择/调整模型结构 深度学习常见概念隐含层/中间层随机初始化损失函数导数与梯度优化器Mini Batch/epoch 深度学习训练逻辑图 深度学习简介 深度学习例子 猜数字 A: 我现在心…

机器学习Day10:聚类

概念 聚类是按照某个特定标准把一个数据集分割成不同的类或簇&#xff0c;使得同一个簇内的数据对象的相似性尽可能大&#xff0c;同时不在同一个簇中的数据对象的差异性尽可能大 聚类的过程 数据准备&#xff1a;特征标准化和降维特征选择&#xff1a;从最初的特征中选择最…

rust 终端显示综合例程

文章目录 demo程序1 terminal_size2 term_grid3 crossterm3.1 style 4 lscolors准备内容4.1 LsColors 5 users5.1 获取用户/用户组信息5.2 通过缓存获取 demo程序 综合demo 各个库使用demo 1 terminal_size 一个获取终端界面大小的库&#xff0c;支持linux、macos、windows。…

keil5模拟 仿真 报错没有读写权限

debug*** error 65: access violation at 0x4002100C : no write permission 修改为&#xff1a; Dialog DLL默认是DCM3.DLL Parameter默认是-pCM3 应改为 Dialog DLL默认是DARMSTM.DLL Parameter默认是-pSTM32F103VE

【机器学习】机器学习与电商推荐系统的融合应用与性能优化新探索

文章目录 引言第一章&#xff1a;机器学习在电商推荐系统中的应用1.1 数据预处理1.1.1 数据清洗1.1.2 数据归一化1.1.3 特征工程 1.2 模型选择1.2.1 协同过滤1.2.2 矩阵分解1.2.3 基于内容的推荐1.2.4 混合推荐 1.3 模型训练1.3.1 梯度下降1.3.2 随机梯度下降1.3.3 Adam优化器 …

苹果电脑如何录屏,3个方法,帮你搞定

“最近新买了一台苹果电脑&#xff0c;但这是我第一次使用&#xff0c;有很多功能都不太了解。想问问大家苹果电脑如何录屏啊&#xff1f;可以教我一下吗&#xff1f;先提前谢谢大家啦&#xff01;” 苹果电脑以其出色的性能和独特的设计&#xff0c;深受全球用户的喜爱。而在…

Win11禁止右键菜单折叠的方法

背景 在使用windows11的时候&#xff0c;会发现默认情况下&#xff0c;右键菜单折叠了。以至于在使用一些软件的右键菜单时总是要点击“显示更多选项”菜单展开所有菜单&#xff0c;然后再点击。而且每次在显示菜单时先是全部展示&#xff0c;再隐藏一下&#xff0c;看着着实难…

源代码层面分析Appium-inspector工作原理

Appium-inspector功能 Appium Inspector 基于 Appium 框架&#xff0c;Appium 是一个开源工具&#xff0c;用于自动化移动应用&#xff08;iOS 和 Android&#xff09;和桌面应用&#xff08;Windows 和 Mac&#xff09;。Appium 采用了客户端-服务器架构&#xff0c;允许用户通…

51单片机嵌入式开发:STC89C52操作8八段式数码管原理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 STC89C52操作8八段式数码管原理 1 8位数码管介绍1.1 8位数码管概述1.2 8位数码管原理1.3 应用场景 2 原理图图解2.1 74HC573原理2.2 74HC138原理2.3 数码管原理 3 数码管程序…

豪车视频改字,节假日祝福视频改字小程序制作搭建开发

目录 前言&#xff1a; 一、视频改字小程序功能介绍 二、怎么对短视频模板进行改字&#xff1f; 三、这个短视频改字的项目怎么样&#xff1f; 总结&#xff1a; 前言&#xff1a; 现在很多豪车改字的短视频&#xff0c;节假日祝福的小视频&#xff0c;有不少直播在弄这个…

使用 HBuilder X 进行 uniapp 小程序开发遇到的问题合集

文章目录 背景介绍问题集锦1. 在 HBuilderX 点击浏览器运行时&#xff0c;报 uni-app vue3编译器下载失败 安装错误2.在 HBuilderX 点击微信小程序运行时&#xff0c;报 微信开发者工具打开项目失败&#xff0c;请参阅启动日志错误 背景介绍 HBuilder X 版本&#xff1a;HBui…

一文包学会ElasticSearch的大部分应用场合

ElasticSearch 官网下载地址&#xff1a;Download Elasticsearch | Elastic 历史版本下载地址1&#xff1a;Index of elasticsearch-local/7.6.1 历史版本下载地址2&#xff1a;Past Releases of Elastic Stack Software | Elastic ElasticSearch的安装(windows) 安装前所…

Rust学习笔记007:Trait --- Rust的“接口”

Trait 在Rust中&#xff0c;Trait&#xff08;特质&#xff09;是一种定义方法集合的机制&#xff0c;类似于其他编程语言中的接口&#xff08;java&#xff09;或抽象类(c的虚函数)。 。Trait 告诉 Rust 编译器: 某种类型具有哪些并且可以与其它类型共享的功能Trait:抽象的…

【C++】#1

关键字&#xff1a; 基本框架、多个main执行、快捷键、cout规则 基本框架&#xff1a; #include <iostream> using namespace std;int main() {//具体内容return 0; } 多个main函数可执行&#xff1a; 常用快捷键&#xff1a; cout规则&#xff1a;

Qt中文乱码如何解决

目录 一、使用建议 二、其它设置 一、使用建议 Qt对中文的支持不是很友好&#xff0c;使用QtCreator会出现各种乱七八糟的中文代码问题&#xff0c;如何处理这种问题&#xff1f; &#xff08;1&#xff09;粘贴别人的代码时&#xff0c;先在记事本里粘贴一遍&#xff0c;再…

信号与系统-实验5 离散时间系统的时域分析

一、实验目的 1、理解离散信号的定义与时域特征&#xff0c;掌握在时域求解信号的各种变换运算&#xff1b; 2、掌握离散系统的单位响应及其 MATLAB 实现的方法&#xff1b; 3、掌握离散时间序列卷积及其 MATLAB 实现的方法&#xff1b; 4、掌握利用 MATLAB 求解微分方程&a…