- 博客(79)
- 收藏
- 关注
原创 第五章:C++对C语言数据类型的扩展
摘要:本文介绍了C++对C语言数据类型的扩展和改进。主要内容包括:1)基本数据类型与C语言相同,但新增bool类型;2)结构体允许省略struct关键字并支持成员函数;3)联合体支持匿名联合;4)枚举类型独立,不可当整型使用;5)布尔类型(bool)专用于逻辑值,可隐式转换;6)字符串处理方面,C++既兼容C风格字符串,又提供string类支持拷贝、连接、比较等操作。文中通过代码示例展示了各类型的具体用法。
2025-06-30 18:05:19
330
原创 第四章:名字空间
C++名字空间是解决全局命名冲突的重要机制。文章介绍了名字空间的由来、定义语法和三种访问方式:作用域限定符、using引用单个成员和引用全部成员。通过示例说明了不同名字空间中同名成员的使用方法,还介绍了无名名字空间和嵌套名字空间的使用场景。名字空间可以有效隔离不同模块的标识符,避免大型程序中的命名污染问题,是C++程序组织的重要工具。
2025-06-30 17:59:12
227
原创 第三章:数据的输入输出
C++中的输入输出采用流的概念,输入流从设备流向内存,输出流从内存流向设备。cout使用插入运算符<<自动识别数据类型进行输出,比printf更简便。cin使用析取运算符>>从输入流提取数据,能自动匹配变量类型,支持多变量连续输入,数据间用空白分隔。流操作具有类型自适应性,如char变量只读取单个字符,数字则读取完整数值。这些特性使C++的I/O操作更灵活高效。
2025-06-30 17:55:19
672
原创 第二章:第一个C++程序
《C++ Hello World程序示例》 摘要:展示了一个简单的C++程序"01helloworld.cpp",包含基本结构:使用iostream库和std命名空间,main函数中通过cout对象输出"hello world!"并换行。介绍了两种编译方法:g++直接编译或gcc加-lstdc++选项。程序分析指出.cpp是C++标准扩展名,解释了#include、命名空间、cout输出对象和endl换行符的作用,并与C语言的printf进行类比。
2025-06-30 17:51:02
97
原创 第一章:C++综述
C++由Bjarne Stroustrup从C语言扩展而来,最初命名为CWithClass,1983年正式定名。它融合了面向过程、面向对象和泛型编程三种模式。在嵌入式开发初级阶段,掌握C++核心编程和QT编程即可满足需求。
2025-06-30 17:48:11
100
原创 第十七章:十三届省赛真题
摘要:本文介绍了基于STM32的两块开发板(A板和B板)的硬件功能与软件实现。A板通过I2C驱动OLED显示串口接收数据,并实现按键控制LED状态及LoRa数据传输;B板完成ADC电压采集、OLED显示及LoRa数据接收控制LED。关键代码包括:I2C通信的OLED驱动、串口中断处理、按键扫描消抖以及ADC数据采集转换。系统采用HAL库开发,实现了双板间的无线数据交互与状态同步,展示了STM32在嵌入式系统中的典型应用。
2025-06-30 09:57:36
1642
原创 第十六章:十六届模拟题二
本文介绍了物联网竞赛中LoRa通信系统的设计与实现要求。系统包含终端A和B,需使用STM32CubeMX配置并提交对应的hex文件。终端A需实现OLED显示接收内容、串口通信、指示灯控制及按键切换界面功能;终端B需采集电位器电压,通过LoRa控制终端A指示灯,并根据电压比较结果控制自身指示灯状态。重点要求包括:严格遵循显示格式、使用指定字库、自定义通信协议避免干扰,以及按规范提交程序文件。不符合文件命名和提交要求的作品将被扣分或评为零分。
2025-06-30 09:46:56
664
原创 第十五章:十六届模拟题一
该设计要求基于STM32和LoRa通信的物联网温度监测系统。系统分为终端A和终端B:终端A通过红外热释电模块检测人员存在,控制OLED显示开关;通过按键调整温度阈值,当接收温度超过阈值时LED闪烁;终端B定时采集环境温度并通过电位器调节发送间隔,通过LoRa发送至终端A。设计采用STM32CubeMX配置硬件外设,包括I2C、ADC、定时器和LoRa模块等,软件实现OLED显示、按键消抖、温度采集及LoRa通信功能。系统需提交A.hex和B.hex文件,满足双向稳定通信、初始温度25℃等功能要求。
2025-06-28 13:38:57
748
原创 第十四章:光敏 、热释电模块
摘要:本文介绍了蓝桥杯物联网竞赛实训平台的光敏/热释电模块应用方案。硬件方面,通过U1A拓展接口连接传感器,光敏(PB3)和热释电(PA12)模块分别接入STM32。软件实现采用STM32CubeMX配置ADC和UART外设,通过HAL库读取传感器数据。主程序循环采集并打印光敏电阻(LDR)的ADC数值和热释电(PR1)的GPIO状态,数据通过串口输出,采样间隔500ms。代码包含ADC初始化、数据采集和串口打印功能,为物联网传感器应用提供了完整实现方案。(149字)
2025-06-28 13:26:31
133
原创 第十三章:脉冲频率捕获模块
摘要:本文介绍了基于STM32的脉冲信号采集与频率测量方法。系统通过定时器2的输入捕获模式获取脉冲信号,使用PA15引脚连接外部脉冲芯片,通过捕获上升沿计算脉冲周期。文中详细说明了三种计数情况处理逻辑,并给出伪代码实现。硬件配置包括ADC、TIM定时器和USART串口,软件实现采用STM32CuBeMX生成初始化代码,通过HAL库函数捕获脉冲周期并计算频率和占空比。最终通过串口输出ADC采样值和脉冲频率(Hz)及占空比(%)数据,测量周期为500ms。
2025-06-28 13:22:52
174
原创 第十二章:温度传感器拓展模块
本文介绍了基于STM32的I2C温度传感器编程实现。通过STM32CubeMX配置I2C2和USART2外设,编写了STS30温度传感器的驱动程序。程序包含温度数据采集函数STS30_Proc(),通过I2C总线发送指令并读取传感器数据,将原始数据转换为实际温度值。在主循环中,每隔500毫秒读取并打印当前温度值到串口。代码展示了I2C通信的基本流程、数据转换方法及串口调试输出功能。
2025-06-26 19:00:26
371
原创 第十一章:ADC电位器拓展模块
摘要:本文介绍了蓝桥杯物联网竞赛实训平台的电位器模块电路原理图,展示了引脚资源配置(AIN1/PB3、AIN2/PA15、LD1/PA12、LD2/PA11)。通过STM32CubeMX进行硬件配置后,在Keil中编写ADC采集程序,实现双通道(通道2和通道11)电压采集与串口输出。程序采用HAL库进行ADC初始化、转换和数据处理,将12位ADC原始值转换为实际电压(参考电压3.3V),并通过USART2以1秒间隔输出两通道电压值。
2025-06-26 18:56:15
374
原创 第十章:矩阵按键
摘要:本文介绍了基于STM32的矩阵键盘扫描实现方法。采用行列扫描原理:行扫描时将所有行线置低电平,列线置高电平;列扫描则相反。通过STM32CubeMX配置硬件,将行设置为输入上拉模式,列设置为输出模式。在Keil编程中实现了逐列扫描检测,当检测到按键按下时,通过延时消抖和串口输出键值(1-6对应不同按键)。程序采用轮询方式持续扫描键盘状态,并保持按键释放检测,避免重复触发。
2025-06-26 18:48:20
293
原创 第九章:LORA
LoRa技术是一种远距离、低功耗的线性调制扩频通信技术,基于SX1278芯片实现。其核心优势包括:传输距离可达2-20km,灵敏度比传统FSK高8-10dB,具有抗干扰能力强、保密性高等特点。技术实现上通过扩频调制将信号带宽扩展,并支持前向纠错。本文详细介绍了SX1278收发器的工作机制,包括射频前端、调制解调器和SPI接口配置方法,并提供了完整的LoRa驱动移植方案,涵盖初始化、参数设置、数据收发等核心功能。通过STM32硬件平台实现了LoRa通信功能,包括按键触发发送、数据接收处理和OLED显示等应用示
2025-06-23 19:31:34
1007
原创 第八章:定时器TIM
摘要:本文介绍了基于STM32的定时器中断编程方法。首先讲解了理论知识,然后通过STM32CubeMX和Keil进行编程实现。重点展示了一个定时中断回调函数HAL_TIM_PeriodElapsedCallback,使用全局变量cnt进行1秒计时,并通过TIM17定时器实现周期性中断。每次中断cnt自增,达到1000时输出"1s"并清零计数器,同时重新启动定时器中断。该方法可用于精准的定时控制应用。
2025-06-21 20:12:23
136
原创 第七章:ADC
摘要:本文介绍了STM32的12位ADC模块特性及使用方法。该ADC可通过硬件过采样扩展到16位精度,包含16个外部通道和2个内部通道(温度传感器和电压基准),支持单次或扫描转换模式,最高采样率达1.14MSPS。文章详细说明了通过STM32CubeMX进行ADC配置,并提供了Keil编程示例代码,包括ADC数据获取函数实现和主程序框架。主程序中展示了ADC电压采集与OLED显示的结合应用,通过HAL库函数读取ADC值并转换为实际电压值(0-3.3V范围),同时集成了RTC时间显示功能。代码示例包含完整的初
2025-06-21 19:05:14
222
原创 第六章:IIC
摘要:本文系统介绍了I2C总线技术及其在STM32中的应用。I2C是一种由飞利浦设计的串行通信总线,采用双线制(SCL时钟线和SDA数据线),支持多主多从架构,具有地址唯一识别、半双工通信等特点。文章详细阐述了I2C的物理层(上拉电阻要求)和协议层(起始/停止/应答信号机制),并通过STM32 CubeMX和Keil开发环境,给出了OLED驱动和24C02 EEPROM读写的具体代码实现示例,包括硬件I2C初始化、数据写入和读取等关键函数。实验部分展示了通过I2C接口对24C02芯片进行数据存储和读取的操作
2025-06-21 17:31:45
906
原创 第五章:RTC
STM32的实时时钟(RTC)是一个独立定时器模块,通过备份寄存器和纽扣电池实现断电后数据保存。RTC本质上是32位计数器,需软件配置才能输出日历时间,无专用GPIO接口。使用STM32CubeMX配置后,通过Keil编程调用HAL库函数获取时间日期信息。主要代码流程包括:初始化RTC和USART,在主循环中调用HAL_RTC_GetTime/GetDate读取时间结构体,并通过串口以"YY/MM/DD"和"HH:MM:SS"格式输出。关键结构体为RTC_TimeTy
2025-06-21 16:47:54
257
原创 第四章:串口
UART是一种广泛应用的串行异步通信协议。它通过TX、RX和GND三条线实现硬件连接,采用起始位(低电平)、数据位(5-9位)、可选校验位和停止位(高电平)的帧格式。常用配置为96008N1(9600波特率、8数据位、无校验、1停止位)。STM32可通过HAL库实现UART通信,包括轮询发送、DMA接收(配合IDLE中断处理不定长数据)和接收中断等方式。关键点包括:波特率设置、数据格式配置、电平匹配和中断/DMA处理机制。程序示例展示了如何初始化UART、发送数据和通过中断/DMA接收数据。
2025-06-21 16:19:15
855
原创 第三章:外部中断
蓝桥杯物联网开发板采用两个按键共享一个EXTI中断引脚的方案,这导致硬件上只能启用一个中断服务。本文将介绍如何通过重写中断回调函数的方式,在一个外部中断中实现对两个按键的区分控制,最终实现单个LED灯的状态反转功能。通过合理配置NVIC中断优先级和优化中断处理逻辑,解决了共用中断引脚带来的硬件限制问题。
2025-06-21 16:11:47
163
原创 第一章:LED
摘要:使用STM32CUBEMX配置STM32开发板,首先使能RCC和SYS系统时钟,设置时钟树参数。配置3个LED为OUTPUT模式,并将初始状态设为高电平。在main函数while循环中实现3个LED的不同闪烁模式:AL1保持常亮,AL2以0.5秒间隔亮灭切换,AL3以1秒间隔亮灭切换。该配置完成了LED的基本控制功能演示。
2025-06-21 11:55:33
112
原创 Linux驱动第十二章、块设备驱动
本文介绍了Linux内核中块设备驱动的基本概念与开发框架。块设备以数据块为单位进行传输,具有缓冲机制,常见设备包括硬盘、U盘等。文章详细阐述了块设备的三个处理层级:文件系统层、IO调度层和驱动层,并解释了关键数据结构如bio、request_queue和gendisk的作用。重点讲解了基于内存模拟磁盘的块设备驱动实现过程,包括设备注册、请求队列初始化、IO请求处理等核心步骤。通过示例代码展示了如何利用多队列机制处理读写请求,并简要说明了磁盘分区和格式化的操作方法。该内容为开发高效块设备驱动提供了实用指导。
2025-06-21 10:10:26
1006
原创 Linux驱动第十一章、PWM子系统
本文详细介绍了PWM技术及其在Linux系统中的实现方法。主要内容包括:1. PWM基础概念,解释占空比、周期等参数;2. Linux PWM子系统框架,分析定时器内部逻辑(PSC、ARR、CNT、CCR);3. 硬件PWM驱动开发,展示设备树配置、驱动编写和用户空间接口实现;4. 通过高级定时器hrtimer模拟PWM的方案,以呼吸灯为例说明具体实现。文章还提供了完整的驱动代码示例,涵盖设备树配置、内核驱动和应用层测试程序,展示了PWM在电机控制和LED调光等场景的实际应用。
2025-06-20 18:53:43
849
原创 Linux驱动第十章:SPI总线驱动子系统
摘要:本文介绍了SPI总线驱动的学习与应用。SPI是一种高速全双工同步串行总线,具有通信简单、速度快等特点,但缺乏应答机制。文章详细讲解了SPI的通信原理、四种采样模式(Mode0-3)和驱动框架,并与I2C总线进行对比。重点阐述了spi_driver结构体、spi_device对象及数据收发函数spi_write()/spi_read()的使用。最后通过M74HC595数码管控制芯片的驱动实现案例,展示了设备树配置、驱动代码编写和应用层测试的完整流程。该案例实现了从终端输入数字并在数码管显示的功能,验证了
2025-06-20 15:16:22
779
原创 Linux驱动第九章:I²C总线驱动子系统
摘要:本文系统介绍了I2C总线通信协议及其在Linux驱动开发中的应用。首先讲解了I2C的基本原理,包括其双线制设计(SCL时钟线和SDA数据线)和主从通信机制。接着分析了Linux内核中的I2C驱动框架,详细说明了i2c_driver、i2c_client等核心数据结构及其操作方法(i2c_master_send/i2c_master_recv)。然后通过具体案例展示了如何编写I2C设备驱动,包括设备树配置、驱动注册、数据收发等关键步骤。最后以温度传感器SI7006为例,实现了基于按键触发的温度和湿度采集
2025-06-20 10:02:38
929
原创 Linux驱动第八章:input输入子系统
摘要:本文介绍了Linux输入子系统(input子系统)的设计意义与实现方法。输入子系统通过分层框架(设备驱动层、核心层、事件处理层)实现了对键盘、鼠标等输入设备的统一管理,使开发者只需关注设备特性而无需重复编写驱动逻辑。文章详细解析了input子系统的关键结构体(input_dev)、注册接口(input_register_device)和事件上报机制(input_event),并通过一个按键驱动实例展示了如何利用输入子系统开发设备驱动,最后给出了配套的用户空间测试程序。该子系统有效解决了输入设备多样性带
2025-06-18 19:40:37
527
原创 Linux驱动第七章、中断及中断子系统
本文详细介绍了Linux中断机制及其应用开发。主要内容包括:1. 中断概念与分类:硬件中断由外部设备触发,软件中断由程序指令触发,两者在触发方式、时机和应用场景上存在差异。2. 中断处理原理:通过保存上下文、执行中断服务例程(ISR)来提高CPU效率,避免轮询等待。3. 设备树中断配置:展示如何在设备树中描述中断引脚资源,并通过Linux内核API获取中断号。4. 中断应用开发:提供按键中断驱动实例,涵盖中断注册、处理函数编写等关键步骤。
2025-06-18 15:42:46
880
原创 Linux驱动第六章、设备树
本文介绍了Linux设备树的概念、语法结构及实际应用。设备树是一种用于描述硬件设备及其配置的树状数据结构,通过.dts和.dtsi文件定义,经dtc编译器生成二进制dtb文件。文章详细阐述了设备树的基本语法规则,包括节点命名、属性定义、地址资源描述(reg属性)、中断连接(interrupt-parent属性)和GPIO控制器配置等关键内容。同时讲解了设备树节点如何在内核中被转换为device_node和platform_device结构体,以及与驱动程序的匹配机制(通过of_match_table)。最后
2025-06-18 14:48:17
978
原创 Linux驱动第五章、Linux平台总线platform
Linux平台总线(platform)模型是一种虚拟总线,将硬件描述与驱动逻辑分离,提升驱动的独立性和兼容性。其核心思想是"先分离,后搭档",通过platform_device.c描述硬件资源(寄存器地址、中断号等),platform_driver.c实现驱动逻辑。匹配方式包括名称匹配、id_table匹配和设备树节点匹配。开发流程:定义设备资源→注册平台设备→实现驱动逻辑→注册平台驱动→获取硬件资源。该模型是IIC、SPI等物理总线的基础,体现了Linux内核模块化设计思想。文中提供了
2025-06-18 11:07:50
318
原创 Linux驱动第四章、Linux内核中竞态解决方案
本文主要介绍了Linux内核中解决并发与并行竞态问题的几种同步机制。首先阐述了临界资源的概念及其保护必要性,随后详细分析了四种常用同步机制:1)自旋锁(spinlock),适用于短临界区且不能休眠的场景;2)信号量(semaphore),允许进程休眠,适合保护较大临界区;3)互斥体(mutex),作为高效的信号量替代方案;4)原子操作,通过硬件支持的不可分割指令实现无锁同步。每种机制都配有代码示例,展示了在字符设备驱动中的实际应用。最后强调应根据具体场景选择合适的同步机制,自旋锁适合中断上下文,信号量和互斥
2025-06-18 08:59:49
520
原创 Linux驱动第三章、Linux处理IO请求的模型
摘要:本文详细介绍了Linux系统中五种I/O模型及其实现原理。从简单的阻塞I/O到高效的异步I/O,每种模型都有其适用场景:阻塞I/O适用于简单应用,非阻塞I/O提高响应性,I/O多路复用支持高并发,信号驱动I/O适合实时应用,异步I/O则提供最高性能。重点剖析了驱动层实现机制,包括等待队列(wait_queue)、poll_wait等核心数据结构与API,并通过代码实例展示了阻塞/非阻塞、I/O多路复用和信号驱动I/O的具体实现。文章强调选择合适I/O模型对优化系统性能的重要性,为开发者提供了全面的技术
2025-06-18 08:34:10
844
原创 Linux驱动第二章、字符设备驱动框架
本文摘要: 本文系统介绍了Linux字符设备驱动的开发框架。首先阐述了Linux"一切皆文件"的设计理念及虚拟文件系统(VFS)的统一接口机制。随后详细讲解了字符设备驱动的核心开发步骤,包括设备号申请、设备操作函数注册、设备节点创建等关键技术。文章通过LED控制实例,展示了如何实现驱动"上通"应用层与"下达"硬件操作的功能,并介绍了自动创建设备节点的udev/mdev机制。此外,还深入剖析了struct cdev和struct device结构体
2025-06-17 19:47:09
781
原创 linux驱动第一章、内核模块
本文摘要:文章首先概述了驱动程序的本质(硬件初始化与接口提供)及Linux驱动的三大类型(字符设备、块设备、网络设备)。重点讲解了内核模块开发的三要素(入口函数、出口函数、许可声明),并通过代码示例展示模块开发流程和Makefile编写。最后详细说明了模块依赖关系的处理方法,包括符号导出(EXPORT_SYMBOL)、符号表路径配置,以及modprobe与insmod命令的核心区别(前者自动处理依赖)。全文系统性地呈现了Linux驱动开发的基础知识和技术要点。
2025-06-17 17:28:04
360
原创 20.Web点灯功能实现
本文分析了基于Web的LED灯控制系统的HTTP通信过程。通过Chrome抓包展示了完整的请求响应报文,包括GET /index.html的主页请求(200 OK响应)以及LED开关控制请求(/on和/off路径)。系统采用HTTP/1.1协议,保持Keep-Alive连接,包含详细的请求头信息如User-Agent、Accept等字段。响应报文显示成功状态(200 OK)和内容类型(text/html或application/octet-stream)。文章还涉及TCP服务器搭建、LED初始化、主页响应等
2025-06-17 12:12:58
140
原创 19.Web开发技术详解
本文介绍了Web开发基础知识及交互功能实现。首先讲解HTML(超文本标记语言)的基本结构和网页搭建,然后引入CSS样式表实现内容与表现分离,接着介绍JavaScript脚本语言及其动态网页功能。重点演示了AJAX技术,通过异步通信实现网页局部更新而不刷新整个页面。最后以"Web点灯"案例展示实际应用,通过按钮交互改变圆形区域颜色,并实现基于AJAX的服务器通信功能。该文涵盖前端开发核心技术栈,包括HTML、CSS、JavaScript和AJAX,展示了从静态页面到动态交互的完整实现过程。
2025-06-17 12:07:07
229
原创 18.HTTP协议详解
HTTP协议解析:从超文本到报文结构 摘要:HTTP协议通过超文本(包含超链接和多媒体元素的HTML文档)构建万维网,这些文档通过URL(包含协议、主机和文件路径)唯一标识。HTTP采用请求-响应模式工作,包含请求报文和响应报文两种结构,其中请求报文包含特定的请求方法。URL通常省略默认80端口,如"http://..."格式。协议的核心在于建立文档间的网状链接关系,实现网络资源的定位与交互。
2025-06-17 11:59:59
204
原创 17.wireshark抓包验证
本文介绍了Wireshark网络抓包工具的安装与使用方法。主要包括:1)软件下载路径;2)基本使用流程;3)过滤器语法详解,涵盖比较运算符(如==、>)、常用协议字段过滤(以太网、IP、TCP/UDP、HTTP);4)位域操作示例(如TCP SYN标志位检测);5)逻辑表达式组合(AND/OR/NOT)。文中提供多个实用过滤示例,如IP地址过滤、端口过滤等,是网络协议分析的实用参考资料。
2025-06-17 11:55:51
271
原创 16.广播与组播
本文介绍了广播与组播的基础知识及其实现方式。广播部分阐述了广播IP地址划分(包括全网广播255.255.255.255和局域网广播地址)和MAC地址配置示例。组播部分说明了D类IP地址范围(224.0.0.0-239.255.255.255)的分配使用。实现方面,广播需设置SO_BROADCAST参数,组播则通过IP_ADD_MEMBERSHIP等选项控制,包含ip_mreq结构体配置组播地址和接口。文中还提供了子网掩码、网关等网络参数的具体配置示例。
2025-06-17 11:51:58
178
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人