自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STM32——TIM输出比较、PWM(十)

•OC)输出比较•输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形•每个高级定时器和通用定时器都拥有4个输出比较通道•高级定时器的前3个通道额外拥有死区生成和互补输出的功能。

2026-01-29 21:40:04 465

原创 STM32标准库——定时器中断、外部时钟(九)

TIM2的的中断函数是TIM2_IRQHandler(void),因为我们要在显示屏中显示Num,所以可以直接将这个中断函数放在main文件中,如果放在定时器的文件中,那么就extern uint16_t Num;封装 TIM_GetCounter (TIM2) 为独立函数,方便工程中任意位置直接调用获取 TIM2 当前计数值,无需重复写原函数,简化代码调用,提升可读性和复用性。开启 TIM2 时钟,APB1 外设默认关时钟,不开则后续配置无效。向上计数,从 0 到预设值溢出触发中断,定时中断默认模式。

2026-01-29 16:21:17 587

原创 STM32——TIM定时器、定时中断、RCC时序(八)

TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型注:总定时 = 所有 (PSC+1) 乘一起 × 所有 (ARR+1) 乘一起 ÷ 输入时钟频率(单级 / 级联都适用)的核心简化算法。

2026-01-29 00:42:06 746

原创 STM32——旋转编码器计次(七)

一、简介旋转编码器:用来测量位置、速度或旋转方向的装置,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向类型:机械触点式/霍尔传感器式/光栅式本篇采用的是机械触点式的旋转编码器。

2026-01-28 17:12:42 736

原创 数据结构——栈(十六)

栈是一种遵循**后进先出(LIFO)一端(栈顶)**进行插入(入栈)和删除(出栈)操作。本篇采用尾进尾出。int a;

2026-01-27 23:56:23 544

原创 STM32——EXTI外部中断(六)

EXTI(Extern Interrupt)外部中断EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序支持的触发方式:上升沿/下降沿/双边沿/软件触发支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断,如A0、B0不能同时触发中断,A0、B1能同时触发中断。通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒。

2026-01-27 16:31:32 1457

原创 STM32——OLED显示屏(五)

•OLED):有机发光二极管•OLED显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点•0.96寸OLED模块:小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块供电:3~5.5V,通信协议:I2C/SPI,分辨率:128*64。

2026-01-26 23:30:14 798

原创 STM32标准库——控制驱动LED灯、蜂鸣器(四)

将前面建立的工程模板复制重命名,在新的工程文件夹中建立System文件夹,将STM32入门教程资料\程序源码\STM32Project-有注释版\1-3 Delay函数模块中的延时函数复制到System文件夹中,并在工程中添加分组、文件、文件地址。在main文件中调用相关.h文件,定义一个全局变量uint8_t KeyNum = 0用来装按键的状态,在main中调用按键和LED的启动函数。STM32 的外设默认是关闭时钟的,必须通过该函数手动开启对应外设的时钟,否则外设无法工作。

2026-01-26 22:23:58 1125

原创 STM32——GPIO(三)

•GPIO)通用输入输出口•可配置为8种输入输出模式•引脚电平:0V~3.3V,部分引脚可容忍5V•输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等•输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等。

2026-01-25 15:45:40 1150

原创 数据结构——快慢指针(十五)

void AddToEnd(struct Node* head, int iData)//尾添加。检测单向链表是否存在环。快指针每次移动两步,慢指针每次移动一步,若存在环,两者最终会相遇。bool QuiKSlow(struct Node* head)//检测链表是否有环。让链表变成环,让尾节点的后续指针指向第二个节点,形成一个环。形成了一个环,检测函数返回了true表示有环状。如果是,函数直接返回,避免后续操作引发错误。指向头节点的前驱节点(即链表的尾节点)。(假),避免后续操作引发错误。

2026-01-23 23:38:17 1190

原创 数据结构——双向链表的查询、插入、删除、释放(十四)

void InsertByData(struct Node* stHead, int* iCount, int iValue, int iData)//在指定的数据前面增加一个节点。void InsertByIndex(struct Node* stHead, int* iCount, int iIndex, int iData)//指定下标位置插入节点。void DaleteByIndex(struct Node* stHead, int* iCount, int iIndex)//删除指定下标节点。

2026-01-23 10:52:55 1471

原创 STM32标准库——使用Keil新建工程(二)

使用的相关文件是从江协科技提供的链接中获取,在B站UP有提供,直接去获取即可。

2026-01-22 22:00:00 777

原创 数据结构——双向循环链表的建立、添加、遍历(十三)

双向循环链表是链表的一种特殊形式,每个节点包含两个指针域:pPre指向直接前驱节点,pNext指向直接后继节点。链表的头节点的pPre指向尾节点,尾节点的pNext指向头节点,形成一个闭环。

2026-01-22 16:55:55 850

原创 STM32F103C8T6——简介(一)

本篇开始DLGXY将记录学习STM32F103C8T6库开发的笔记,学习方式是主要观看B站的江协科技、铁头山羊的视频。学习过程中可以利用AI软件进行铺助学习,比如用自己的语言讲述某个知识点,让AI判断我们自己的理解是否有误,以此来加深印象。STM32F103C8T6是意法半导体(STMicroelectronics)推出的基于ARM Cortex-M3内核的32位微控制器,属于STM32F1系列中的“中等容量”产品线。

