- 博客(42)
- 收藏
- 关注
原创 STM32学习(MCU控制)(SPI and Flash 存储)
SPI通信协议与W25Q128 Flash存储芯片应用摘要 SPI是一种高速全双工同步串行通信总线协议,广泛应用于嵌入式系统中。本文详细介绍了SPI的工作原理,包括四种工作模式(CPOL和CPHA组合)、一主多从连接方式以及数据通信机制。重点分析了STM32的SPI外设配置方法,并结合W25Q128 Flash存储芯片进行实际应用说明。W25Q128是一款16MB容量的SPI接口闪存芯片,支持多种操作模式(标准SPI/Dual SPI/Quad SPI)和高速读写(最高104MHz),适用于嵌入式存储需求。
2025-11-01 09:44:16
1414
原创 STM32学习(MCU控制)(RS485 and ModBus)
RS485是一种广泛应用于工业场景的串行通信标准,具有传输距离远(可达1200米)、速率高(最高10Mbps)、成本低等优势。它采用差分线A/B传输数据,通过电压差区分逻辑0和1。在硬件实现上,RS485需要配合MCU的USART模块工作,关键点包括:1)配置485芯片的发送/接收模式控制引脚;2)正确设置USART的通信参数和中断处理机制。开发时需特别注意在数据发送前切换为发送模式,完成后立即切换回接收模式,并处理好空闲中断(IDLE)和接收中断(RXNE)之间的协同关系。
2025-10-31 08:44:39
1551
原创 STM32学习(MCU控制)(WiFi and MQTT)
文章摘要:本文介绍了物联网组网技术及ESP8266 WiFi模块的应用,重点讲解了WiFi、MQTT等协议的组网方式。详细解析了ESP8266模块的原理图、与STM32的连接方式,以及通过AT指令控制WiFi模块连接AP热点的具体实现。内容包括USART3串口配置、中断处理、数据收发等关键代码实现,为物联网设备远程监控和操作提供了技术方案。
2025-10-30 08:07:37
1407
原创 STM32学习(MCU控制)(I2C 模拟 and E2PROM)
IIC(集成电路总线)是一种由飞利浦开发的双线制同步串行通信总线,广泛应用于板内集成电路间的低速短距通信。其特点包括引脚少(仅需SDA数据线和SCL时钟线)、协议简单、支持多主多从设备。典型应用场景包括传感器访问(如温湿度、加速度计)、执行器控制(如LED驱动)、存储器读写(EEPROM)和实时时钟通信。 IIC通信通过起始信号(SCL高电平时SDA高→低跳变)启动,包含7位设备地址(支持128个设备)和1位读写标志(0写1读)。数据以8位形式传输,每个字节后需从设备应答(ACK低电平确认)。传输过程需严格
2025-10-29 07:45:51
1453
原创 STM32学习(MCU控制)(SysTick and TIM)
SysTick是ARM Cortex-M内核芯片内置的24位递减计数器,主要用于为操作系统提供心跳时钟、实现精准延时和作为定时器参考。其核心寄存器包括控制状态寄存器(SYST_CSR)、重载值寄存器(SYST_RVR)和当前值寄存器(SYST_CVR)。通过配置这些寄存器可实现精确的定时功能,如1ms定时对应重载值71999(72MHz系统时钟)。SysTick_Config()函数可快速初始化定时器,而SysTick_Handler中断服务程序能实现毫秒级延时。相比软件延时,SysTick具有更高精度和可
2025-10-28 08:53:07
1180
原创 STM32学习(MCU控制)(DMA and ADC)
本文介绍了STM32中ADC(模数转换器)和DMA的基本原理与编程实现。主要内容包括:ADC的12位逐次逼近转换规则,将模拟电压转换为数字量;ADC3的时钟配置(APB2总线,最大14MHz);关键寄存器的设置(CR1、CR2控制转换模式与触发方式,SMPR设置采样周期,SQR配置通道规则);以及光敏电阻的电路原理与ADC3_IN6通道的应用。通过寄存器级编程可实现电压精确采样,适用于光敏检测、电量监控等场景。(150字)
2025-10-27 09:47:34
916
原创 STM32学习(MCU控制)(NVIC)
本文介绍了STM32中的中断机制,重点讲解了外部中断(EXTI)的工作原理及实现方法。主要内容包括:1)中断的基本概念,如断点、中断源和压栈操作;2)Cortex-M3内核中断分类,分为内核中断和外设中断;3)外部中断线的映射规则(EXTI0-EXTI19)和判断逻辑框图;4)通过按键实现外部中断控制的详细步骤,包括GPIO配置、AFIO时钟使能、中断触发方式设置等寄存器操作;5)IRQn中断请求编号和IRQHandler中断处理函数的关系。文中配有多个原理图说明中断触发机制和寄存器配置,为理解STM32中
2025-10-27 08:41:00
907
原创 STM32学习(MCU控制)(USART)
本文介绍了串口通信的基本原理及其在STM32开发中的应用。主要内容包括:串口作为硬件数据传输的常用方式,其串行与并行通信的区别;单工、半双工和全双工三种通信模式的特点;同步与异步通信的差异;USB转串口模块的原理图分析;USART的技术特性,包括数据格式、波特率计算及寄存器配置;最后详细说明了USART1的GPIO引脚配置方法,包括RX(PA10)的浮空输入模式和TX(PA9)的复用推挽输出模式。这些内容为STM32串口开发提供了基础指导。
2025-10-21 08:43:52
1201
原创 STM32学习(MCU控制)(GPIO)
本文介绍了MCU(微控制单元)和GPIO(通用输入输出)的基本概念与应用。MCU是一种集成了处理器、内存和存储的小型计算机,广泛应用于智能家居、汽车电子等领域。ARM公司设计了多种内核(如Cortex-M系列)供芯片厂商使用。STM32是一款基于Cortex-M内核的32位MCU,文章详细解析了其型号命名规则和开发板配置。GPIO作为可编程的数字信号引脚,支持多种工作模式(如输入、输出、开漏等),其应用包括LED控制、按键检测等。通过原理图分析和寄存器配置,开发者可以灵活控制GPIO实现硬件交互功能。
2025-10-20 13:41:34
1218
原创 Hi3861 OpenHarmony鸿蒙开发(嵌入式方向)(二)
这篇文章介绍了在OpenHarmony鸿蒙系统下进行Hi3861嵌入式开发中GPIO控制LED灯的方法。主要内容包括: 开发板点灯原理:通过分析原理图确定LED灯对应的MCU引脚、电平状态和工作模式配置。 OpenHarmony GPIO编程: 介绍了系统提供的GPIO控制相关头文件(hi_io.h, hi_gpio.h) 详细说明了引脚名称、功能复用、输入输出方向、电平控制等关键枚举类型 解析了GPIO初始化、模式设置等核心函数接口 代码实现: 使用宏定义简化引脚配置 演示了LED初始化函数(设置GPIO
2025-10-13 09:27:31
715
原创 Hi3861 OpenHarmony鸿蒙开发(嵌入式方向)(一)
本文介绍了基于Hi3861芯片的OpenHarmony开发环境搭建与程序开发流程。主要内容包括:1) OpenHarmony作为开源分布式操作系统的特点与应用场景;2) 在Ubuntu 22.04下搭建开发环境,使用交叉编译工具生成可执行文件;3) 详细解析了OpenHarmony多线程编程模型,包括线程创建、任务函数实现和属性设置;4) 提供了第一个Hello World程序的完整代码示例;5) 介绍了编译烧录过程,包括CH340驱动安装、代码编译和HiBurn工具使用。文章为开发者提供了从环境搭建到第一
2025-09-28 13:17:26
1447
原创 电路基础与PCB设计(二)绘制元器件以及元器件封装
摘要:本文介绍了电路原理图设计要点,以GD32F103C8T6最小系统为例,包含MCU、电源、LED等模块设计。重点阐述了原理图绘制注意事项(导线连接、元件选型)、自定义元件库的创建方法,以及封装设计流程(如0603电阻)。文中特别说明企业可自行设计元件原理图及封装,通过嘉立创EDA审核后加入官方库,并详细描述了从新建元件到关联封装的操作步骤。
2025-09-24 08:32:22
1144
原创 网络编程完结整理
本文介绍了基于TCP协议的聊天系统实现,涵盖服务端和客户端设计。系统采用多线程架构,支持私聊、文件传输、在线用户广播等功能。关键技术点包括:1) 使用MES结构体封装消息类型、内容和文件数据;2) 服务端通过链表管理在线用户,实现消息转发和线程回收;3) 客户端采用双线程分别处理消息收发。文中详细说明了核心数据结构、服务端监听流程、消息处理机制以及并发控制方法,并提供了完整的代码实现。系统特别注重线程安全,使用互斥锁保护共享资源,同时设计了专门的监控线程进行资源回收。
2025-09-23 19:00:00
1419
原创 电路基础与PCB设计(一)电路
本文系统介绍了电路基础核心元件及原理,重点解析了欧姆定律、电阻、电容、二极管和三极管的关键特性与应用。内容包括:1)欧姆定律三大参数(电压/电流/电阻)及电荷特性;2)电阻的串并联特性与分压限流功能;3)电容的储能特性、滤波电路(高通/旁路)及MCU信号耦合应用;4)二极管的单向导电性(防反接/钳位保护/整流升压)及收音机检波原理;5)三极管/MOS管的电流放大作用和光耦的电气隔离设计。通过典型电路实例(如整流桥、RC延时、LC谐振等),阐述了各元件在电路保护、信号处理、功率控制中的具体应用,为电子电路设计
2025-09-23 08:35:01
860
原创 网络编程(四)原始套接字
摘要:原始套接字(Raw Socket)是一种直接访问网络底层协议的编程接口,不同于TCP/UDP套接字。它允许用户自定义构造和解析IP层及以下协议的数据包,常用于网络监控、抓包工具和自定义协议开发。文章详细介绍了UDP、TCP和IPv4数据包的格式结构,包括关键字段定义和C语言结构体表示。原始套接字需要通过socket()系统调用创建,通常需要root权限,在网络安全工具开发和协议测试中有重要应用价值。
2025-09-22 08:19:16
773
原创 网络编程(三)TCP
TCP协议通过三次握手建立可靠连接,确保数据传输的有序性和完整性,并通过四次挥手安全终止连接。其核心机制包括序列号/确认号保证顺序、校验和检测错误、滑动窗口进行流量控制,以及慢启动/拥塞避免/快重传/快恢复等拥塞控制算法优化网络性能。TCP头部结构包含端口号、控制标志、窗口大小等关键字段,支持MSS、时间戳、SACK等选项增强功能。这些机制共同构成了TCP面向连接、可靠传输的基础,有效处理了网络延迟、丢包和拥塞等问题。
2025-09-19 08:00:00
2808
原创 网络编程(二)组播与广播
广播定义:广播是一种点对所有主机的通信方式,数据包会发送到网络上的每一台主机。广播地址子网广播:如典型应用局域网设备发现自动配置与心跳检测简单的点对多点消息通知。
2025-09-18 08:00:00
797
原创 网络编程(一)UDP
本文摘要: 网络编程的核心是实现不同设备间的数据交换,其基础是标准化协议栈。文章首先介绍了网络分层模型(七层/五层)及各层功能,重点讲解了IP地址、端口号等关键概念。其次详细阐述了字节序问题,说明网络传输采用大端字节序,并提供了htonl/htons等转换函数。随后介绍了IP地址的字符串与网络字节序转换方法(inet_pton/ntop)。最后重点讲解了UDP协议的无连接特性及其编程实现,包括socket创建、bind绑定、sendto/recvfrom收发数据等核心API,并给出了完整的UDP发送端和接收
2025-09-17 08:00:00
1152
原创 网络编程相关函数
将本地 IP 和端口绑定到 socket 上,UDP 接收端必须 bind。:接收 UDP 数据,并可获取发送端 IP 和端口。:创建一个套接字,用于后续数据发送或接收。:本地 IP 字符串 → 网络字节序数值。:主机(小端)转换为网络(大端)字节序。:网络(大端)转换为主机(小端)字节序。:网络字节序 → 本地字符串 IP。失败:返回 NULL,同时设置。:大端字节序(网络字节序)的值。失败:返回 -1,同时设置。失败:返回 -1,同时设置。失败:返回 -1,同时设置。失败:返回 -1,同时设置。
2025-09-16 20:58:23
888
原创 C语言数组
数组名并非变量,而是首元素地址常量指针运算要在合法范围内,否则会越界多维数组指针声明必须指明每行长度数组作为函数参数传递时,实际是传递指针理解数组与指针关系有助于高效遍历和函数操作。
2025-09-16 08:00:00
990
原创 系统编程完结整理以及补充
本文摘要: 本文系统介绍了Shell编程和Linux系统编程的核心知识点。Shell部分涵盖函数定义、变量操作、流程控制、重定向等基础语法;系统编程部分详细讲解了文件操作、进程管理、进程间通信(管道/消息队列/共享内存)和线程同步等关键技术。文章采用表格形式对比各种系统调用函数,包括函数原型、参数说明、返回值和使用场景,并标注了注意事项和常见错误点。内容从基础shell脚本逐步深入到多进程/多线程编程,适合不同层次开发者系统学习Linux环境下的编程技术。
2025-09-14 19:00:00
865
原创 多文件编程与宏的使用
通过将程序拆分为多个源文件(.c)和头文件(.h)实现模块化编程。头文件使用#ifndef/#define/#endif防止重复包含,存放函数声明、宏定义和类型定义;源文件实现具体功能。编译时,源文件生成目标文件后链接为可执行程序。宏处理包括常量定义、函数式替换和条件编译,需注意全局变量声明规范(extern声明在头文件,定义在源文件)。多文件编程提高了代码复用性和可维护性,是现代C项目开发的基础方法。
2025-09-14 08:00:00
1057
原创 冒泡排序与选择排序以及单链表与双链表
冒泡排序和选择排序是两种基础的排序算法。冒泡排序通过相邻元素比较交换将最大值"冒泡"到末尾,时间复杂度O(n²),稳定但交换频繁;选择排序每次选择最小值放到已排序区末尾,同样O(n²)但交换次数少,不过不稳定。冒泡排序适合小规模或部分有序数据,可通过标志位优化;选择排序更适合交换成本高的场景。两者均为原地排序(空间复杂度O(1)),但效率较低,仅适用于小规模数据排序。
2025-09-13 19:00:00
1381
原创 结构体与动态内存分配
本文系统介绍了C语言中结构体和动态内存管理的核心知识点。结构体部分涵盖定义、指针操作、指针成员、数组及指针数组的使用方法,重点讲解了通过指针访问成员、构建动态数据结构以及内存管理注意事项。动态内存管理部分详细解析了四大内存区域(代码区、数据区、堆、栈)的特点和访问权限,深入讲解malloc/calloc/realloc/free等动态分配函数的使用场景和风险防范,特别强调内存泄漏、悬空指针等常见问题的解决方案。文章最后总结了动态内存分配的安全使用原则,包括初始化和释放内存的规范操作,
2025-09-13 10:58:54
1017
原创 系统编程(九)同步与互斥
多个进程/线程需要使用同一公共资源时,同一时刻可以使用该资源。常见手段:互斥锁(mutex)。场景特点:线程之间“抢”资源,谁拿到谁使用,其他线程阻塞等待。:多个进程/线程之间需要按某种执行(有依赖关系),例如 A 需要等 B 产生数据后才能运行。场景特点:强调,不一定是抢占资源,但往往也会表现为一次只有一个线程进入某段代码(因此同样包含互斥的性质)。关系:同步本质上是一种特殊的互斥(因为很多同步场景也会使得某个时刻只有一个线程能执行特定操作)。
2025-09-12 19:00:00
3826
原创 系统编程(八)线程
程序:存储在磁盘上的代码,本身不执行任何操作。进程:程序运行后的实例,负责分配资源,但不直接执行任务。线程:进程中的执行单元,真正执行具体任务。例子QQ程序是一个进程,本身不执行聊天功能。打开聊天窗口时,产生线程执行通信任务。多进程与多线程多进程:如双开 QQ,两次启动两个独立进程。多线程:一次启动 QQ,可以同时和多人聊天。总结每个进程至少有一个线程 →主线程。线程是轻量级进程 (LWP, Light Weight Process)。在 Linux 下,线程本质上仍是进程。共享资源。
2025-09-12 08:00:00
1669
原创 系统编程 系统编程中的函数原型以及参数解释
本文摘要: 本文系统介绍了Linux系统编程中的核心API函数,涵盖文件操作、进程管理、信号处理、进程间通信、线程控制及同步机制等六大模块。文件操作部分详细说明了open、close、read/write等基础函数;进程管理涉及fork、exec、wait等关键系统调用;信号处理包括kill、signal等函数;进程间通信涵盖管道、消息队列、共享内存三种机制;线程控制部分解析了pthread_create等POSIX线程函数;同步机制重点说明了互斥锁、条件变量等线程同步工具。每个函数均给出参数说明、返回值及
2025-09-11 17:53:54
1012
原创 系统编程(七)存储映射与共享内存
存储映射I/O(mmap)和共享内存是两种高效的数据访问方式。mmap通过将磁盘文件映射到进程内存空间,实现直接用指针访问文件内容,无需系统调用,适合大文件或频繁随机访问场景。共享内存则是内核开辟的存储区域,多进程可映射访问同一块内存,是进程间通信最快的方式。两者都需注意权限设置和同步问题,mmap需配合truncate调整文件大小,共享内存需使用shmget/shmat等API管理。示例代码展示了两种技术的读写操作流程和关键函数用法。
2025-09-11 08:00:00
1098
原创 C语言指针
本文介绍了指针的核心概念与应用。指针作为存储内存地址的变量,通过解引用(*p)来访问数据。主要内容包括:指针的基本操作(取地址、解引用、算术运算);指针类型与内存访问的关系;多级指针的概念;指针在函数传参、数组处理、字符串操作中的应用;以及空指针、野指针等特殊指针类型的注意事项。重点强调了指针类型决定数据访问方式、指针运算基于类型大小等特性,并指出指针在动态内存管理和高效数据操作中的重要性,同时提醒使用时要防范常见错误。
2025-09-10 19:00:00
1070
原创 系统编程(六)进程间通信-消息队列
摘要: 消息队列是进程间通信的数据传输机制,通过内核维护的队列实现异步通信。消息包含类型标识(mtype)和自包含数据,支持多对多读写。SystemV消息队列使用key标识,通过msgget创建,msgsnd/msgrcv发送接收,msgctl管理队列属性和删除。核心特性包括类型过滤、持久化存储和内核级共享。开发时需注意结构体定义(mtype首位)、权限控制及队列清理(避免泄露)。POSIX消息队列提供更现代的API。典型应用场景如解耦生产消费进程,需结合ipcs/ipcrm工具管理。
2025-09-10 08:00:00
1010
原创 C语言(嵌入式方向)
本文摘要:文章系统介绍了嵌入式开发中的数据存储与处理技术。主要内容包括:1)数据存储方式(位、字节、字长)、字节序(大小端)及内存对齐;2)基本数据类型(整型、浮点)及其在嵌入式中的应用注意事项;3)类型转换规则与典型应用场景;4)指针、结构体、位域等高级数据结构的嵌入式用法;5)各类运算符(算术、关系、逻辑、位运算)的实际应用技巧;6)通过LED控制、定时器配置、通信协议等实例展示理论知识的工程实践。特别强调了位操作、寄存器映射、volatile/const关键字等嵌入式开发核心技术要点。
2025-09-09 19:00:00
982
原创 系统编程(五)进程间通信-管道
本文系统介绍了Linux/Unix系统中的管道机制,包括匿名管道和命名管道(FIFO)两种类型。管道作为进程间通信的重要方式,通过内核维护的环形缓冲区实现数据流动,支持单向(半双工)和双向(全双工)传输。文章详细阐述了管道的原理、特点、编程实现和典型应用场景,重点讲解了父子进程通信、跨进程通信的实现方法,以及阻塞/非阻塞模式、信号处理和性能优化等关键技术。通过实际案例展示了管道在多进程流水线设计中的应用,说明了如何利用管道实现高效、模块化的数据处理系统。文章最后总结了管道作为"内核缓冲区+阻塞机制
2025-09-09 08:00:00
1151
原创 系统编程(四)进程间通信
本文摘要: 进程间通信(IPC)是不同进程间协作的关键机制,信号(Signal)作为其中一种异步通知方式具有轻量级特点。信号通过编号(1-31)和名称(SIGINT等)标识,可产生于终端按键、硬件异常或系统调用。信号处理支持默认动作、忽略或自定义handler,sigaction比signal更安全可靠。信号集操作和阻塞机制可控制信号递送,需注意handler设计要简短可重入。调试时推荐使用strace跟踪信号,并避免在handler中调用非异步安全函数。
2025-09-06 08:00:00
1557
1
原创 系统编程(三)进程的究极扩展
本文系统介绍了Linux进程管理的核心概念和技术要点。主要内容包括:1)三类特殊进程(僵尸、孤儿、守护进程)的定义、特征及处理方法;2)多进程创建技术(fork)、回收机制(wait/waitpid)及状态获取;3)exec函数族的使用方法和注意事项;4)system函数的实现原理;5)终端、会话与进程组的关系。重点阐述了守护进程的创建流程(fork→setsid→后台任务)和优化措施(umask、目录变更、文件描述符关闭),并对比了wait与waitpid在进程回收顺序控制上的差异。文章通过代码示例和流程
2025-09-05 08:00:00
1022
原创 系统编程(三):进程、父子关系与资源回收
本文系统介绍了进程管理的核心概念与操作。主要内容包括:1.进程基础:区分程序与进程,解释单道/多道程序、并发/并行机制;2.进程控制块(PCB)的结构与作用;3.进程状态转换与查看命令(ps);4.进程号(PID)与进程组管理;5.进程创建(fork/vfork)与父子进程关系;6.进程退出(exit/_exit)与缓冲区处理;7.资源回收(wait/waitpid)机制。重点阐述了进程创建、执行控制、资源回收的系统调用使用方法及注意事项,为理解操作系统进程管理提供了实践指导。
2025-09-04 08:00:00
1108
原创 系统编程(二)系统调用函数
本文介绍了系统编程和系统调用的基本概念。系统编程是在操作系统下进行的编程,通过系统调用接口访问硬件资源。系统调用是用户态访问内核的唯一入口,用于进程管理、内存管理、文件系统等。文章详细说明了用户态和内核态的区别,以及系统调用与内存、硬件资源的关系。重点讲解了系统调用I/O函数,包括文件描述符的概念,以及open、close、write、read、remove等函数的用法和注意事项。最后对比了文件描述符和FILE的区别,并解答了常见问题。
2025-09-03 08:00:00
1071
原创 系统编程(一)shell的学习
本文介绍了Shell编程的核心概念和常用操作。主要内容包括:1)Shell的桥梁作用,既是语言又是解析器;2)脚本编写和执行方式;3)变量定义、环境变量和特殊变量处理;4)条件测试(文件、字符串、数值);5)流程控制语句(if/case/for/while);6)函数定义与调用;7)环境配置和实用案例。重点强调了变量操作、条件判断和循环控制的语法细节,通过1-100累加等实例展示了Shell的自动化能力,适合作为Linux系统管理和自动化任务的入门参考。
2025-09-02 08:00:00
645
原创 USART 接收中断配置(关于stm32f10x系列USART 接收中断配置
本文介绍了STM32中USART接收中断和EXTI外部中断的配置方法。USART部分包括:1)开启时钟;2)配置GPIO引脚为复用推挽输出(TX)和浮空输入(RX);3)设置USART参数(波特率115200,8位数据,1位停止位);4)使能接收中断;5)配置NVIC优先级;6)编写中断处理函数。EXTI部分同样包含6个步骤:时钟开启、GPIO配置、AFIO映射、EXTI设置、NVIC配置和中断处理。文章还对比了中断模式与事件模式的区别,强调了中断服务函数应简洁高效、及时清除中断标志位等注意事项,并提供了中
2025-09-01 07:58:55
1076
原创 C语言结构体指针数组讲解笔记
场景为什么用二级指针如何操作初始化学生数组动态分配指针数组存储每个学生每个学生结构体需要独立内存存储姓名字符串长度不固定增加/删除学生数组长度动态变化函数传递函数内可以修改原数组函数参数为STU **s。
2025-08-30 08:00:00
959
【嵌入式系统】基于ARM Cortex-M3的STM32F103微控制器技术参考手册:外设寄存器配置与功能模块应用指南
2025-10-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