自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Keil MDK5新建工程】STM32F103C8T6

工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run。工程里对应建立Core、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里。工程文件夹里建立Core、Library、User等文件夹,复制固件库里面的文件到工程文件夹。工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER。工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹。三、工程架构及新建工程步骤。

2024-04-18 21:09:57 324

原创 【STM32CubeIDE 1.15.0】汉化包带路径配置过程

IDE软件板载汉化包。ST官网IDE下载链接。

2024-04-18 21:09:41 239

原创 【VSCode+Keil5+STM32CubeMX】开发环境配置、VSCode同步Keil编译

从0到1搭建VS Code + Keil5 + STM32CubeMX开发环境一、软件下载二、软件安装三、配置环境四、验证开发环境五、Keil与VS Code的同步

2024-04-02 14:41:18 1155

原创 【正点原子STM32】CAN串行通信总线协议(CAN总线特点、应用场景、物理层、协议层、位时序、硬件同步和再同步、总线仲裁、STM32CAN控制器、CAN相关寄存器和HAL库驱动、CAN基本驱动步骤)

此外,随着技术进步和需求增加,出现了CAN FD(CAN with Flexible Data-rate)标准,它在保持与经典CAN兼容的同时,大幅提升了数据传输速率,理论上最高可达5Mbps或更高,同时还增加了数据帧的有效负载长度,更适合于大数据量传输的应用场景。:在多主控网络中,CAN的物理层通过比较总线上的电位变化来实现非破坏性的仲裁,即当两个或多个节点同时尝试发送数据时,具有较低优先级(较高ID)的节点会自动停止发送,转而监听总线上的数据,从而避免了数据冲突和总线冲突。

2024-03-13 19:21:51 1043

原创 【正点原子STM32】RS485串行通信标准(串口基础协议 和 MODBUS协议、总线连接、通信电路、通信波形图、RS485相关HAL库驱动、RS485配置步骤、)

RS485是一种串行通信标准,它利用差分信号对(通常是一对非绝缘的导线A和B)来传输数据,由于其差分信号的性质,使得它具有很强的抗共模干扰能力,特别适用于工业控制环境,能够确保在长距离、复杂电磁环境下稳定通信。:是一种全双工、差分传输的串行通信标准,它具有较高的抗干扰能力和较长的传输距离,支持多点传输,每个信号都有明确的方向(发送和接收分离),常用于工业控制领域。:是一种逻辑电平标准,通常在集成电路内部或者集成电路之间近距离通信时使用,它的高低电平相对较低,通常为3.3V或5V表示逻辑1,0V表示逻辑0。

2024-03-13 12:08:02 1801

原创 【正点原子STM32】QSPI四线SPI模式(Quad-SPI存储器、间接模式、状态轮询模式、内存映射模式、命令序列、QSPI基本使用步骤、SPI FLASH基本使用步骤)

QSPI介绍总的来说,SPI的这几个变种主要是为了提高数据传输效率,同时在一定程度上减小接口引脚数量,但也会带来一些限制,如在高数据速率下只能进行半双工通信。而在实际应用中,尤其是在与闪存设备交互时,SPI模式的选择需要根据系统的性能需求、空间占用以及功耗预算等因素综合考虑。

2024-03-12 20:30:35 2033

原创 【正点原子STM32】SPI总线协议(集成电路间通信接口标准、SPI工作原理、时钟极性(CPOL)和时钟相位(CPHA)、SPI相关寄存器和HAL库驱动、NOR FLASH基于SPI接口基本驱动步骤)

SPI(Serial Peripheral Interface)是一种常见的集成电路间通信接口标准,它允许一个主设备与一个或多个从设备之间进行全双工同步串行通信。SPI接口以其高速、灵活和简单易用的特性被广泛应用于嵌入式系统和众多电子设备中。主要应用领域包括但不限于:SPI接口通常由四条信号线组成,包括:此外,某些SPI实现可能还包括额外的控制线或中断线,以便增强功能或优化通信。SPI的最大特点是它的高速同步通信能力,使其在需要高速数据传输和精确同步的场合尤为适用。SPI和IIC(I²C)都是常见的串行通

2024-03-12 17:48:33 1190

