- 博客(35)
- 收藏
- 关注
原创 温湿度上传OneNET项目
本文介绍了基于STM32和ESP8266的温湿度监测系统设计,通过DHT11传感器采集数据并上传至OneNET物联网平台。系统硬件包括STM32主控、ESP8266 WiFi模块和DHT11传感器。详细阐述了DHT11的工作原理、单总线通信协议以及数据格式解析方法。软件部分实现了MQTT协议对接OneNET平台,包含设备连接、数据发布和心跳维护功能。最终实现温湿度数据的实时采集、无线传输和云端展示,为智能家居等应用提供了实用解决方案,具有响应快、功耗低、性价比高等特点。
2025-06-19 10:31:54
781
原创 MQTT介绍
本文重点讲解了MQTT 3.1.1版本的报文格式和通信机制。MQTT是一种轻量级的发布/订阅消息协议,广泛应用于物联网领域。文章详细解析了MQTT报文结构(固定报头、可变报头和有效载荷)、QoS服务质量等级(0、1、2)、心跳机制和遗嘱功能等核心概念。同时提供了MQTT服务端搭建方法(以OneNET为例)和报文示例,包括CONNECT、SUBSCRIBE、PUBLISH等关键报文的具体实现。最后给出了基于ESP8266的MQTT编程实战代MQTT编程实战代码,展示了如何实现MQTT连接、订阅发布等功能。
2025-06-16 17:35:46
769
原创 单片机的低功耗模式
STM32处理器提供了三种低功耗模式:睡眠模式、停机模式和待机模式,适用于不同功耗需求场景。睡眠模式下CPU停止而外设运行,节能效果最差;停机模式关闭CPU和核心外设时钟,保留SRAM内容;待机模式仅保留唤醒逻辑,功耗最低但会复位。文章详细介绍了各模式的进入/唤醒条件、寄存器配置及实验方法,通过按键控制LED状态变化来演示模式切换。实验结果验证了不同模式下的功耗表现和唤醒特性,为低功耗设计提供了实践参考。代码实现展示了时钟配置、中断处理和模式切换的具体操作方法。
2025-06-07 09:24:45
1191
1
原创 项目:实时时钟
本项目实现了一个基于STM32的OLED显示屏时钟系统,具备时间显示、日期显示和闹钟功能。系统通过四个按键实现模式切换和时间设置:KEY1进入时间/闹钟设置模式,KEY2循环切换设置项,KEY3/KEY4增减数值。硬件采用STM32开发板、OLED显示屏、蜂鸣器和按键模块,软件通过RTC模块获取精确时间,并实现了以下核心功能:实时显示当前时间和日期;闹钟设置与触发功能、时间设置模式;闹钟闹钟设置模式;蜂鸣器鸣响时可通过任意停止。
2025-06-06 10:16:04
685
原创 BKP(备份寄存器)和 RTC(实时时钟)
STM32的备份寄存器(BKP)和实时时钟(RTC)模块解析:BKP具有断电数据保持特性(需VBAT供电)。其主要功能包括管理侵入检测和RTC校准,需通过配置RCC_APB1ENR和PWR_CR寄存器来启用访问。实验证明BKP数据在系统复位后保留,但断电后会丢失。RTC是独立定时器模块,提供时间和日历功能,与BKP同属后备域,复位后设置保持不变。支持三种时钟源选择,包含32位计数器和20位预分频器。通过HAL库函数可实现时间设置/读取、闹钟。实验展示了RTC时间设置和闹钟触发功能,需注意RTOFF标志位判断
2025-05-30 16:13:44
1703
原创 智能门禁的项目
摘要:本项目实现了一个基于STM32的密码锁系统,采用矩阵键盘输入密码(支持#确认/*修改),OLED显示交互信息,W25Q128闪存存储密码。主要功能包括:密码正确时继电器开锁,错误3次触发蜂鸣器报警;通过I2C协议驱动OLED显示中文提示(如"请输入密码"),SPI协议读写W25Q128存储密码;矩阵键盘采用中断扫描法实现4x4按键检测。系统包含完整的硬件驱动(键盘、OLED、蜂鸣器、继电器)和密码管理逻辑(比对、修改、错误处理),展示了嵌入式系统中外设控制、协议通信与状态管理的综合应用。
2025-05-27 10:14:36
1748
2
原创 STM32中的SPI通信协议
本文对比了IIC和SPI两种通信协议的主要特点:IIC采用半双工通信,协议较复杂,通过地址选择从机,速率约100kHz,通信线较少;SPI采用全双工通信,协议简单,通过引脚选择从机,速率可达50MHz,但需要较多通信线。详细介绍了SPI总线的物理架构(SS、MISO、MOSI、SCL四线)、工作模式(4种CPOL/CPHA组合)及STM32的SPI接口实现。重点讲解了W25Q128存储器的特性、架构和操作指令,包括读ID、写使能、读状态寄存器、页写、扇区擦除等功能的实现方法,并提供了完整的实验代码示例。
2025-05-25 15:00:56
1530
原创 项目:吸烟室管控系统
本文介绍了一个基于STM32的烟雾检测系统设计方案。系统通过MQ-2传感器采集环境烟雾浓度,将数据实时显示在LCD1602屏幕上,并允许按键调整报警阈值。当烟雾值超过设定阈值时,系统会触发蜂鸣器报警并启动风扇;低于阈值则关闭报警和风扇。文章详细说明了MQ-2传感器的工作原理、引脚定义及硬件接线方式,并提供了ADC采集模块的初始化代码和主程序框架。该系统具有灵敏度高、响应快的特点,适用于家庭和工厂的可燃气体泄漏监测。
2025-05-24 15:16:46
945
原创 STM32中的IIC协议和OLED显示屏
本文对比分析了串口通信和I2C总线的主要特点。文章详细介绍了I2C总线的工作原理、时序特性及其在0.96寸OLED显示屏中的应用实现,包括硬件连接、初始化配置、数据传输和显示控制等关键代码实现。最后通过实验展示了如何在OLED上显示字符、汉字和图像等内容。
2025-05-24 15:14:37
1672
原创 STM32中的ADC
ADC(Analog-to-Digital Converter,模拟/数字转换器)是一种将连续变化的模拟电压信号转换为数字信号的设备,12位ADC是一种逐次逼近型转换器,能够将模拟信号转换为0到4095之间的数字值。它通常具有多个通道,可以测量外部和内部信号源,并支持单次、连续、扫描或间断模式进行转换。ADC的转换结果可以左对齐或右对齐存储在16位数据寄存器中,且具有模拟看门狗功能,用于检测输入电压是否超出预设阈值。
2025-05-20 21:00:58
1369
原创 STM32中的DMA
DMA(直接存储器访问)是一种用于在外设与内存、存储器之间进行高速数据传输的技术。它允许不同速度的硬件装置直接通信,无需依赖CPU,从而减轻CPU的负担。DMA的传输模式包括正常模式和循环传输模式,指针递增模式则决定了地址是否在每次传输后自动递增。DMA的数据对齐方式和寄存器配置也是其重要特性。通过实验,可以验证DMA在内存到内存、内存到外设和外设到内存数据传输中的高效性。
2025-05-17 16:26:56
1628
原创 STM32串口通信常用的模块
本文主要介绍了蓝牙模块、ESP8266和4G模块在嵌入式开发中的应用及其配置方法。牙模块广泛应用于智能家居、智能小车等设备;SP8266是一款高性能的WIFI模块,常用于物联网开发。4G模块则通过SIM卡实现远程通信。文章详细介绍了这些模块的硬件连接、AT指令使用、以及如何通过代码实现模块的初始化和通信功能。此外,还提供了多个实验项目,如蓝牙遥控插座、ESP8266连接TCP服务器、4G模块控制灯等,帮助读者深入理解这些模块的实际应用。
2025-05-13 14:06:02
1420
原创 STM32的串口
本文介绍了通信的基础知识,包括串行通信与并行通信、全双工、半双工及单工通信、同步通信与异步通信、通信速率(比特率和波特率)等概念。串行通信通过一位一位地顺序传送数据,具有线路简单、成本低但速度慢的特点。此外,文章还介绍了串口通信的接口类型、STM32的USART功能及其配置方法,并通过实验展示了如何使用串口发送和接收数据,包括不定长数据的接收和处理。
2025-05-11 14:36:19
1275
原创 项目:感应开关垃圾桶
本篇文章主要介绍一个小项目:智能感应垃圾桶。主要介绍两个模块:sg90舵机和HC-SR04超声波传感器的工作原理和相关的工作参数和引脚介绍。最后完成本项目。
2025-05-08 10:02:39
1384
原创 STM32的看门狗
本文章主要介绍,定时器中的独立看门狗(IWDG)和窗口看门狗(WWDG),讲解两个的工作原理,函数,寄存器,以及溢出时间的计算和相关的配置步骤。通过两个小实验,来进一步加深对两个定时器的理解。最后总结了两个
2025-05-07 21:13:38
2019
原创 CAN协议介绍
本文简单介绍CAN的相关知识点。开始对CAN协议的定义,分类,特点进行简单的介绍。接着,分别从物理层和协议层两方面展开讲解,在物理层方面,讲解相关的硬件,CAN控制器,CAN收发器、CAN总线的等等。协议层方面,主要介绍数据帧,CAN位时序。最后讲解控制器相关的寄存器和库函数,利用小实验来进一步熟悉can的配置。
2025-05-06 11:11:34
1753
原创 STM32的定时器
STM32F103C8T6微控制器内部集成了多种类型的定时器,这些定时器在嵌入式系统中扮演着重要角色,用于计时、延时、事件触发以及PWM波形生成、脉冲捕获等应用。7个定时器高级定时器(1)通用定时器(3)看门口(2)滴答定时器(1)TIM1:1个16位带死区控制和紧急刹车,用于电机 控制的PWM高级控制定时器。不仅具备基本的定时中断功能,还拥有内外时钟源选择、输入捕获、输出比较、编码器接口以及主从触发模式等多种功能。
2025-05-04 11:58:15
1712
原创 STM32的SysTick
本篇文章主要讲解手撸延时函数、系统的滴答定时器和完成一个排队系统的项目。讲解关于滴答定时器的基本原理,底层逻辑,模拟操作系统实现多线程控制小灯的亮暗;讲解红外传感器模块的基本工作原理,完成红外电灯的实验;讲解LCD1602显示屏的基本逻辑,时序图,相关指令,完成显示一个字符和一个字符串的小实验;最后完成排队系统的小项目。
2025-04-28 19:29:21
2232
原创 项目:电动车报警器
本篇文章主要介绍电动车报警项目,首先介绍三个模块:震动传感器,继电器,433M无线收发模块的基本原理,在通过小实验的方式熟悉三个模块的使用。最后利用这三个模块完成本章的项目。
2025-04-25 10:57:56
1401
原创 STM32 的 GPIO和中断
本篇文章主要介绍STM32中有关于GPIO和中断相关的知识方面。主要有GOIO的八种工作模式,寄存器和相关的库函数。在中断方面介绍中断的工作原理,NVIC、EXTI和AFIO,分别从结构图、寄存器、相关的库函数介绍。除此之外,还介绍了三个模块:LED、蜂鸣器和按键,通过代码实现LED灯的点亮,制作流水灯,低电平触发蜂鸣器,按键输入控制LED灯,以及采用中断的方式,实现按键控制LED1,而LED2持续频闪。
2025-04-24 10:04:59
1677
原创 STM32入门基础介绍
本篇主要介绍STM32的一些入门的基础知识,包括什么是单片机,嵌入式硬件的基础知识,开发环境的搭建,寄存器映射,存储器映射,如何建立HAL版本的工程模板,还有一些程序的下载方式,系统框架,和时钟树等等。
2025-04-21 15:24:25
2504
原创 关于学习STM32的C语言的知识
本篇文章主要简单介绍在stm32中常用到的一些关于C语言的知识:数据类型、宏定义、结构体、枚举、指针。除此之外,还有条件编译,与C语言中存在一些区别,请注意。具体详细内容可参考C语言的篇章。
2025-04-19 16:07:00
1319
原创 C语言的文件操作
本篇文章主要介绍C语言中,如何通过调用函数的方式来写入文件和读取文件,详细介绍一些相关的函数。除此之外,介绍了C中的关于流的定义。最后通过练习来熟悉操作流程。
2025-04-16 18:06:55
1145
原创 C语言的常用函数
本篇文章主要介绍C语言中一些常用的函数:字符串函数、时间和日期函数、数学函数、动态内存分配函数等。其中主要介绍malloc( )函数的使用方式。最后介绍常见的内存动态分配的原则以及常有的错误和应对策略。
2025-04-16 16:07:46
1297
原创 C语言的结构体和共用体
本篇文章主要介绍结构体的基本使用,包括声明,调用,结构体指针,结构体数组等等,以及进一步介绍共用体,说明结构体和共用体的区别和相似。除此之外,还介绍了typedef的使用,对基本数据类型,结构体,函数指针,数组指针等其别名。通过一些练习来加深对结构体,共用体和typedef的理解。
2025-04-14 19:24:01
1001
原创 C语言的函数—高级应用
本篇文章是对C语言函数的进一步讲解,主要讲了:递归函数、指针函数、函数指针、回调函数、内部函数、外部函数以及函数的可变参数。通过对举例练习来进一步的认识函数的使用。除此之外,根据以往的学习积累,进一步认识变量,在以往篇章讲解变量按数据类型分类的基础上,现在从声明位置、存储方式、和一些变量的修饰符来对C语言中的变量有一个全面的认识。
2025-04-12 10:27:08
1285
原创 C语言的函数—参数传递机制
本篇文章,主要写的关于C语言中函数的传递机制。包括值传递、地址传递。进一步介绍函数体中基本数据类型、变量指针、数组、字符串、指针数组的形参书写格式以及函数原型的书写。通过一些举例练习来加深对函数参数传递机制的了解,最后介绍C++中的引用传递。
2025-04-10 16:47:49
1311
原创 C语言的指针 (上篇) - 指针的概念
访问内存中变量存储的数据:直接访问(通过变量名来访问)和间接访问(通过首地址来访问)地址==指针变量:命名的内存空间,用于存放各种类型的数据。变量名:变量名是给内存空间取的一个容易记忆的名字。变量值:在变量单元中存放的数据值。变量的地址:变量所使用的内存空间的地址,即指针。指针变量:用一个变量来存储地址。我们可以通过访问指针变量达到访问内存中另一个变量数据的目的。数据类型 *变量名 [ = 初始地址值];解释说明:字符用于告知系统这里定义的是一个指针变量,通常跟在。
2025-04-06 16:42:27
1132
原创 C语言-数组
数组在声明时,使用大括号,同时对每一个成员赋值// 等同于//数组 arr 的长度,将根据大括号里面的值的数量,确定为 3对数组部分元素赋初值:如果大括号里面的值,少于数组的成员数量,那么未赋值的成员自动初始化为 0。// 等同于注意:大括号里面的值只能少于或等于元素的数量,不能超过。否则编译会报错。将整个数组的每一个成员都设置为零,最简单的方式如下//其他类型赋值方式二:指定数组下标位置上的元素进行赋值。//未指定的索引位置自动赋值为0指定位置的赋值与顺序赋值。
2025-04-05 14:23:57
1150
原创 C语言-流程控制结构
本文主要介绍C语言的流程控制部分。包括分支结构:if-else、switch-case; 循环结构:for、while、do-while;嵌套循环以及无限循环。还有break'、continue、go-to关键字的使用。
2025-04-03 11:34:18
851
原创 C语言基础知识——注释;HelloWorld进行剖析;printf()函数;
源文件中用于“解释”、“说明”程序的文字是注释。作用:1.对程序中的代码进行解释、说明;2.有利于对程序的调试-->注释的信息不参与编译的。意味着生成的二进制文件不包含注释信息。注释的种类:单行注释://;多行注释:/**/;注意:多行注释不可以嵌套使用;在双引号内使用注释,将失去注释的作用。1.规范的代码风格 正确的缩进和空白 1. 使用一次tab操作,实现缩进,默认整体向右边移动。相反,使用 shift+tab整体向左移 2.运算符两边习惯性各加一个空格。比如: 2 + 4 * 5
2025-03-27 17:55:15
380
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