自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 第一次按下开灯,第二次按下关灯,通过状态机机制实现该功能

根据实际硬件连接修改LED_PIN和BUTTON_PIN定义。在中断中记录时间戳,通过时间差过滤抖动。实际开发中可结合TLSR芯片的休眠模式。若使用硬件消抖,可适当减小软件去抖时间。按键引脚启用内部上拉,配置下降沿中断。确保SDK中已启用GPIO中断功能。LED引脚设为输出模式并初始置低。在状态转换时直接操作GPIO电平。生产代码建议添加看门狗处理。获取系统时间(单位微秒)按键按下→LED状态翻转。硬件消抖+软件二次验证。清晰的状态机维护逻辑。

2025-04-17 19:55:27 151

原创 状态机button按下亮,再次按下灭

例如,当前的状态函数返回void*,但实际上它们返回的是函数指针,所以类型转换可能存在问题,应该使用正确的函数指针类型。1. 函数指针类型转换:当前State类型定义为typedef void* (*State)(...),但实际返回的是State类型的函数指针,而void*可能导致类型不匹配,编译器可能会有警告。这是一个典型的状态机实现,通过函数指针实现状态转换,避免了复杂的条件判断,使代码更加清晰和易于扩展。好的,我现在需要分析用户提供的C代码,理解其作用和逻辑,然后考虑如何优化它。

2025-04-16 15:31:00 794

原创 小乌龟(TortoiseGit)推送文件到Git:HTTPS与SSH方式是的,小乌龟(TortoiseGit)不仅可以使用HTTPS方式推送文件到Git仓库,也可以使用SSH方式推送。以下是两种方式

是的,小乌龟(TortoiseGit)不仅可以使用HTTPS方式推送文件到Git仓库,也可以使用SSH方式推送。

2025-04-15 14:12:13 288

原创 STM32寄存器结构体详解

2.#define IOMUXC_GPIO1_IO03_GPIO1_IO03 0x020E0068U, 0x5U, 0x00000000U, 0x0U, 0x020E02F4U 的解释。通过宏定义,使用typedef定义的结构体其指针指向基地址读写寄存器状态,结构体中变量保证与寄存器地址对齐。初始化IO复用为GPIO引脚的代码和下面初始化GPIO的代码就是利用结构体指针控制寄存器。在寄存器结构体中添加寄存器的时候一定要注意地址的连续性,如果地址不连续的话,一、寄存器结构体详解。2、添加寄存器结构体。

2024-11-16 23:09:03 637

原创 在单片机中,处于高阻态是什么状态

高阻态(High-Z State)是一种电气状态,表示引脚不对电路施加电压或电流,类似于断开连接。这使得引脚不会对电路产生影响,同时允许外部电路控制或读取该引脚的状态。高阻态在多路复用、总线驱动和模拟输入等应用中具有重要作用。

2024-09-11 19:42:38 2038

原创 驱动DW1000的模块,RST

初始化复位引脚为输出模式,并将其拉低以触发复位。复位完成后,将引脚设置为输入模式,以避免对外部电路产生干扰。程序在复位后等待 2 毫秒,确保 DW1000 芯片能够完成复位并进入稳定状态。这是一种常见的硬件复位处理方式,确保芯片能够在每次启动或重新初始化时处于一个已知的、稳定的状态。

2024-09-11 19:39:07 361 1

原创 GPIO接口的工作原理

2、开漏输出:只有一个N MOS管,没有外部上拉电阻时。N MOS管导通,输出端口信号被拉低,当N MOS管截止,它的 电阻可以看作是无穷大。采用开漏输出时,要想输出高电平,需要通过外部上拉电阻提供驱动输出。1、推挽输出:需要注意的是采用推挽输出时,驱动能力与芯片的IO电流特性有关。控制gpio的输出类型。2.2数据寄存器:读取gpio的输入数据,读取gpio的输出电平。3、复用推挽输出:控制源来自片上外设。4、复用开漏输出:控制源来自片上外设,比如IIC等。三、开漏输出和推挽输出模式的区别。