原创 【正点原子STM32】IIC-六轴传感器实验(SH3001集成三轴加速度计和三轴陀螺仪于一体的六轴姿态传感器、结构工作原理、电源模式、寄存器、时序、驱动步骤、姿态解算)

SH3001是一款由Senodia公司生产的集成三轴加速度计和三轴陀螺仪于一体的六轴姿态传感器,它能够实时测量芯片沿X、Y、Z轴的加速度和角速度,通过融合算法(如互补滤波、卡尔曼滤波等)可以计算出芯片在三维空间中的姿态角(如俯仰角、翻滚角、航向角)。其主要特性包括:陀螺仪量程:支持多个量程选项,分别为±125 dps、±250 dps、±500 dps、±1000 dps和±2000 dps,表示陀螺仪能够测量的角速度范围。陀螺仪灵敏度:对应陀螺仪不同量程,有不同的灵敏度,例如在±125 dps量程下,灵敏

2024-03-11 21:11:53 1354 3

原创 【正点原子STM32】IIC-磁力计实验(地磁场、磁力计校准、ST480MC高精度三轴磁力计、ST480MC的工作模式、寄存器、命令、ST480MC时序、ST480MC驱动步骤)

因其小巧、精准和低功耗的特点,ST480MC常被应用于需要精确磁场测量和方向感知的场合,如电子罗盘、智能手机的指南针功能、平板电脑、手持导航设备以及其他需要磁定向或地磁信号检测的智能硬件产品中。A2 - A0:器件地址引脚,用于在多设备I²C总线系统中区分不同器件,通过连接至高电平或低电平,可以设置不同的7位I²C地址,注意这个引脚不能悬空。:在X轴和Y轴上,其分辨率为0.15微特斯拉(uT)每最小可寻址位(LSB),而在Z轴上分辨率稍低,为0.25 uT/LSB,确保了较高的测量精度。

2024-03-11 19:08:26 1065

原创 【正点原子STM32】IIC-光环境传感器实验(AP3216C环境传感器组件、AP3216寄存器、AP3216读写时序、寻址、AP3216驱动步骤、IR传感器、PS传感器、ALS传感器)

