- 博客(29)
- 收藏
- 关注
原创 比较常见的几种排序算法
插入排序的改进版,通过定义递减的间隔序列(如n/2, n/4, ... 1),对间隔分组内的元素进行插入排序。采用分治法,选择一个基准元素(pivot),将数组分为小于基准和大于基准的两部分,递归排序子数组。将数组分为已排序和未排序两部分,逐个将未排序元素插入到已排序部分的正确位置。通过相邻元素的比较和交换,每一轮将最大的元素“冒泡”到数组末尾。每一轮从未排序部分选出最小值,与当前未排序部分的第一个元素交换。:小规模数据、数据基本有序或在线排序(数据逐步到达)。:不稳定(交换可能破坏相等元素的顺序)
2025-03-16 14:41:05
676
原创 stm32-RTC时实时钟
独立供电:由VBAT引脚供电,即使主电源(VDD)掉电,RTC仍可继续运行。低功耗:在低功耗模式下仍能正常工作。日历功能:支持年、月、日、星期、时、分、秒的计时。闹钟功能:可以设置闹钟,在特定时间触发中断。周期性唤醒:可以配置周期性唤醒定时器,用于低功耗应用。
2025-03-09 12:36:49
918
1
原创 stm32-电源控制
STM32 的 PWR(Power Control)外设 是用于管理微控制器电源模式和外设电源控制的模块。通过 PWR 外设,可以实现低功耗模式、电压调节、备份域控制等功能,从而优化系统的功耗和性能。stm32内部电源框图VDD 供电区(主电源):VSSA 和 VDDA(模拟部分电源):1.8V 供电区:低电压检测电路:PLL(锁相环):LSE(低速外部晶体振荡器):V_BAT(备用电池):RCC BDCR 寄存器:PWR 外设的主要功能1. 电源模式管理: - 支持多种低功耗模式,如眠模式、停止模
2025-02-24 13:40:52
884
原创 stm32常见的存储器应用
/配置SDA数据线//PB7//配置SCL时钟线//PB6//初始化iic的时钟,配置IIC1的结构体//配置七位寻从机址;//速度设置为最大40kbps//设置主机地址为0//配置printf函数的usart串口通信//配置usart的TX通信引脚//PA9//配置usart的RX通信引脚//PA10//配置usart通信结构体USART1,为printf函数做准备。
2025-02-22 12:19:49
1193
1
原创 stm32-LCD(液晶显示器)
LCD(Liquid Crystal Display,液晶显示器)是一种利用液晶材料的电光效应来控制光线透过或反射的显示技术。LCD 广泛应用于各种电子设备中,如电视、电脑显示器、智能手机、平板电脑、汽车仪表盘、工业控制面板等。
2025-02-21 21:41:08
1261
原创 stm32高级TIM的常用功能
介绍的基本资料。高级定时器(如)支持功能,通常用于电机控制和其他需要安全保护的应用。高级定时器支持,这是用于控制例如或的功能。互补输出提供两路反向的 PWM 信号,输入捕获用于,如频率、脉冲宽度等。它通常用于或。是 STM32 定时器的一个重要功能,用于测量外部信号的时间特性。它允许你捕获输入信号的(上升沿或下降沿),并记录定时器的。输入捕获常用于测量或。输入捕获利用定时器的计数器来捕获外部信号发生变化的时间。捕获信号的触发通常发生在的(如从低电平到高电平,或从高电平到低电平)。
2025-02-16 13:33:40
1487
原创 stm32电机驱动模块
电机驱动模块是智能车等电子设备中用于驱动电机运转的重要部件,它能将微控制器输出的控制信号转换为足够的功率和电流来驱动电机。
2025-02-08 18:42:43
2375
2
原创 stm32超声波模块
STM32 通过 GPIO 控制 Trig 触发信号,并读取 Echo 计算测距值。·6.等待Echo引脚输入高电平开始, 定时器打开.…7.等待Echo引脚输入高电平结束, 定时器关闭>停止计数器计数。你的之前上传的文件已经过期,无法查看。的相关资料,我可以直接为你整理一份完整的介绍,包括其。HC-SR04 是一个简单易用的超声波测距模块,适用于。如果你需要更详细的资料或示例代码,欢迎随时告诉我!,它通过超声波反射测量物体的距离,广泛应用于。8.通过计数器的值计算得出超声波测量距离。
2025-02-08 11:26:28
1033
1
原创 stm32-wifi模块
在透传模式下,数据直接从发送方传输到接收方,中间不做协议解析,适用于串口、Wi-Fi 等连接方式。如果你希望我重新查看这些文件,请重新上传相关文件,或者我可以直接为你提供。协议,提供可靠的数据传输服务。它确保数据从发送端到接收端的可靠传递,即使发生丢包也会自动重传数据。ESP8266 通常通过串口通信与其他设备(如 STM32)进行连接。注意:ESP8266 模块不支持 5V 输入电压,务必确保使用 3.3V 电源。,可以方便地将设备连接到无线网络。如果你有更具体的问题或需要详细的代码示例,随时告诉我!
2025-02-07 15:09:00
1277
原创 TIM计时器
**高级定时器**:具备通用定时器的所有功能,还支持更复杂的控制功能,如死区时间插入、互补输出等。- **TIMx_SMCR**:从模式控制寄存器,用于配置定时器的从模式(如外部触发、编码器模式等)。- **输出比较模式**:TIM可以比较计数器值与CCR值,用于生成特定时间的事件或信号。- **输出比较**:TIM可以比较计数器值与预设值,用于生成特定时间的事件或信号。- **输入捕获模式**:TIM可以捕获外部信号的边沿,用于测量脉冲宽度或频率。
2025-02-01 16:04:05
819
原创 stm32-NVIC中断配置
外部中断(External Interrupt,EXTI)用于 STM32 处理外部信号(如按键、传感器信号等),可以在特定的事件发生时触发中断,执行相应的中断服务程序(ISR)。STM32 的通用定时器(TIM2~TIM5)和高级定时器(TIM1、TIM8)可用于定时、PWM 产生、编码器接口、输入捕获等功能。其中TIM定时器可用于系统定时任务,并通过中断定期触发事件。其他6,7是基本定时器EXTI 适用于外部信号的异步事件检测(如按键输入)。TIM 适用于周期性任务(如 LED 闪烁、定时采样等)
2025-01-30 20:07:18
902
1
原创 使用HSE与HSI配置RCC时钟
独立看门狗的时钟由LSI提供,且只能由LSI提供,且只能由LSI提供,LSI是低速内部时钟信号,频率为30~60MHZ,一般取40KHZ。HCLK,分频因子可以是[1,2,4、8、16、64,128,256,512],具体由时钟配置寄存器。频或著2分欢,这个面时钟配置寄存器CFGR 的位 17,即PLLXTPRE 设置。2,4,8,16],具体由时钟配置寄存器CFGR的位13~11,即PPRE2[2:0]决定。[1,2,4,8,16],具体由时钟配置寄存器CFGR的位10~8,即PRRE1[2:0]决定。
2025-01-28 14:24:19
555
原创 stm32-spi通信
SPI 协议简介SPI(Serial Peripheral Interface,串行外设接口)是一种高速的全双工串行通信协议,用于微控制器与外设之间的数据传输。与 I²C 和 UART 不同,SPI 通常用于高速数据传输,在嵌入式系统中用于与各种外设(如 EEPROM、ADC、DAC、传感器、显示屏等)进行通信。
2025-01-28 09:15:58
1211
原创 STM32-i²c
I²C 协议简介I²C(Inter-Integrated Circuit,集成电路间通信)是一种广泛应用于微控制器和各种外部设备之间的串行通信协议。它由 Philips(现 NXP)公司开发,具有多种优点,如简化的硬件连接、支持多个设备(最多 127 个设备共享同一总线)等。SCL(时钟线)和SDA(数据线)。支持一主多从和多主多从的模式,主机与从机配合实现数据的相互交互.
2025-01-23 17:19:22
597
原创 STM32 USART 串行通信介绍及操作项目
串行通信(Serial Communication)是一种数据传输方式,通过单一的数据通道按位顺序发送数据。在嵌入式系统中,串行通信通常用于微控制器之间、微控制器与外部设备之间的通信。STM32 微控制器支持多种串行通信接口,其中。
2025-01-22 14:24:02
668
原创 stm32-ADC数模转换项目
7如果是多通道,也可以通过非连续-非扫描的方式来完成,利用的是单次转换和延时,在每个通道转换完成时,手动将数据搬运,然后加延时,可以在获模数转换函数中调用s通道配置函数ADC_RegularChannelConfig,并且把相应的通道当作形参传入即可。4配置ADC结构体,成员包括ADC单双重模式,扫描/非扫描模式,连续/非连续模式,触发模式,数据对其模式,通道数目,分别对成员配置相应的参数,最后调用ADC_Init()函数对其进行初始化。5调用ADC使能函数:ADC_cmd()使能ADC,然后(
2025-01-20 14:08:19
558
原创 STM32——DMDMA转运数据操作
2其次设置一个关于DMA的结构体指针,结构DMA体成员有:外设地址,存储器地址, 传输方向(设置哪个地址为源地址),源地址自增,目标地址自增,数据传输的大小,是否循环模式(计时器重装模式),M2M模式(软件触发还是硬件触发)如果是软件触发不能进行循环模式否则会出现死循环的现象,传输一个数据的宽度,有四个字节,两个字节,一个字节。(1)通过DMA数据传输,实现两个存储器之间的数据搬运,以数组作为形参传入,以OLED显示屏观察数据的传输效果。1首先要使能一个关于DMA的时钟,该时钟位于AHB总线上,
2025-01-20 13:29:35
270
原创 c++泛型编程的应用与分析
泛型编程是C++的核心特性之一,它使得程序员能够创建可重用的代码,这些代码可以对多种数据类型进行操作,而无需为每种类型编写特定的代码。本文旨在帮助读者理解泛型编程的概念,并掌握在C++中使用模板进行泛型编程的方法。泛型编程是一种编程范式,它允许编写与数据类型无关的代码,从而提高代码的复用性和灵活性。本文将介绍C++泛型编程的基本概念、模板的使用方法,并通过实例展示泛型编程在实际开发中的应用。3. 性能:模板代码通常与特定类型的代码一样高效,因为模板实例化是在编译时进行的。
2024-10-09 09:07:34
333
原创 c++面向对象编程思想
通过定义不同的类方法,我们可以实现构造、析构、操作数据等行为,并通过访问控制来保护类的内部状态。面向对象编程(OOP)是C++的核心特性之一,它通过类和对象的概念,将数据和操作数据的方法封装在一起。C++作为一种支持面向对象编程的语言,提供了类(Class)这一机制,允许程序员定义包含数据成员和成员函数的模板。类方法是类的行为,它们定义了如何操作类的数据成员。在C++中,类方法是在类定义内部声明和定义的函数,它们用于实现类的行为。4. 静态成员函数:与类相关,而不是与类的特定对象相关。
2024-10-09 09:02:43
325
原创 关于二叉树的应用和分析
读者可以通过本文的学习,进一步探索二叉树的其他操作,如删除节点、查找节点等,并在实际编程中灵活运用。二叉树是一种非线性数据结构,它由节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。1. 节点:二叉树中的每个元素称为节点,每个节点包含一个数据域和两个指向子节点的指针域。3. 子节点:一个节点的左子树或右子树的根节点称为该节点的子节点。5. 父节点:若一个节点含有子节点,则该节点称为其子节点的父节点。2. 根节点:没有父节点的节点称为根节点。4. 叶节点:没有子节点的节点称为叶节点。
2024-10-09 08:18:33
447
原创 关于高级递归分治的算法分析
递归分治算法是一种重要的算法设计思想,它将一个复杂的问题分解为若干个规模较小的相同问题,递归地解决这些子问题,然后将子问题的解合并为原问题的解。本文将带领读者了解递归分治算法的原理,并通过C语言实例进行讲解。本文通过两个典型实例,详细讲解了递归分治算法在C语言中的实现。摘要:本文主要介绍了递归分治算法的基本原理,并通过几个典型的实例,详细讲解了如何在C语言中实现递归分治算法。通过阅读本文,读者可以更好地理解递归分治算法的思想,并在实际编程中灵活运用。3. 合并:将子问题的解合并为原问题的解。
2024-10-09 08:11:51
412
原创 关于栈的顺序存储结构及各类操作
设立结构体,结构体包括栈头指针,栈底指针;初始化:调用初始化函数,传入指针作为参数,在函数里面设立一个空栈,即首先采用malloc函数调用一段栈空间,用if()判断是否调用成功;然后是栈头指针指向栈底指针,再将结构体中最大容量赋值入栈:可以理解为在主函数里面调用增加函数,将指针和数据作为参数传入调用函数里面,采用if语句判断栈空间是否为满,然后再通过赋值依次将栈头指针接受数据赋值;指针依次移动出栈:可以调用函数,将指针作为参数传入调用函数里面,再依次通过移动指针来出元素#include<stdio.h>
2024-09-18 15:53:09
462
原创 链表创建之尾指针添加
void AddtoEnd(struct Node**pHead,struct Node**pEnd,int iDate)//以二级指针的形式传递头尾指针的地址。创建结构体—创建数据与头尾指针—调用函数创建节点—传入头尾指针地址—讨论头指针是否为空的情况—添加尾指针。创建一个链表,可以通过几个简单的步奏来完成,本程序讨论了有无空头指针,最后添加尾指针来提高程序运行的效率。//创建头指针与尾指针。if(*pHead=NULL)//空链表。
2024-09-08 17:59:08
370
原创 如何在伪链表中根据下标查找节点
在伪链表中,根据下标查找节点的位置可以通过调用函数的方式实现,总的思路是先传递一个你想找寻找节点位置的参数和结构体类型的指针,然后在调用函数中以循环的方式匹配传递的参数。最后匹配传入参数,访问具体参数位置传回到结构体指针中去。
2024-09-07 19:05:16
215
原创 动态数组的创建以及增删改查
增添元素分位两种情况1:如果数组的容量未满,能够满足增添元素的数量要求,那么可以通过指针访问结构体中首地址的方式采用for循环依次赋值给未使用的数组空间。动态数组的删除,主要分为两种情况1是删除尾部,2是删除中间部分,3是全部删除,删除尾部主要通过对结构体成员数量减去,使得首地址下表访问向前移动,pr->shou=(int*)malloc(sizeof( int)*rongliang) 调用malloc函数动态分配空间并返回给首地址。将动态数组放入到设置好的一个结构体当中。动态数组的中间元素插入。
2024-09-05 21:59:41
257
原创 关于malloc函数的用法
因此在调用malloc函数时应该定义一个类型的指针,在调用完后可以用if语句来判断定义的函数是否获取地址成功,如果p1=NULL说明获取失败。malloc函数是c语言中动态分配内存的重要函数,使用malloc函数可以直接从计算机堆区中分配一定的内存空间并返回内存空间的首地址。最后补充一下定义的指针类型为强制转换,就是不管你申请的是什么类型的存储空间最终都要以指针类型为准,所谓malloc函数就是申请一段内存空间分配一定的内存空间并返回内存空间的首地址。
2024-09-01 23:01:19
190
原创 C语言学习(上)
3基本数据类型主要就是整型,浮点型,字符型,整型包括int longint shortint等等,浮点型又可以分位单精度浮点型和双精度浮点型,float和dohble,其次就是字符型char,最重要的是字符型char和整型数据int之间可以发生转换。1:C语言里面最基本的数据包含字符,关键字,常量变量以及一些自定义的函数或者一些标准的库函数等,而字符又可以分位普通字符,转义字符,运算符等,字符的定义:由数字字母下划横线构成,转义字符更多地是通过操作代码之间的位置关系。
2024-09-01 15:46:12
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人