2024-09-07 11:34:18 458

原创 WS2812B驱动

这段代码通过DMA和定时器来控制WS2812B LED灯条,实现了对灯条上所有LED的颜色控制。关键在于使用DMA进行数据传输以提高效率,并通过定时器生成精确的PWM信号来控制LED的显示。/*** @brief 时钟初始化,配置为72MHz主频(8MHz晶振)* @param 无* @retval 无*///RCC寄存器恢复初始化值//使能外部高速晶振//等待外部高速晶振使能完成/*设置PLL时钟源及倍频系数*///RCC_PLLMul_x(枚举2~16)是倍频值。

2024-09-05 22:54:43 1204

原创 【无标题】

在 C 语言中,floatfloat。

2024-08-23 10:55:14 370

原创 订阅地址的解读

u16 gy_get_sub(u8 sub_type)//获取当前area地址或者sub地址。参数的不同,它返回第一个符合条件的地址(区域地址或子地址),如果没有找到,则返回。数组中获取符合条件的订阅地址。它遍历数组中的每个地址,如果地址在。范围内,则检查地址的低4位来确定是否是区域地址或子地址。

2024-08-21 11:48:55 425

原创 存储器和寄存器各自存储什么数据

存储器(内存)用于存储大量的数据和程序,是计算机的主要存储区域。寄存器用于CPU内部的快速数据处理和控制,是CPU的核心组成部分,用于临时存储和操作数据。寄存器和存储器在计算机中扮演着不同的角色,寄存器主要用于提高CPU操作的效率,而存储器则负责提供长期的数据存储和程序运行环境。4o。

2024-08-13 21:57:44 563

原创 RGB和HSL是两种不同的颜色表示模型,每种模型都有其特定的用途和含义。

RGB是基于颜色光的加色模型,用于电子设备的颜色显示。HSL是基于颜色感知的模型,提供了更直观的颜色调整方式。这些模型有不同的应用场景,了解它们的区别可以帮助你在处理颜色时选择最合适的模型。

2024-08-11 21:41:35 522

原创 进程与线程的关系

在嵌入式系统中,一个CPU可以同时执行多个线程和进程,具体数量取决于CPU的架构和处理能力。进程和线程是操作系统中管理和执行程序的两个基本单位。在嵌入式系统中,CPU的性能和资源有限,因此操作系统在调度进程和线程时需要考虑如何有效利用资源,确保系统稳定性和效率。

2024-08-08 22:01:38 247

原创 DALI的学习

引入了DALI(Digital Addressable Lighting Interface)应用程序的头文件。:定义了一个宏MFM,值为0x80。输入检查:根据当前的操作模式和操作码决定是否进入switch语句。操作模式设置:如果操作码是,检查并更新操作模式。查询操作模式:如果操作码是,发送当前的操作模式。查询制造商特定模式:如果操作码是且操作模式在特定范围内,发送0xFF作为回应。

2024-08-03 22:06:42 1086

原创 dali的main函数

该代码片段展示了使用 DALI(Digital Addressable Lighting Interface)协议的示例代码,主要包括初始化系统时钟、中断处理程序及电源管理的部分实现。

2024-08-03 22:03:25 767

原创 RGB运行逻辑

要控制RGB LED显示曲线图,你需要一个开发板(比如Arduino或Raspberry Pi)以及合适的RGB LED模块。下面提供一个简单的示例,使用Arduino和RGB LED来显示颜色变化。我们将根据输入的电压值来调整RGB LED的颜色。

2024-08-03 21:19:59 939

原创 iic需要加延时吗,SPI需要加延时吗

I2C 总线:可以连接多个设备,通常在数十个范围内。SPI 总线:可以连接多个从设备,具体数量取决于硬件 SPI 控制器的支持,但通常也在数十个范围内,取决于片选线的可用性和控制。综上所述,硬件 I2C 和 SPI 外设在嵌入式系统中能够控制的设备数量是有限的,但具体的上限取决于硬件设计、总线负载能力以及所连接设备的通信速率和特性。