当主设备想要向AP3216C写入数据时,会在设备地址0x1E的基础上左移1位(乘以2),然后在其最低位(LSB)附加一个0,形成完整的8位写操作地址,即0x3C(0x1E

2024-03-09 08:39:06 1054

原创 【正点原子STM32】IIC-IO扩展实验(PCF8574(IO扩展芯片)I²C总线接口的8位并行I/O端口扩展器、PCF8574寻址、写/读操作时序、中断引脚、PCF8574驱动步骤)

当作为输入口使用时,为了获得正确的输入状态,需要将对应的内部输出驱动设置为高电平(上拉),这样在外部设备不驱动的情况下,端口就能通过内部上拉电阻检测到高电平输入。综上所述,PCF8574T芯片非常适用于需要扩展I/O资源的嵌入式系统,特别适合在I/O口有限或者布线困难的场合,通过一根I²C总线就可轻松管理和控制大量的外围设备。:PCF8574T还有一个中断输出引脚(INT),当任一输入口的状态发生变化时,可以触发此中断信号,告知主控制器有输入状态的变化,方便系统做出及时响应。一、PCF8574简介。

2024-03-09 08:38:41 1386 2

原创 【正点原子STM32】IIC总线协议(拓扑图、IIC协议的核心特征、IIC协议的时序、AT24C02基于EEPROM非易失性存储器件、AT24C02读写时序、AT24C02驱动步骤、IIC通信失败)

在实际应用中,IIC总线因其简单易用、占用IO口少、支持热插拔和故障隔离等特点,常被用于各种嵌入式系统中不同器件间的通信,如温度传感器、EEPROM、ADC、DAC等。总之,IIC总线协议作为一种简洁高效的通信协议,广泛应用于传感器、存储器、微控制器等各种集成芯片间的通信,尤其适用于那些只需要少量线路连接和较低数据速率的应用场景。总结来说,IIC协议通过严格的时序规定保证了通信的可靠性和准确性,尤其是在多设备共用一条总线的情况下,这种有序的时序控制尤为重要。一、IIC总线协议介绍。一、IIC总线协议介绍。

2024-03-08 19:08:49 1684

原创 【正点原子STM32】DAC数模转换器(DAC特性、DAC工作原理、DAC输出实验配置步骤、DAC输出三角波实验、DAC输出正弦波实验配置步骤、PWM + RC滤波器、PWM DAC技术实现原理)

DAC的基本工作原理是根据输入的数字信号值,在一定的时间间隔内产生相应的模拟输出。RC低通滤波器是一种常见的模拟电路,它由电阻R和电容C组成,主要功能是允许低频信号顺利通过,同时衰减或抑制高频信号,起到平滑输出电压、减少噪声的作用。则是为DAC的模拟部分提供的工作电压,其电压范围要求在2.4V至3.6V之间,确保DAC能在指定电压范围内正常工作并提供准确的模拟信号输出。总之,DAC是数字电路与模拟电路之间的重要接口,它实现了数字信号到模拟信号的转换,为数字系统与模拟系统之间的数据交互提供了基础。

2024-03-08 16:22:22 1716

原创 【正点原子STM32】ADC模数转换器(ADC类型、ADC工作原理、单通道ADC采集、单通道ADC采集(DMA读取)、多通道ADC采集(DMA读取)、单通道ADC过采样、内部温度传感器、光敏传感器)

对于STM32系列,如果ADC的参考电压(VREF+)为3.3V,且分辨率为12位,则最小刻度为 ( \frac{3.3V}{2^{12}} ) ,即 ( \frac{3.3V}{4096} )。通过连接至ADC(模数转换器)的方式,可以读取电压的变化,从而得知光强的变化情况。它的位数决定了 ADC 的分辨率。在逐次逼近型 ADC 中,数码寄存器通常是一个 N 位的寄存器,其中 N 表示 ADC 的分辨率。这种光电流的变化是非线性的,即光强增大时,电流不是简单地线性增加,而是呈现出一种非线性的变化。

2024-03-05 15:39:39 1784

原创 【正点原子STM32】DMA直接存储器访问(DMA传输、DMA请求、DMA通道、DMA优先级、DMA处理过程、DMA相关寄存器和HAL库驱动、DMA配置步骤、DMAMUX DMA请求复用器)

一、DMA介绍一、DMA介绍DMA(直接存储器访问):DMA是一种计算机系统中的重要技术,它允许数据在内存和外设之间直接传输,而无需CPU的直接干预。这种直接传输的方式可以显著提高数据传输的效率,因为它可以在数据传输过程中不占用CPU的时间,从而使CPU能够专注于执行其他任务。DMA工作原理是在CPU控制下配置好DMA的参数后,DMA控制器会独立地从一个地址空间(通常是内存)中获取数据,并将数据传输到另一个地址空间(可以是内存或者外设)。

2024-03-04 20:38:54 1465

原创 【正点原子STM32】PVD低功耗实验 – 电源监控(POR/PDR监控器、PVD监控器、 BOR监控器、AVD监控器、VBAT阈值、温度阈值、PVD相关寄存器和HAL库驱动、PVD的使用步骤)

(可编程电压检测器):监控芯片的供电电压(通常为VDD),并在电压低于或高于特定阈值时触发相应的中断或复位。通过调用以上的HAL库驱动函数,并结合相关的结构体配置,可以方便地实现对PVD功能的配置和使能,从而实现对供电电压的监测和管理。(欠压复位):在供电电压低于特定阈值时触发复位操作,以确保系统在电源电压不足时不会工作,从而避免不可预测的行为或数据损坏。通过以上步骤,可以完成对PVD功能的配置和使用,确保系统在供电电压异常时能够及时响应并采取相应的措施,保障系统的稳定运行。

2024-03-04 10:19:23 1032

原创 【正点原子STM32】LOW POWER(PWR)低功耗(电源系统结构、低功耗模式(睡眠、停止、待机)、稳压器、WFI任意中断和WFE唤醒事件命令、低功耗相关寄存器和HAL库驱动、低功耗模式配置步骤)

这些稳压器可以提供不同的输出电压,并且具有不同的性能特性,以满足不同应用场景的需求。在待机模式下,为了保持系统状态的一致性,除了待机电路和备份域外,寄存器和存储器的内容通常是保持不变的。综上所述,STM32 F1系列的电源系统结构通过提供主要电源电压和模拟外设独立供电来保证系统的稳定性和精确度,同时还提供备用电源模式以保障关键功能在主要电源失效时的正常工作。低功耗设计通常意味着电路在操作时消耗的能量较少,因此可以采用更简单、更低成本的电源设计,减少对散热和电源管理的要求,降低产品的整体成本和复杂度。

2024-03-02 18:15:20 1057

原创 【正点原子STM32】RNG硬件随机数(随机数发生器、真随机和伪随机、应用场景、RNG结构和原理、RNG相关寄存器和HAL库驱动、RNG基本驱动步骤)

真随机数由物理过程生成,具有完全随机的性质,而伪随机数则是通过确定性算法计算出来的,虽然看起来像是随机的,但是在一定条件下可能会被预测到。总体而言,RNG通过模拟电路实现,利用环形振荡器、LFSR和时钟检查器等组件,生成随机数种子,并在检测到异常情况时产生中断,确保随机数生成的安全性和可靠性。:在游戏开发中,随机数被广泛用于生成游戏中的随机事件、随机地图、随机怪物属性等,增加游戏的趣味性和挑战性。:在网络安全和用户验证中,随机数用于生成验证码,增加系统的安全性,防止机器人攻击和恶意访问。

2024-03-02 07:33:43 1029

原创 【正点原子STM32】RTC实时时钟(RTC方案、BCD码、时间戳、RTC相关寄存器和HAL库驱动、RTC基本配置步骤、RTC基本驱动步骤、时间设置和读取、RTC闹钟配置和RTC周期性自动唤醒配置)

RTC(Real Time Clock,实时时钟)是一种专门用于记录时间的设备或模块,通常作为计算机系统中的一部分存在。其本质是一个计数器,以秒为单位进行计数,可以提供精确的时间信息,并且具有以下特性:提供时间信息: RTC能够提供当前的时间,通常以秒钟数的形式表示,但也可以提供更精细的时间分辨率,如毫秒或微秒级别。持久性: RTC具有持久性,即在MCU(Microcontroller Unit,微控制器单元)掉电后仍然能够继续运行,因此能够确保时间信息的连续性和准确性。低功耗: RTC通常具有低功耗特性,

2024-03-01 07:11:17 1792 1

原创 【正点原子STM32】USMART串口调试组件(USMART主要特点、USMART原理、USMART组成、USMART扫描函数、USMART移植、USAMRT使用、USAMRT源码)

使用USMART,开发者可以在不修改代码的情况下,通过串口发送指令来调用预先编写的函数,并且可以实时观察函数的返回值或输出结果。通过USMART,用户可以直接通过串口调用已编写的函数,并且可以随意修改函数参数,从而快速进行代码调试和功能验证。然后将参数传递给该函数指针所指向的函数,并执行该函数。如果提取出的函数名与本地函数名表中的函数名不匹配,则提示用户输入的函数名有误或者不存在,报错并等待下一次输入。通过这样的流程,USMART实现了通过串口调用用户编写的函数,方便快捷地进行代码调试和功能验证。

2024-03-01 03:50:06 1304

原创 【正点原子STM32】LTDC LCD(RGB屏)实验(TFT LCD、RGB LCD信号线、驱动模式、LTDC驱动LCD-TFT显示器、LTDC控制器、DMA2D-GPU、DMA2D颜色填充步骤)

一、RGB LCD简介二、LTDC介绍三、RGB屏基本驱动步骤四、编程实战1五、DMA2D介绍六、DMA2D颜色填充的具体步骤七、编程实战2八、总结嵌入式图形系统通常由微处理器、帧缓冲器、显示控制器和显示屏等组成,其工作流程如下:微处理器(Microprocessor): 微处理器负责执行程序,并根据程序输出生成要显示的图像数据。这些图像数据通常以像素为单位,表示图像中每个像素的颜色和位置等信息。帧缓冲器(Frame Buffer): 帧缓冲器是一块内存区域,用于存储要显示图像的像素数据。在帧

2024-02-29 08:29:18 1710 1

原创 【正点原子STM32】FSMC_FMC——NAND FLASH实验(存储原理、存储结构、坏块管理和磨损均衡、控制命令、FMC-NAND FLASH接口、NAND FLASH驱动步骤)

一、NAND FLASH介绍1.1、NAND FLASH简介1.2、NAND FLASH寻址1.3、NAND FLASH控制命令1.4、NAND FLASH难点二、FMC-NAND FLASH接口介绍2.1、FMC-NAND FLASH控制器简介2.2、FMC-NAND FLASH访问参数介绍2.3、STM32的FMC控制器硬件ECC2.4、FMC-NAND FLASH控制器相关寄存器介绍2.5、FMC-NAND FLASH控制器相关HAL库函数介绍三、NAND FLASH驱动步骤

2024-02-29 08:02:33 1021 2

原创 【正点原子STM32】FSMC_FMC——SDRAM实验(存储器类型、SDRAM操作命令、SDRAM工作流程(初始化、读和写)、FMC相关寄存器和HAL库驱动、SDRAM模块驱动步骤)

通常情况下,可以通过指定基地址和存储器大小来确定外部SDRAM的地址范围,并将其映射到MCU的内部地址空间中,以便MCU可以直接访问外部SDRAM的数据。然后,MCU在访问外部存储器时,会将内部地址转换为外部存储器的物理地址,从而实现对外部存储器的访问。在刷新期间,SDRAM会按照一定的规则,重新读取存储单元中的数据,并重新写入以维持电荷的状态,以防止数据丢失。总的来说,FMC外部器件地址映射是通过配置FMC参数和寄存器来实现的,确保外部存储器的地址范围能够被正确地映射到STM32的内部地址空间中。

2024-02-28 08:26:19 1081

原创 【正点原子STM32】FSMC_FMC——外部SRAM实验(SRAM外部静态随机存取存储器、SRAM读写操作步骤、FSMC灵活的静态存储控制器、FSMC HAL库相关驱动、SRAM模块驱动步骤)

例如,可以将外部存储器的地址范围映射到CPU的内存地址空间中的某个片区,比如将外部存储器的地址范围映射到内存地址0x60000000开始的区域。SRAM中的数据通常被组织为字节。综上所述,SRAM是一种高性能、低功耗、易于集成和操作的存储器类型,适用于许多不同的应用领域,包括计算机内存、嵌入式系统、通信设备和其他需要快速、可靠的数据存储和访问的设备。总之,内核地址映射是通过配置MMU或者直接修改内存映射表来实现的,通过将外部存储器的地址空间映射到CPU的内存地址空间中,从而实现CPU对外部存储器的访问。

2024-02-28 07:33:44 1152

原创 【正点原子STM32】FSMC_FMC——LCD实验(LCD驱动过程、8080时序、LCD驱动芯片(6条指令)、LCD基本驱动步骤、FSMC实现复杂的时序控制、FSMC配置相关寄存器和HAL库函数)

一、显示器分类二、LCD简介三、LCD驱动原理四、LCD驱动芯片简介五、LCD基本驱动步骤六、编程实战1七、FSMC介绍7.1、FSMC简介7.2、FSMC框图介绍7.3、FSMC时序介绍7.4、FSMC地址映射7.5、FSMC相关寄存器介绍7.6、FSMC相关HAL库函数介绍八、编程实战2九、总结根据你提供的信息,这是对不同类型的显示器的分类和特点的总结:断码屏:点阵屏:LCD屏:OLED屏:根据具体的应用需求和预算考量,选择适合的显示器类型会更加合适。LCD原理:https://

2024-02-27 20:18:20 909

原创 【正点原子STM32】内存保护单元(MPU)实验(内核地址映射、MPU设置内存区域的访问权限和属性、三种内存类型、Cache缓存、MPU相关寄存器介绍、MPU相关HAL库驱动、MPU基本配置步骤)

当CPU需要执行指令时,首先会在指令缓存中查找,如果找到了相应的指令,则可以直接从缓存中获取,从而加快了指令的执行速度。在计算机系统中,特别是在多处理器系统或多核系统中,当存在多个处理器核心(或处理器)时,可能需要进行不同核心之间的数据同步,以确保数据的一致性和正确性。在配置了MPU的访问权限后,如果程序尝试访问未经授权的区域或者违反了权限配置,将触发错误异常(MemManage),系统会相应地进行处理,通常是通过异常处理机制中的相关异常处理函数进行处理,例如重启系统或者输出错误信息等。

2024-02-27 16:20:59 2094 1

原创 【正点原子STM32】OLED实验(OLED显示屏、ATK_OLED模块,OLED驱动原理、SSD1306工作时序(8080时序),OLED驱动芯片,字符显示原理、字模生成软件,OLED基本驱动步骤)

一、OLED显示屏介绍一、OLED显示屏介绍OLED(Organic Light-Emitting Diode)显示屏是一种利用有机发光二极管制成的显示技术。与传统的LCD(Liquid Crystal Display)显示屏相比,OLED具有许多优点和一些缺点。

2024-02-26 08:28:12 1718

原创 【正点原子STM32】电容触摸按键实验(电容触摸按键原理、电容值C跟时间值t成正比关系、利用定时器输入捕获功能计算充电时间、检测电容触摸按键过程、tpad关键函数、tpad_scan函数 点按和连按)

一、电容触摸按键原理介绍一、电容触摸按键原理介绍电容触摸按键是一种常见的电子开关,它通过检测人体的电容变化来实现按键操作。:电容触摸按键利用人体和地面之间的电容来检测触摸。当人体靠近电容触摸区域时,人体与地面之间的电容会发生变化,因为人体是导电的,会对电场产生影响。这种电容变化可以被电路感知到。:电容触摸按键通常使用的是电容传感器来检测电容的变化。传感器通常由一对电极构成,一个是发送电极,负责发送电场,另一个是接收电极,负责接收电场。当有人触摸时,人体作为第三电极会改变电场,从而改变接收电极的电容值。

2024-02-26 08:27:55 1509

原创 【单链表反转】图文解析 链表反转

例题描述思路代码实现例题描述反转一个链表示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL

2024-02-19 09:22:29 1260

原创 【OrangePi Zero2的系统移植】嵌入式Linux系统的组成、编译u-boot、编译内核、Linux根文件系统

uboot是一种通用的引导加载程序,它可以用于多种嵌入式系统,支持多种操作系统,如Linux, Android,NetBSD等。uboot的主要作用是将操作系统内核从存储设备(如Flash, SD卡等)加载到内存中,并执行内核代码。

2024-02-18 18:12:26 988

原创 【排序算法】八大排序算法(C语言实现)

绝对映射:count数组中下标为i的位置记录的是arr数组中数字i出现的次数。相对映射:count数组中下标为i的位置记录的是arr数组中数字min+i出现的次数。注:计数排序只适用于数据范围较集中的序列的排序,若待排序列的数据较分散,则会造成空间浪费,并且计数排序只适用于整型排序,不适用与浮点型排序。

2024-02-17 09:40:35 747

原创 【排序算法】C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)

