- 博客(56)
- 收藏
- 关注
原创 stm32-SG90舵机(附上源代码)
这篇文章带你一站式玩转SG90舵机与STM32,手把手教你从原理到代码实战。不仅让你彻底搞懂“PWM占空比怎么让舵机听你指挥”,还详细拆解了STM32定时器输出比较模式、重映射操作,以及如何把手机变成“遥控器”,蓝牙一开,舵机和LED任你掌控。全程配备工程代码,既适合初学者入门,也适合进阶玩家进阶,理论与实操双管齐下,带你解锁舵机控制的全部姿势!
2025-07-24 08:15:00
592
原创 4×4矩阵键盘详解(stm32)
给大家提供文章源码,进入文章自行获取即可,本文用最直白的大白话,带你从硬件接线、原理讲到“行拉低+列上拉”扫描法,手把手教你写出键盘初始化和轮询扫描代码;最后还用4位密码“1234”演示实战——对了就 OLED 显示 “PassWordRight”,错了就 “PassWordError”,输少了自动提醒 “Input4Num”。一文掌握轮询法实用技巧,还附对比中断法的优劣分析,让你马上动手!
2025-07-17 02:25:47
966
原创 stm32--SPI原理应用W25Q64(二)
本文带你深入掌握 STM32 与 W25Q64 闪存的 SPI 通信,从硬件连接到软件实现,手把手教你如何高效完成“擦、写、读”操作。文章不仅详解 W25Q64 的核心机制,如页写入、扇区擦除、状态监测等关键环节,还配套提供了完整的代码框架与串口验证方式。无论你是初学者还是工程应用开发者,这篇文章都将是你玩转 SPI Flash 的入门实战指南!
2025-07-08 00:15:10
1197
原创 stm32-掌握SPI原理(一)
详细介绍了SPI通信协议的基础原理和应用。首先通过与I2C协议的对比,突出SPI全双工、无应答机制、高速传输等特点。文章重点讲解了SPI的四线结构(SCK、MOSI、MISO、SS)和工作机制,借助移位寄存器模型生动说明数据传输过程。同时深入分析了四种工作模式(CPOL/CPHA组合)的时序特点,并提供了STM32的SPI初始化代码解析。最后强调理解这些底层原理对后续实际应用(如W25Q64闪存操作)的重要性。全文采用循序渐进的方式,从基础概念到硬件实现,帮助读者系统掌握SPI通信的核心知识。
2025-07-04 01:27:09
1337
3
原创 从零搭建 ESP8266-01S TCP 客户端:入门到上网只需五步
本文手把手带你完成 ESP8266-01S 模块与电脑建立通信的全过程。我们将从硬件准备入手,快速梳理 ESP8266 的三种工作模式(STA/AP/STA+AP),再介绍物联网中常用的 MQTT 协议,并通过 Flash Download Tool 烧录 MQTT 固件、串口连接电脑、发送 AT 指令,最终成功实现 TCP 客户端通信。实验中还包括 WiFi 配网、AT 指令操作详解、串口调试助手数据验证等内容,适合物联网初学者实战参考。文章也特别提醒了引脚连接、频段选择等关键细节,帮助你少走弯路。
2025-06-30 16:40:02
739
1
原创 轻松看懂stm32复用功能、重映射,避免90%的新手误区!
非常适合容易搞混该板块的初学者,详细且通俗的讲解复用功能和重映射,并且最后还总结出一套方法论来判断哪个是复用功能?哪个是重映射?如果是复用功能该如何修改代码?如果是重映射该如何修改代码?
2025-06-30 01:46:59
867
1
原创 零基础搞定 HC-SR04 测距模块 | STM32 实战教程
本文面向STM32初学者,详细讲解如何使用HC-SR04超声波模块实现精准测距功能。通过PB10连接Echo引脚、PB11连接Trig引脚,模块每次发送8个40kHz超声波脉冲,通过检测回波信号的高电平持续时间计算目标距离。本文结合定时器初始化与中断响应实现回波捕捉,并通过串口周期性输出测量结果。为了提升测量稳定性,增加了5次平均滤波处理。代码逻辑清晰,硬件连接简单,非常适合零基础或初学者快速上手超声波测距项目。不仅帮助你掌握STM32基础外设操作,还能作为物联网、避障系统的实用参考。欢迎阅读、点赞与收藏!
2025-06-26 18:00:19
904
1
原创 MAC、IP地址、TCP、UDP、SSL、OSI模型
掌握网络基础,是玩转 ESP8266 的起点。本文用通俗类比讲清 MAC 与 IP 的本质差异,对比 TCP、UDP、SSL 的应用场景,并图解 OSI 七层模型,帮你打牢物联网开发的“通信地基”。下一步,我们将从理论走向实战,真正动手做项目。
2025-06-25 14:35:53
1074
3
原创 STM32 串口通信②:蓝牙模块HC-05控制单片机
本文详细介绍了HC-05蓝牙模块与STM32单片机的连接与配置方法。首先对比了HC-05和HC-06模块的区别,重点说明HC-05支持AT模式配置主从机模式。文章详细讲解了AT指令设置步骤,包括修改波特率、名称、密码等参数。然后通过代码示例展示如何编写单片机串口通信程序,实现手机通过蓝牙控制LED灯开关的功能。最后介绍了手机端蓝牙调试助手的配置方法,并强调需要使用GBK编码格式。整个过程从硬件连接到软件配置都进行了详尽说明,为初学者提供了完整的蓝牙通信实现方案。
2025-06-24 00:01:01
2026
4
原创 STM32 串口通信①:USART 全面理解 + 代码详解
本文深入解析了USART通信的核心概念与应用。首先对比了串行与并行通信的特点,指出串行通信虽然物理线多但数据是按位传输的。重点阐述了USART的功能优势,它支持UART异步模式、同步模式等多种通信方式,并提供详细的功能对比表格。文章还解释了波特率与比特率的区别,以及复用功能和重映射的应用场景。最后给出了STM32中USART的硬件配置代码示例,包括中断模式下的发送接收实现,并详细说明了关键寄存器标志位(TXE、TC、RXNE)的作用机制。通过理论结合实践的方式,帮助读者全面掌握USART通信技术。
2025-05-31 22:37:57
2380
1
原创 STM32 控制 OLED 全攻略(二):实现字符和汉字的显示
本文详细介绍了如何使用STM32通过I2C通信控制OLED显示屏,重点讲解了SSD1306芯片的工作原理、OLED屏幕的显示机制以及相关代码的实现。文章首先回顾了OLED的基本引脚配置,随后详细解释了如何通过SSD1306芯片控制OLED的显示,包括指令和数据的传输方式。接着,文章通过代码示例展示了如何初始化OLED、设置显示坐标、显示字符串和汉字等操作。特别地,文章还介绍了如何通过PCtoLCD2002软件生成汉字的字模,并将其嵌入代码中实现汉字的显示。最后,提供了完整的OLED控制源代码
2025-05-19 19:50:44
2033
原创 别急着点亮 OLED,先把 STM32 的 I2C 通信搞明白
我最近在学oled查相应的代码时,我发现网上的资源和讲解良莠不齐,我现在分享一下我的思路,我会用大概两篇的文章来说一下oled显示字符串、汉字的原理以及代码如何写,最后也会提供相应的我写的项目工程,这篇文章呢,会先讲解iic的原理以及硬件iic的代码如何写,我会一步步教大家的。由于我使用硬件i2c写的,可能会和网上的大部分人的代码不太一样,因为网上的博主们大部分用的是软件i2c写的,还请大家认真阅读下去本篇文章,希望大家有不一样的收获。
2025-05-18 17:35:40
768
原创 蓝桥杯电子赛_继电器和蜂鸣器
本章会介绍一些蓝桥杯中 考的不是那么频繁的知识点,但是最好还是要学一学。后续会写一些关于pwm、NE555、串口等,国赛需要的超声波和一些比较难的,后续再写相关博客。
2025-05-02 12:09:55
935
原创 蓝桥杯电子赛_E2PROM(AT24C02)
这次讲的E2PROM和前面的PCF8591有着千丝万缕的联系,这次的E2PROM也是基于前面的文章中的IIC,所以,如果大家看不懂本章的内容,有可能是前一篇文章中的IIC不会,建议大家先学前一篇的PCF8591,再学本篇E2PROM是一种存储技术,AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。
2025-04-14 00:03:53
1200
1
原创 蓝桥杯_如何快速记忆数码管的段码
我们都知道,在往届蓝桥杯电子赛的比赛试题中,总能碰见在数码管用字母来表示的时候,我摘取部分试题给大家看一下:break;break;break;break;break;break;break;break;break;break;break;如果大家硬要背诵的话,可能会十分的困难,所以我自己思考了一下如何快速记忆这些段码的方法,需要大家稍微的动脑写一下。
2025-04-05 19:36:16
515
原创 蓝桥杯_PCF8591
在蓝桥杯比赛中提供的板子原理图中,上面这张照片就是PCF8591的原理图,大家仔细观察本章图片的右下角位置,你会发现:P20、P21后面的SCL和SDA,这两个线就是I2C的核心线,I2C需知道的相关底层知识点,如若不理解I2C通信,推荐大家去哔哩哔哩看这个博主的视频【4分钟看懂!I2C通讯协议 最简单的总线通讯!1 SDA:提供信息通道 SCL:提供精确的频率 GND:接地线2 当SCL为高电平时:(1)SDA从高到低的跳变为开始信号(2)SDA从低到高的跳变为结束信号。
2025-04-04 15:46:34
920
原创 蓝桥杯_DS18B20温度传感器
关于DS18B20,他是一个CMOS器件,也就证明了他是一个低功耗的设备,在正式进入这个模块学习之前,我们要知道一个课外小知识:VDD和VCC有什么区别?答:VDD强调用于低功耗及多种电压,VCC通常表示5v,但是他们俩并没有本质的区别,只是使用习惯上有不同而已,大家不必纠结这两个符号的区别我会介绍相关比较重要的点,具体的功能和器件请搜寻其他博主的博客,自行查阅1.DS18B20的温度测量范围从-55℃到+125℃2.分辨率在9位到12位之间,可以由用户自己进行设置。
2025-03-26 20:05:33
1751
原创 蓝桥杯_DS1302时钟
DS1302是时钟的芯片,可以显示对应的时钟和日期,这里有一个前提,需要连接着电源,如果把程序在今天烧录到板子里,然后不连电,第二天的数据并不准确,所以说,如果想要准确的日期,那么需要一直给板子提供电源。这里所说的数据,使用841BCD码来保存并传输,传输八位数据,这八位数据的最后一位,决定着是读还是写;1表示读,0表示写,如果想要真正运行DS1302,需要先写再读。
2025-03-23 11:00:35
1121
原创 蓝桥杯_通过按键控制数码管显示数字
由于中断和定时器相关的知识点略简单,我目前并没有打算写该两部分的内容,如果大家有需要这部分的,可以在评论区反馈,如果需要我会及时补上蓝桥杯中的中断和定时器的部分。大家看这篇文章的标题,按键控制数码管显示数字,首先脑子里要有一个整体框架,我们需要创建两个.c文件,一个是按键key,另一个是数码管seg,然后用main.c文件显示数字即可。
2025-03-16 14:18:22
1128
原创 scanf函数
表示该输入项,读之后不赋予相应变量,跳过该输入值例如:scanf(”%d%*d%d“,&a,&b)当输入1 2 3时,就会把1赋予a,2被跳过,3赋予b。
2024-01-09 23:17:52
662
原创 数据输入输出的概念及在C语言中的实现
1 所谓输入输出是以计算机为主体而言的2 本章介绍的是向标准输出设备显示器输出数据的语句3 在C语言中,所有的数据输入、输出 都是由库函数完成的,因此都是函数语句4 在使用C语言库函数时,要用编译命令#include将有关“头文件”包括到源文件中,使用标准输入输出库函数时要用到“stdio.h”文件,因此源文件开头由以下预编译指令#include<stdio.h>或者#include"stdio.h"stdio是standard input&output的意思标准的输入输出。
2024-01-08 10:40:55
1421
原创 数据结构补充知识点
在这里呢,有一个非常有意思的题,这道题很容易出错在这里,如果正常分析的话,q应该是21 ,为什么最后出现了22呢,那么这里面就有一个意外,由于编译器的原因,他会先运算【(++j)+(++j)】,也就是说他所运行出来的应该是7,那么结果就应该是7+7+8=22,记住吧,应该学到数据结构就能解释通了。
2024-01-07 20:26:45
446
原创 数据类型----基本类型
1 基本数据类型:不可以再分解成其他类型了,是自我说明的2 构造数据类型:一个构造类型的值可以分解成若干个成员或者元素,每个成员都是一个基本数据类型或者又是一个构造类型例如:数组类型、结构体类型、共用体(联合体)类型3指针类型:他的值是用来表示某个变量在存储器中的地址4 空类型:再调用函数时,通常向调用者返回一个函数值,这个函数值具有一定的数据类型,应在函数定义及函数说明中给以说明,例如在前序中,写的int max(int a,int b);
2024-01-07 15:18:16
955
原创 字符指针
将指针指向ch1,通过修改指针p的值,让他的h变成了H,那么ch1的值也被修改了,所以说输出的p和ch1都是大写H,之后,又将ch2的h赋值给了p,那么ch2正常还是小写h。2通常,我们把char数据类型的指针变量称为字符指针变量。字符指针变量与字符有着密切关系,他也被用来处理字符串。3初始化字符指针是把内存中字符串的首地址赋予指针,并不是把该字符串复制到指针中。FE00表示的是指针所对应的内存单元。
2023-12-26 16:59:44
594
原创 指针和二级数组
看上面的代码,我们观察最后两个式子,a+1表示从a[0]行换到a[1]行,然后在加一个*(a+1)就是降级了,从二级指针降到一级指针,我在*(a+1)的基础上,再+1就替换成了一级指针,在*(a+1)+1的基础上最前面在加一个*就会移动到a[1][1]的位置,以上呢就是用行指针来表示二维数组的某个元素。二维数组名代表数组的起始地址,数组名加1,是移动的一行元素,因此,二维数组名常被称为行地址。·int a3,含有三个元素,a[0],a[1],a[2]·元素a[0],a[1],a[2]都是一维数组名。
2023-12-25 13:41:01
956
原创 指针与数组
(1)在C语言中,数组的指针是指数组在内存中的起始地址,数组元素的地址是指指数组元素在内存中的起始地址。指针变量和数组在访问数组中元素时,一定条件下其使用方法具有相同的形式,因为指针变量和数组名都是地址量。一共可以分为两大类,a[i]和*(p+i),又因为p=a,所以说,前面的两大项,p和a是可以互换的。(x+i) 和px[i]具有完全相同的功能:访问数组的第i+1个数组元素。(2)一维数组的数组名为一维数组的指针(其实地址)但指针变量和数组的指针(或叫数组名)在本质上不同,a+1 ,*(a+2) (对)
2023-12-24 18:17:25
366
原创 指针的含义
pa这个含义就是取pa的地址,那么pa是一个虚拟的地址,只是简单的存放了pa而已,所以输出的该是pa的虚拟地址。如果电脑是64位的,不管是int、double、char等,那么都是8个字节。*pa就是指针,最后指向了a=10,所以他最后程序输出是10。pa表示的意思就是这个地址,并不会显示出10这个数字。(2)指针有多少个字节?
2023-12-24 05:32:22
418
原创 字符串逆序输出
逆序输出就是本来abc输出的,然后我想让他输出成cba,那么我们还是要用到for循环,只不过原先是从零开始往上加,这回呢,是从上面往下减。我们观察上面这个图片,我们想要输出olleh,那么我们就要从4开始往后减,所以说应该为n-1,然后i>=0。在最后的最后,我再写一种高级写法,这种方法,是面试的时候经常出的方法———调换位置。那么我们如何去省略倒序后的前面的一堆零,我们要引入后面的一个知识,strlen。然后我们进入下一个层次,如何添加输入的前缀,那么我们假如宏定义,例如这样。
2023-12-19 18:29:35
498
原创 字符数组初始化二维数组
C语言中没有字符串常量,用字符数组处理字符串,字符串结束表示:‘\0’n表示行,行数=一维数组,整个二维数组/单行数组。m表示列,单行总共占据的大小/他的元素类型。putchar是输出字符。
2023-12-19 17:15:15
628
原创 字符数组的初始化
s表示的是字符输出,那么我们可以发现为什么第一行后面有两个问号,在前面的学习中,我们知道字符和字符串之间只差\0,那么如果输出的话,他们俩是不可以相等的,第一行str1他是缺少\0,所以说str1他输出的时候存在问题;第二行为什么就能输出正确呢,因为str2他在中括号里面存在6,但是后面只存在三个字符,所以说后面的他只会用0去填充,虽然说abc是三个字符,但是程序在识别的时候,他的后面存在\0,那么他最后输出的就可以是“abc”了。putchar是单独输出字符的,字符输出函数。
2023-12-18 22:42:55
358
原创 二维数组的定义
因为他是要写出两行三列,那么我们就需要去用两个for循环嵌套,就跟九九乘法表的意思差不多。我们观察这个代码,可以发现二维数组它可以看成两个一维数组的结合,2*3*4=24。在二维数组中,存放顺序是先存放行,在存放列,因为内存是一维的。那么接下来我们进行敲代码。那么,接下来我们打代码。数据类型 [常量表达式][常量表达式]第一个行数,第二个列数。元素个数=行数*列数。
2023-12-17 20:11:57
369
原创 冒泡排序代码练习
什么是冒泡排序,就是让数组按照从大到小,或者从小到大排列出来,我们在排列大小之前首先要先把数组的几个数先列出来,然后再根据数组的所有数进行前面学过的比大小的知识计算,这是我们整体的一个思路,接下来我们一步一步写。一共五个数,所以要比较四次,第一次比较出来一个16,第二次比较出来13,第三次8,第四次2,剩下个1就不用比较了, 我们把比较的次数设成i,第一个for循环是比较次数,第二个嵌套循环一次的比较数量,最后符合条件交换,最后得到第一次的值再进行下一次。我们在这个基础上进行修改。
2023-12-17 12:39:39
467
原创 一维数组的引用和初始化
我们现在理解代码的第七行,我先举个例子,假设有一堆苹果,总价和单价都知道,那么总价除以单价就是数量,在前面我们知道 内存字节数=数组维数*sizeof(元素数据类型),所以用内存字节数除以数据类型就是数组维数,其次代码第十五行,前面有解释过,我在解释一遍,4*6=24,因为a[]是一个数组,他不能表示全部,他只可以数一个个表示。(2)只能逐个引用数组元素,不能一次引用整个数组。(2)static数组没有赋值,系统自动赋值为0。(3)假如给部分数组赋初值,那么后面的自动为0。(1)数组必须先定义,再使用。
2023-12-16 23:46:58
382
原创 一维数组的定义
(1)数组是具有一定顺序关系的若干变量的集合,组成数组的各个变量统称为数组的元素(2)数组中的各元素的数据类型要求相同,用数组名和下标确定,数组可以是一维的,也可以是多维。
2023-12-16 22:18:43
413
原创 continue语句
我们观察这个代码,会发现代码并没有终止运行,仅仅是把符合n%3的结果忽略掉了,后面的照常进行,直到for整个循环循环完再结束。continue结束本次循环,接着判断下一次是否循环,我们上实例,用代码去理解continue。continue直结束本次循环,而break终止本层循环。continue和break的区别就是。
2023-12-16 17:46:34
391
原创 break用法
如果圆的面积大于100就会终止循环,那么如何体现出他只能终结一个循环呢,请看下面这个代码,我们都知道while(1)他是一直循环的,而内层for加入了break就成了终止的了,并没有阻止while循环break只终结了for的循环。如果需要终止while的话,需要在后面加入break才可以,例如这样。但是值得注意的点事break只能用在循环语句和switch当中。break他是用于从循环语句中跳出一层循环体的,提前结束循环。
2023-12-16 13:00:15
419
STM32 毕业设计模板 - 集成蓝牙、串口、4×4键盘、超声波、SPI 等模块驱动(含注释 + 可复用框架)
2025-07-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人