2024-08-01 22:24:17 808

原创 PWM的生成

PWM (Pulse Width Modulation) 的本质是一种数字信号处理技术,它通过周期性地改变脉冲信号的占空比(即高电平持续时间与整个周期的比例)来模拟连续的模拟电压或电流。简单来说,PWM不是直接生成一个连续的电压或电流,而是通过对一系列离散的“开”和“关”状态(即脉冲)进行快速切换来达到控制的目的。

2024-07-31 21:26:41 348

原创 寄存器和硬件的关系

寄存器也是一种存储器,只不过普通的存储器只能写和读。里面的数据并没有赋予什么实际意义。但是寄存器就不一样了,寄存器的每一位数据,都对应了硬件电路的状态。寄存器和外设的硬件电路,是可以进行互动的。所以,程序到这里,我们就可以通过寄存器来控制电路了。

2024-07-31 21:04:00 209

原创 gpio模拟IIC通信

/ 发送数据高位先发送。// 发送设备地址和写操作位。// 发送设备地址和读操作位。// 数据左移一位,准备发送下一位。// 发送寄存器地址。// 读取ACK信号,处理ACK逻辑(根据需要实现)i2c_start();i2c_stop();i2c_stop();

2024-07-31 20:06:22 468

原创 S11059-02DT是一款支持I2C(inter-integrated circuit)接口的颜色传感器

include "tll_cc2540.h" // 假设这是泰凌微8258芯片的头文件,实际名称可能有所不同。// 发送要读取的寄存器地址。// 启动I2C通信,并发送传感器地址和读取命令。// 函数:从S11059-02DT传感器读取颜色数据。// 定义S11059-02DT的I2C地址。// 例如绿色和蓝色通道的读取。// 读取颜色寄存器。

2024-07-30 21:08:53 377

原创 中微c51单片机集成了ADC模块没呢

中微电子的C51系列单片机,如C8051Fxxx系列,通常不会直接集成ADC模块在单片机芯片内部。C8051系列单片机一般是基于传统的8051架构,主要注重低成本、低功耗和小型化,通常不包含复杂的外设如ADC模块。因此,如果在C8051系列单片机上需要使用ADC功能,通常需要通过外部的ADC芯片或模块来实现模拟信号到数字信号的转换。

2024-07-24 23:02:20 1082

原创 C51系列单片机内部并不直接集成ADC

C51系列单片机内部并不直接集成ADC(模数转换器)硬件。C51单片机是一种经典的8位微控制器,如8051系列,包括常见的AT89C51等型号,通常不包含ADC模块在内部。如果需要在C51单片机上使用ADC功能,通常需要外部连接独立的ADC芯片或者使用外围设备(如外部ADC模块)来实现模拟信号到数字信号的转换。外部ADC模块可以通过串口或并行接口与C51单片机进行通信,以便将模拟信号的转换结果传递给单片机进行处理。

2024-07-24 22:58:27 972

原创 产生PWM

ADC和DAC在数字电子系统中都有广泛的应用,它们分别解决了模拟信号到数字信号的转换和数字信号到模拟信号的转换问题。它们的应用覆盖了从传感器信号采集到音频处理、通信系统、医疗设备,以及信号发生器、音频输出、模拟控制等多个领域,是数字系统中不可或缺的功能模块。

2024-07-24 22:57:07 849

原创 PWM的捕获输入

中微电子的C51单片机对PWM的捕获输入是指通过定时器捕获功能来获取PWM信号的周期和占空比等参数。在C51单片机中,一般可以使用定时器的捕获模式来实现这一功能。以下是一个基本的示例代码,展示了如何在C51单片机上实现PWM的捕获输入:// 假设PWM输入连接到P3.2口// 用于存储捕获的计数值// 设置定时器1为工作在方式1,16位定时器模式TH1 = 0;// 清零定时器1的高位计数器TL1 = 0;// 清零定时器1的低位计数器TR1 = 1;// 启动定时器1。