什么是排序?1、桶排序2、冒泡排序3、选择排序4、插入排序5、快速排序

2024-02-17 08:04:29 813

原创 【数据结构】无向图创建邻接表以及深度遍历、广度遍历(C语言版)

100//深度遍历标记数组//广度遍历标记数组// 边链表int Local;// 存放该顶点对应边链表中数据// 边链表节点指针// 顶点表int Vertex;// 存放一条边链表对应的顶点// 指向该顶点对应边链表的头节点// 存放顶点和边,指向顶点表结构体数组int Vnum;// 存放顶点数int Enum;// 存放边数// 边链表对应的顶点表中顶点结构体}MyGraph;

2024-02-16 15:06:07 374

原创 【数据结构】无向图创建邻接矩阵、深度优先遍历和广度优先遍历(C语言版)

假设图G由两个集合V和E组成,记为G={V , E}。其中V是顶点的有限集合,E是连接V中两个不同顶点的边的有限集合。如果E中的顶点对是有序的,即E中的每条边都是有方向的,则称G是有向图。如果顶点对是无序的,则称G是无向图。注意:这里存入数据时,坐标点以原点(0,0)为起点开始!基本每一步都有注释,详细观看,建议画图理解。定义的结构体、数组可看上面代码。

2024-02-16 13:29:28 447

