- 博客(63)
- 收藏
- 关注
原创 红外遥控器NEC协议
在TIMER定时器的函数中,若使用的是上篇文章的函数记得要删除NVIC相应的内容。也可直接使用本期附件的函数。若想使用别的引脚作为输入引脚,要记得查询表格改变中断服务函数。下期会更新格力空调遥控器的解码教程。//初始化引脚和中断//获取长摁标志位uint8_t Get_IR_Command(void)//获取命令uint8_t Get_IR_Adress(void)//获取地址//获取解码标志位好的,这是一个红外遥控器解码程序。我来详细解释每个位判断和移位操作,配合具体的数据示例。执行时机。
2026-01-07 10:50:08
517
原创 IWDG独立看门狗
独立看门狗(IWDG)是一种通过递减计数器实现系统复位的机制,其时钟由独立RC振荡器提供。当计数器归零时,系统将复位除特定寄存器外的所有状态。IWDG主要用于检测程序跑飞等异常情况,适用于对稳定性要求高但时间精度要求不严的场合。其通过定期"喂狗"防止误复位,是异常处理的最后保障手段。实际应用中应优先避免异常发生,而非依赖看门狗复位。
2025-12-21 13:45:43
183
原创 STM32各时钟的介绍,中断
正在执行中断程序的时候,这个时候有可能被另外一个中断源给中断,CPU转而去执行另外一个中断源的中断处理程序,这叫中断嵌套。在主程序运行过程中,出现了特定事件,使得CPUY暂停当前正在运行的程序,转而去处理这个事件,等这个事件处理完成之后,CPU再回到刚才被打断的位置继续处理,这就是中断。处理器的中断可以是电平形式的,也可以是脉冲形式的,这个中断控制器就可以处理任何中断源。比如我们要检测按键是否按下,如果没有中断,则需要循环的方式不断的去检测按键对应的IO口的电平,这是比较耗费CPU的时间的,
2025-11-09 17:11:06
688
原创 PWM正相输出和PWM反相输出的各是怎样的工作原理
对于反相输出,需要设置的是低电平时间 = 周期 - 高电平时间 = 20ms - 0.5ms = 19.5ms。对于GPIO_PC4的反相输出特性,需要特别注意:要得到特定占空比的高电平,需要设置的是低电平时间的计数值。工作原理:计数器从0开始递增,当计数器值小于占空比设定值时输出高电平,大于等于占空比设定值时输出低电平。工作原理:计数器从0开始递增,当计数器值小于占空比设定值时输出低电平,大于等于占空比设定值时输出高电平。:由于GPIO_PC4是反相输出,我们需要计算的是低电平时间而不是高电平时间。
2025-09-04 17:37:30
903
原创 8253芯片存储
好的,我需要分析用户提供的这个图片中的文本内容,并解释其中各个字段(text、data、bss、dec、hex)代表的程序大小。常见的编译器或链接器在生成可执行文件后,会输出各个段(如text、data、bss)的大小,以及总大小(dec、hex)。另外,用户提到“filename里面那个数据代表了程序的大小”,需要确认是指文件名中的某个部分还是输出行中的某个字段。3. **bss**:未初始化的全局变量和静态变量的数据段,这部分在程序加载时会被初始化为零。4. **dec**:十进制表示的总体积大小。
2025-05-21 11:46:32
861
原创 单片机运行的时候,是RAM的大小决定运行代码量还是flash决定或者ROM决定
所以,代码本身是存放在Flash或ROM中的,而运行时的临时数据存放在RAM里。但一般来说,对于大多数常见的单片机来说,Flash/ROM存储代码,RAM存储运行时数据,这个原则是通用的。嗯,用户问的是单片机运行时,到底是RAM的大小决定能运行多少代码,还是Flash或者ROM决定的。这时候需要解释,即使代码存储在Flash中,运行时的一些数据结构还是需要RAM,如果RAM不足,程序可能会崩溃或者无法正常执行。代码量主要由Flash或ROM的容量决定,而RAM的大小影响程序运行时的数据处理能力。
2025-05-20 17:24:21
448
原创 第一次按下开灯,第二次按下关灯,通过状态机机制实现该功能
根据实际硬件连接修改LED_PIN和BUTTON_PIN定义。在中断中记录时间戳,通过时间差过滤抖动。实际开发中可结合TLSR芯片的休眠模式。若使用硬件消抖,可适当减小软件去抖时间。按键引脚启用内部上拉,配置下降沿中断。确保SDK中已启用GPIO中断功能。LED引脚设为输出模式并初始置低。在状态转换时直接操作GPIO电平。生产代码建议添加看门狗处理。获取系统时间(单位微秒)按键按下→LED状态翻转。硬件消抖+软件二次验证。清晰的状态机维护逻辑。
2025-04-17 19:55:27
224
原创 状态机button按下亮,再次按下灭
例如,当前的状态函数返回void*,但实际上它们返回的是函数指针,所以类型转换可能存在问题,应该使用正确的函数指针类型。1. 函数指针类型转换:当前State类型定义为typedef void* (*State)(...),但实际返回的是State类型的函数指针,而void*可能导致类型不匹配,编译器可能会有警告。这是一个典型的状态机实现,通过函数指针实现状态转换,避免了复杂的条件判断,使代码更加清晰和易于扩展。好的,我现在需要分析用户提供的C代码,理解其作用和逻辑,然后考虑如何优化它。
2025-04-16 15:31:00
887
原创 小乌龟(TortoiseGit)推送文件到Git:HTTPS与SSH方式是的,小乌龟(TortoiseGit)不仅可以使用HTTPS方式推送文件到Git仓库,也可以使用SSH方式推送。以下是两种方式
是的,小乌龟(TortoiseGit)不仅可以使用HTTPS方式推送文件到Git仓库,也可以使用SSH方式推送。
2025-04-15 14:12:13
739
原创 STM32寄存器结构体详解
2.#define IOMUXC_GPIO1_IO03_GPIO1_IO03 0x020E0068U, 0x5U, 0x00000000U, 0x0U, 0x020E02F4U 的解释。通过宏定义,使用typedef定义的结构体其指针指向基地址读写寄存器状态,结构体中变量保证与寄存器地址对齐。初始化IO复用为GPIO引脚的代码和下面初始化GPIO的代码就是利用结构体指针控制寄存器。在寄存器结构体中添加寄存器的时候一定要注意地址的连续性,如果地址不连续的话,一、寄存器结构体详解。2、添加寄存器结构体。
2024-11-16 23:09:03
847
原创 在单片机中,处于高阻态是什么状态
高阻态(High-Z State)是一种电气状态,表示引脚不对电路施加电压或电流,类似于断开连接。这使得引脚不会对电路产生影响,同时允许外部电路控制或读取该引脚的状态。高阻态在多路复用、总线驱动和模拟输入等应用中具有重要作用。
2024-09-11 19:42:38
3013
原创 驱动DW1000的模块,RST
初始化复位引脚为输出模式,并将其拉低以触发复位。复位完成后,将引脚设置为输入模式,以避免对外部电路产生干扰。程序在复位后等待 2 毫秒,确保 DW1000 芯片能够完成复位并进入稳定状态。这是一种常见的硬件复位处理方式,确保芯片能够在每次启动或重新初始化时处于一个已知的、稳定的状态。
2024-09-11 19:39:07
481
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
599
原创 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
1586
原创 订阅地址的解读
u16 gy_get_sub(u8 sub_type)//获取当前area地址或者sub地址。参数的不同,它返回第一个符合条件的地址(区域地址或子地址),如果没有找到,则返回。数组中获取符合条件的订阅地址。它遍历数组中的每个地址,如果地址在。范围内,则检查地址的低4位来确定是否是区域地址或子地址。
2024-08-21 11:48:55
531
原创 存储器和寄存器各自存储什么数据
存储器(内存)用于存储大量的数据和程序,是计算机的主要存储区域。寄存器用于CPU内部的快速数据处理和控制,是CPU的核心组成部分,用于临时存储和操作数据。寄存器和存储器在计算机中扮演着不同的角色,寄存器主要用于提高CPU操作的效率,而存储器则负责提供长期的数据存储和程序运行环境。4o。
2024-08-13 21:57:44
716
原创 RGB和HSL是两种不同的颜色表示模型,每种模型都有其特定的用途和含义。
RGB是基于颜色光的加色模型,用于电子设备的颜色显示。HSL是基于颜色感知的模型,提供了更直观的颜色调整方式。这些模型有不同的应用场景,了解它们的区别可以帮助你在处理颜色时选择最合适的模型。
2024-08-11 21:41:35
873
原创 进程与线程的关系
在嵌入式系统中,一个CPU可以同时执行多个线程和进程,具体数量取决于CPU的架构和处理能力。进程和线程是操作系统中管理和执行程序的两个基本单位。在嵌入式系统中,CPU的性能和资源有限,因此操作系统在调度进程和线程时需要考虑如何有效利用资源,确保系统稳定性和效率。
2024-08-08 22:01:38
277
原创 DALI的学习
引入了DALI(Digital Addressable Lighting Interface)应用程序的头文件。:定义了一个宏MFM,值为0x80。输入检查:根据当前的操作模式和操作码决定是否进入switch语句。操作模式设置:如果操作码是,检查并更新操作模式。查询操作模式:如果操作码是,发送当前的操作模式。查询制造商特定模式:如果操作码是且操作模式在特定范围内,发送0xFF作为回应。
2024-08-03 22:06:42
1164
原创 dali的main函数
该代码片段展示了使用 DALI(Digital Addressable Lighting Interface)协议的示例代码,主要包括初始化系统时钟、中断处理程序及电源管理的部分实现。
2024-08-03 22:03:25
846
原创 RGB运行逻辑
要控制RGB LED显示曲线图,你需要一个开发板(比如Arduino或Raspberry Pi)以及合适的RGB LED模块。下面提供一个简单的示例,使用Arduino和RGB LED来显示颜色变化。我们将根据输入的电压值来调整RGB LED的颜色。
2024-08-03 21:19:59
1091
原创 iic需要加延时吗,SPI需要加延时吗
I2C 总线:可以连接多个设备,通常在数十个范围内。SPI 总线:可以连接多个从设备,具体数量取决于硬件 SPI 控制器的支持,但通常也在数十个范围内,取决于片选线的可用性和控制。综上所述,硬件 I2C 和 SPI 外设在嵌入式系统中能够控制的设备数量是有限的,但具体的上限取决于硬件设计、总线负载能力以及所连接设备的通信速率和特性。
2024-08-01 22:24:17
1105
原创 PWM的生成
PWM (Pulse Width Modulation) 的本质是一种数字信号处理技术,它通过周期性地改变脉冲信号的占空比(即高电平持续时间与整个周期的比例)来模拟连续的模拟电压或电流。简单来说,PWM不是直接生成一个连续的电压或电流,而是通过对一系列离散的“开”和“关”状态(即脉冲)进行快速切换来达到控制的目的。
2024-07-31 21:26:41
476
原创 寄存器和硬件的关系
寄存器也是一种存储器,只不过普通的存储器只能写和读。里面的数据并没有赋予什么实际意义。但是寄存器就不一样了,寄存器的每一位数据,都对应了硬件电路的状态。寄存器和外设的硬件电路,是可以进行互动的。所以,程序到这里,我们就可以通过寄存器来控制电路了。
2024-07-31 21:04:00
277
原创 gpio模拟IIC通信
/ 发送数据高位先发送。// 发送设备地址和写操作位。// 发送设备地址和读操作位。// 数据左移一位,准备发送下一位。// 发送寄存器地址。// 读取ACK信号,处理ACK逻辑(根据需要实现)i2c_start();i2c_stop();i2c_stop();
2024-07-31 20:06:22
608
原创 S11059-02DT是一款支持I2C(inter-integrated circuit)接口的颜色传感器
include "tll_cc2540.h" // 假设这是泰凌微8258芯片的头文件,实际名称可能有所不同。// 发送要读取的寄存器地址。// 启动I2C通信,并发送传感器地址和读取命令。// 函数:从S11059-02DT传感器读取颜色数据。// 定义S11059-02DT的I2C地址。// 例如绿色和蓝色通道的读取。// 读取颜色寄存器。
2024-07-30 21:08:53
478
原创 中微c51单片机集成了ADC模块没呢
中微电子的C51系列单片机,如C8051Fxxx系列,通常不会直接集成ADC模块在单片机芯片内部。C8051系列单片机一般是基于传统的8051架构,主要注重低成本、低功耗和小型化,通常不包含复杂的外设如ADC模块。因此,如果在C8051系列单片机上需要使用ADC功能,通常需要通过外部的ADC芯片或模块来实现模拟信号到数字信号的转换。
2024-07-24 23:02:20
1247
原创 C51系列单片机内部并不直接集成ADC
C51系列单片机内部并不直接集成ADC(模数转换器)硬件。C51单片机是一种经典的8位微控制器,如8051系列,包括常见的AT89C51等型号,通常不包含ADC模块在内部。如果需要在C51单片机上使用ADC功能,通常需要外部连接独立的ADC芯片或者使用外围设备(如外部ADC模块)来实现模拟信号到数字信号的转换。外部ADC模块可以通过串口或并行接口与C51单片机进行通信,以便将模拟信号的转换结果传递给单片机进行处理。
2024-07-24 22:58:27
1150
原创 产生PWM
ADC和DAC在数字电子系统中都有广泛的应用,它们分别解决了模拟信号到数字信号的转换和数字信号到模拟信号的转换问题。它们的应用覆盖了从传感器信号采集到音频处理、通信系统、医疗设备,以及信号发生器、音频输出、模拟控制等多个领域,是数字系统中不可或缺的功能模块。
2024-07-24 22:57:07
1192
原创 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
690
原创 中微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
548
原创 驱动SSD1306OLED显示屏伪代码
/ 假设显示缓冲区。// 逐字节发送数据。// SSD1306初始化,设置显示参数等。// 填充显示数据到display_buffer。// 发送命令到SSD1306。// 发送数据到SSD1306。// 设置GPIO引脚。
2024-07-23 22:27:21
728
原创 DW1000在STM32环境下实现定位功能
DW1000的定位原理基于超宽带技术,通过测量信号的传播时间来计算距离。使用TDOA或TOA算法可以实现高精度的定位。STM32F103C8芯片可以通过SPI接口与DW1000模块通信,在Keil环境下,你需要编写驱动程序和定位算法来实现完整的定位系统。超宽带信号发射与接收: DW1000发送短脉冲信号,并接收从目标节点反射回来的信号。时间测量: 使用DW1000内置的时间测量单元(Time of Flight Engine),精确测量发送和接收信号之间的时间差。这个时间差直接与信号传播的距离成正比。
2024-07-18 20:04:33
1799
原创 帧在不同领域的大小
例如,常见的标清(720p)每帧大约400KB到1MB,而高清(1080p)或4K则可能达到几兆字节。:在网络传输中,如TCP/IP协议包(每个包可以视为一个“帧”),大小一般受MTU(最大传输单元)限制,通常是几千字节,包括头部信息和实际数据。:在计算机视觉中,单张图片(即一帧)的大小取决于像素数,如常见尺寸的JPEG照片可能是几十KB到几百KB。:游戏中帧数据可能包含图形渲染信息、音频样本等,大小随游戏复杂度变化,可能从几百字节到几兆字节都有可能。帧数据的大小取决于所涉及的具体领域和技术应用。
2024-07-11 19:59:18
1103
原创 STM32标准库编程与51单片机直接写寄存器的区别和联系
在学完51单片机之后,我们去学习32的时候,会发现编程的方法有很大的区别,让人非常的不适应,但是通过不断的调用相应外设的库函数之后,你也可以去编程STM32,来实现功能,但是你真的了解标准库吗?因为32的寄存器太多也太复杂,如果说像51单片机来直接对寄存器编程,会非常的麻烦,需要不断的去查询地址,和各个寄存器和各个位的功能,虽然说,他为我们提供了便利,但是,真正的学会这个单片机,还是需要去查阅芯片手册,看看各个寄存器的功能以及单片机整体的架构。在 XX 外设的地址范围内,分布着的就是该外设的寄存器。
2024-07-11 16:49:59
715
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