2024-07-24 22:39:08 527

原创 定时器的计数

在C51单片机中,定时器的初值(Timer Initial Value)是根据所需的定时时间或定时周期来计算的。

2024-07-24 21:50:11 986

原创 中微C51对PWM信号的捕获

中微电子的C51单片机对PWM的捕获输入是指通过定时器捕获功能来获取PWM信号的周期和占空比等参数。在C51单片机中,一般可以使用定时器的捕获模式来实现这一功能。以下是一个基本的示例代码,展示了如何在C51单片机上实现PWM的捕获输入:// 假设PWM输入连接到P3.2口// 用于存储捕获的计数值// 设置定时器1为工作在方式1,16位定时器模式TH1 = 0;// 清零定时器1的高位计数器TL1 = 0;// 清零定时器1的低位计数器TR1 = 1;// 启动定时器1。

2024-07-24 21:50:05 444

原创 驱动SSD1306OLED显示屏伪代码

/ 假设显示缓冲区。// 逐字节发送数据。// SSD1306初始化,设置显示参数等。// 填充显示数据到display_buffer。// 发送命令到SSD1306。// 发送数据到SSD1306。// 设置GPIO引脚。

2024-07-23 22:27:21 654

原创 DW1000在STM32环境下实现定位功能

DW1000的定位原理基于超宽带技术,通过测量信号的传播时间来计算距离。使用TDOA或TOA算法可以实现高精度的定位。STM32F103C8芯片可以通过SPI接口与DW1000模块通信,在Keil环境下,你需要编写驱动程序和定位算法来实现完整的定位系统。超宽带信号发射与接收: DW1000发送短脉冲信号,并接收从目标节点反射回来的信号。时间测量: 使用DW1000内置的时间测量单元(Time of Flight Engine),精确测量发送和接收信号之间的时间差。这个时间差直接与信号传播的距离成正比。

2024-07-18 20:04:33 1362

原创 多线程透析--进程和线程底层分析,在系统中线程执行过程

程序启动后分配到内存,资源分配的基本单位,比如qq.exe。

2024-07-12 10:27:15 336

原创 帧在不同领域的大小

例如,常见的标清(720p)每帧大约400KB到1MB,而高清(1080p)或4K则可能达到几兆字节。:在网络传输中,如TCP/IP协议包(每个包可以视为一个“帧”),大小一般受MTU(最大传输单元)限制,通常是几千字节,包括头部信息和实际数据。:在计算机视觉中,单张图片(即一帧)的大小取决于像素数,如常见尺寸的JPEG照片可能是几十KB到几百KB。:游戏中帧数据可能包含图形渲染信息、音频样本等,大小随游戏复杂度变化,可能从几百字节到几兆字节都有可能。帧数据的大小取决于所涉及的具体领域和技术应用。

2024-07-11 19:59:18 784

原创 STM32标准库编程与51单片机直接写寄存器的区别和联系

在学完51单片机之后,我们去学习32的时候,会发现编程的方法有很大的区别,让人非常的不适应,但是通过不断的调用相应外设的库函数之后,你也可以去编程STM32,来实现功能,但是你真的了解标准库吗?因为32的寄存器太多也太复杂,如果说像51单片机来直接对寄存器编程,会非常的麻烦,需要不断的去查询地址,和各个寄存器和各个位的功能,虽然说,他为我们提供了便利,但是,真正的学会这个单片机,还是需要去查阅芯片手册,看看各个寄存器的功能以及单片机整体的架构。在 XX 外设的地址范围内,分布着的就是该外设的寄存器。

2024-07-11 16:49:59 584

原创 LED发光原理

而镓和磷半导体发出的是绿光,通过不断调整砷和镓的混合比例,就可以得到任意颜色的光。led在电路中工作时温度并没有任何变化,因此,led更加节能。smt发光二极管,实际发出蓝色光,只是在上面加了一层黄色,它们结合在一起就会变成白光。3、硅二极管发出的光波长是一千多nm(1000多纳米),人眼只能看到波长为400-700纳米的光。因此发光二极管改用了其他的半导体材料,1、不同的半导体可以发出不同波长的光,我们就看到了不同的颜色。2、 波长取决于是采用的半导体材料。