原创 【OrangePi Zero2 智能家居】代码优化

要使用inih库,你需要在你的代码中包含ini.h头文件,并调用ini_parse()函数来解析INI文件。如果你需要更复杂的处理逻辑,你可以在回调函数中实现它。注意,inih库并不直接提供设置的持久化功能,因此你需要自己负责将修改后的设置写回INI文件。上面设备类的代码都是重复设备信息配置, 因此选择非常的冗余,其实这些信息完全可以利用配置文件。易于集成:只需要将ini.c和ini.h两个文件添加到你的项目中即可开始使用。进行配置,这样就不需要如此多的设备类节点代码, 也方便后期的添加维护。

2024-02-15 09:57:21 495

原创 【OrangePi Zero2 智能家居】智能家居项目的软件实现

之前讲过智能分类的项目,因为会用到语音模块、OLED显示、网络模块、这些代码都可以从智能分类的项目中直接拷贝过来使用,另外添加之前准备好的人脸识别的代码。语音监听模块会借助消息队列进行消息的传递,因此先实现消息队列的接口。另外,被控制的设备类也统一配置接口,同时添加到设备链表中。根据control.h头文件的定义,实现语音监听接口。同样参考voice接口实现receive 接口。同样参考voice接口实现smoke 接口。参考voice接口实现socket 接口。三、实现语音监听接口。