2026-01-21 23:37:59 910

原创 数据结构——双向链表的合并(十二)

void HeBing(struct Node** pHA, struct Node** pEA, int* pCA, struct Node** pHB, struct Node** pEB, int* pCB)//接入。void HeBing(struct Node** pHA, struct Node** pEA, int* pCA, struct Node** pHB, struct Node** pEB, int* pCB)//接入。if (*pHead == *pEnd)//只有一个节点。

2026-01-19 23:09:51 1302

原创 数据结构——双向链表的删除(十一)

void DelteNode(struct Node* pTemp)//删除节点//是不是头//单节点链表//多节点链表else//记录头//头往下走//头前设置为NULL//释放free(pT);//尾删除//记录尾//尾往前走//尾后设置为NULL//释放free(pT);//节点减一//中间删除else//链接前后节点//前节点指向后节点。

2026-01-16 17:25:33 993

原创 数据结构——双向链表的插入、查询、修改(十)

void InsertNodeByIndex(int iIndex, int iCount, int iData)//指定下标添加N个节点。void InsertNodeByData(int iValue, int iData)//在指定的数据前插入节点。中间位置添加:首先定位到要插入的位置,循环创建并插入新节点,维护前后节点的指针关系,更新全局节点计数器。这个代码实现了一个链表节点的下标查询功能,通过传入的索引值返回链表中对应位置的节点指针。//指定位置前一个节点与新节点相连。

2026-01-15 22:41:42 938

原创 数据结构——双向链表的建立(九)

双向链表是一种链式数据结构,每个节点包含两个指针:一个指向前驱节点(pPre),一个指向后继节点( pNext)。与单向链表相比,双向链表支持双向遍历,但需要额外的空间存储指针。

2026-01-14 22:26:25 750

原创 数据结构——修改单向链表有空头(八)

这里将前节点放在 pWai,后节点放在pNei,设置两个循环,pNei放在内循环,先将第一个节点放在pWai,然后在内循环中判断前节点与后面的节点数据是否重复,有重复的就删除,没有了就进入下一个外循环pWai向后移一位。下标的范围0~stHead.iData,循环定位指定下标前一个节点-->记录,将指定节点扣下来,让前一个节点指向指定节点的下一个节点,然后就可以删除指定节点。void DeleteByData(struct Node* stHead, int iValue)//删除全部指定数据节点。

2026-01-11 23:45:00 1021

原创 数据结构——建立单向链表有空头(七)

NULL在C语言中,单向链表的节点通常通过结构体定义:int iData;//数据域//指针域,指向下一个节点创建空头stHead:空头的数据域用来计节点数据个数,指针域用来指向下一个节点。

2026-01-10 21:45:39 897

原创 数据结构——伪链表的修改(六)

void ChangeByIndex(struct Node* pHead, int iIndex, int iData)//修改指定下标的数据。和上面差不多,也是先找到指定下标的节点,直接调用上篇封装了查询的函数 FindByIndex,并定义一个临时指针来装,找到后就修改它的节点值。先找到指定的节点,上篇封装了查询的函数 FindByData,直接调用就好,并定义一个临时指针来装,找到后就修改它的节点值。调用ChangeByIndex(&a, 2, 66),下标为2的节点数值3将被修改为66。

2025-12-23 20:45:30 468

原创 数据结构——伪链表的建立与查询(五)

本篇DLGXY将和同学们学习怎么创建伪链表和查询链表,和动态数组的不同,伪链表的元素不是连续的,每个元素都是独立的,通过指针将它们链接起来。学习伪链表对我们后面单向链表的学习有一定的思维引导作用。

2025-12-22 21:46:25 976

原创 数据结构——99乘法表(四)

本篇DLFGXY将和同学们进行99乘法表的编写,乘法表通常由行和列组成,每行代表一个乘数,列代表被乘数。通过嵌套循环可以实现行列的遍历,输出乘法结果。

2025-12-21 23:53:51 1153

原创 数据结构——动态数组(三)

本篇DLGXY将和同学们继续动态数组的学习。学习目的:1、用free释放数组2、删除数组元素。

2025-12-20 21:35:58 341

原创 数据结构——动态数组(二)

动态数组是一种在程序运行时可以动态调整大小的数据结构,其底层通常基于静态数组实现。与静态数组不同,动态数组的内存分配在堆区(Heap)完成,允许在运行时根据需要扩容或缩容。

2025-12-20 00:31:45 1312

原创 数据结构——线性链表之数组知识篇

数组是一种线性数据结构,由相同类型的元素按顺序存储在一段连续的内存空间中。在C语言中,数组的大小在声明时固定,不可动态改变。语法示例int arr[5];// 声明包含5个整数的数组// 声明包含10个浮点数的数组int *data;// 指向数组首元素的指针// 当前已存储的元素数量// 数组的总容量。

2025-12-19 00:03:09 751

空空如也

空空如也

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

TA关注的人

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