2024-06-08 21:32:27 288

原创 原理图中VCC,VDD,VEE,VSS,VBAT

VBAT:当电池或者其他电源连接到VBAT的引脚上时,当VDD断电时,可以保存备份寄存器的内容,和维持RTC的功能。如果应用中没有外部电池,VBAT引脚应接到VDD引脚上。VSS:公共连接的意思,一般指电路公共接地电压。vpp:编程/擦除电压。GND:电压参考基点。VEE:负电压供电场效应管的源极。VDD:代表器件内部的工作电压。Vcc:表示输入电路的电压。

2024-06-08 17:35:43 433

原创 SPI原理

SPI总线在进行数据传送时,先传送高位,后传送低位:数据线为高电平表示逻辑1,低电平表示逻辑0.一个字节传送完成后无需应答即可开始下一个字节的传送:SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送。SPI:时钟线在上升沿或者下降沿时,发送器向数据线上发送数据,再紧接着的下降沿或者上升沿时接收器从数据线上读取数据。同步通信:通过时钟线,时钟线在低电平,数据线去改变数据。

2024-05-12 20:59:27 422

原创 QT C++学习one day

1.命名空间:在c++中,名称可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好的控制标识符的作用域。1.1命名空间使用语法创建一个命名空间//定义一个名字为A的命名空间(变量、函数)变量 int a函数。

2024-03-26 21:19:14 1340

原创 数据结构二

结构体指针和结构体本身的大小是不同的。结构体指针的大小取决于编译器的架构和配置,通常是 4 字节或 8 字节(在 32 位系统中通常是 4 字节,在 64 位系统中通常是 8 字节),它存储的是指向结构体实例的内存地址。问:结构体指针、指针变量是占4个字节的,结构体指针指向下一个结构体,它是怎么存储了整个结构体里面的数据呢?当您通过结构体指针访问结构体的数据时,指针实际上是指向结构体在内存中的起始位置的地址。结构体的每个成员变量在内存中的地址是连续的,因此通过指针可以顺序访问结构体中的每个成员变量。

2024-03-23 21:30:28 217

原创 按键状态机的逻辑

当按键按下时,如果之前处于空闲状态,则状态转换为按下状态;当按键释放时,如果之前处于按下状态,则转换为释放状态;如果按键按下一段时间后释放,且之前处于释放状态,则状态转换为长按状态。2、状态转换:根据按键的输入和当前状态,确定下一个状态。例如,如果按键在按下状态并持续一段时间后释放,则状态从按下转换到释放;它通过在不同的状态下对按键的输入进行处理,实现对按键事件的有效检测和处理。按键状态机通过持续检测按键的状态并根据状态转换规则来处理按键事件,实现了对按键输入的灵活控制和处理。

2024-03-23 14:27:25 453

原创 SPI111

SDI -主设备数据输入,从设备数据输出 对应MISO。SDO -主设备数据输出,从设备数据输入 对应MOSI。CS -从设备使能信号,由主设备控制。SCLK- 时钟信号,由主设备产生。

2024-02-24 19:28:08 172

原创 泰凌微8258相关问题归纳

如果是这样的话,这将是一个不支持的功能。2、mesh_tx_cmd_rsp(mesh_tx_sensor_st_rsp也是调用这个函数)是在节点接收到命令后回复用的接口,这个函数在发送的时候会使用解密所收命令成功的app_key. 比如: 收到一个onoff set命令,并用app_key index 1解密成功,那么在mesh_tx_cmd_rsp回复状态的时候会用appkey_index 1。我这里有个应用,有个器件是iic接口的,接入8266,这个器件接口3根线,2根是i2c,一根是中断。

2024-01-18 19:17:59 1940 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除