2024-02-15 09:56:40 1493

原创 【数据结构】计算节点个数和二叉树高度(C语言版)

计算双分支节点思路 和 计算单支点相反 为: 遍历 二叉树 只记录 节点指针指向的节点中 左右子树都存在 的时候,递归返回值+1,累加最后返回 就是双分支节点的个数。遍历二叉树途中,只记录遍历树节点中遇到(左边子树存在,右边子树为NULL )或者 (右边子树存在,左边子树为NULL)这种节点,才让递归 返回值 +1,依次累加。让根节点指针开始,进行二叉树的遍历,遍历树节点中不为NULL下,及存在节点,遍历次数相加之和 + 根节点 及为总节点。

2024-02-14 19:22:26 437

原创 【数据结构】二叉树根节点到特定节点路径(C语言版)

使用二叉链表创建的二叉树,这里我的思路是用链栈来存放找寻二叉树特定节点中,用来存放节点元素。flag = 1,作为标记符,表示还没在一条路径中,找到要找的特定节点元素。思路理解不了,可以结合运行结果图,加上自己画图理解,运行结果在最下方。L 为一开始创建的链栈头指针。

2024-02-14 03:53:56 525

原创 【数据结构】二叉树先序、中序、后序及层次四种遍历(C语言版)

先序遍历结果为:A B D H I E J C F K G 动画演示: 中遍历结果为:H D I B E J A F K C G 动画展示:后序遍历中,根节点默认最后面后序遍历结果:H I D J E B K F G C A 动画展示: 层次遍历结果:A B C D E F G H I J K解释外圈跑的意思:这里的根,指的是每个分叉子树(左右子树的根节点)根节点,并不只是最开始头顶的根节点,需要灵活思考理解,建议画图理解!!

2024-02-13 18:26:48 914

原创 【数据结构】二叉链表创建二叉树(C语言版)

第一步先创建根节点,然后创建根节点左子树,开始递归创建左子树,直到递归创建到的节点下不继续创建左子树,也就是当下递归到的节点下的左子树指向NULL,结束本次左子树递归,返回这个节点的上一个节点,开始创建右子树,然后又开始以当下这个节点,继续递归创建左子树,左子树递归创建完,就递归创建右子树,直到递归结束返回到上一级指针节点(也就是根节点下),此时根节点左边子树创建完毕,开始创建右边子树,原理和根节点左边创建左右子树相同。二叉树的操作通常使用递归方法,如果递归不太明白,建议去对此进行一下学习和练习。

2024-02-12 09:58:30 729

空空如也

空空如也

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

TA关注的人

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