- 博客(173)
- 资源 (1)
- 收藏
- 关注
原创 【STM32】Systick滴答定时器-延时函数详细解析
摘要:SysTick 定时器在 Cortex-M3/M4 内核中的应用SysTick 是 Cortex-M3/M4 内核内置的 24 位递减定时器,主要用于周期性中断、裸机延时和 RTOS 系统心跳。其特点包括:不占用外设资源、可配置时钟源(AHB 或 AHB/8)、通过 4 个寄存器(CTRL、LOAD、VAL、CALIB)控制。在 STM32 标准库中,通过 SysTick_Config() 和 SysTick_CLKSourceConfig() 函数配置定时周期和时钟源。SysTick 在裸机程序中
2025-06-11 17:36:54
771
原创 【STM32】SystemInit时钟系统初始化函数剖析
本文介绍了STM32微控制器的时钟系统,重点解析了五种主时钟源(HSI、HSE、LSI、LSE、PLL)的特性及应用场景。文章详细说明了系统时钟初始化流程,包括SystemInit函数的作用、时钟配置寄存器解析,以及PLL倍频原理。针对关键问题"为何使用外设前需初始化时钟",文中指出所有外设必须使能时钟才能正常工作,并提供了GPIO和定时器的时钟使能示例。最后给出了完整的时钟配置推荐流程,涵盖时钟源选择、PLL设置、Flash延迟配置等关键步骤,为STM32开发者提供了实用的时钟系统参考指南。
2025-06-11 12:11:44
1158
原创 【STM32】GPIO工作模式解析
摘要:本文详细解析了STM32中GPIO的8种工作模式,重点比较了推挽输出与开漏输出的区别。推挽输出能直接输出高/低电平,驱动能力强;开漏输出需外接上拉电阻,可实现电平转换和线与逻辑。文章还介绍了浮空输入、上拉/下拉输入等模式的特性,并给出了不同应用场景下的配置建议,如按键识别用浮空输入、I2C总线用开漏输出等。最后总结了GPIO作为普通IO或复用功能时的配置方法,强调复用功能需使能对应模块,并指出JTAG引脚和特殊引脚(PC14/PC15)的注意事项。
2025-05-30 21:53:10
863
原创 【PCB工艺】PCB设计中的基本概念
PCB是电子元器件的载体,PCBA则是焊接好元件的成品板。PCB设计流程分为三大板块:原理图设计是电气逻辑基础;封装设计和布局布线实现物理连接,包含焊盘、丝印等关键元素;3D验证检查结构合理性。多层板设计涉及通孔、盲孔等技术,而封装必须与元件匹配。常用工具包括Altium Designer等,核心目标是确保电气正确、布局合理且结构无误。整个流程从逻辑设计到物理实现,最终完成功能电路板。
2025-05-30 12:43:13
1278
原创 【PCB工艺】绘制原理图 + PCB设计大纲:最小核心板STM32F103ZET6
摘要:原理图设计与PCB布线及嵌入式软件开发密切相关,前期规划直接影响硬件效率、软件逻辑和系统维护。原理图作为逻辑层,需考虑PCB布局因素(如模块分区、封装选型、电源网络),同时兼顾软件需求(GPIO分配、接口命名、调试预留)。通过模块化设计和信号规范化,可优化PCB布线质量,降低软件开发复杂度,提升系统可靠性。设计时应同步评估电气特性、扩展性和可维护性,确保硬件实现与软件业务逻辑高效协同。
2025-05-29 17:24:54
1346
原创 【PCB工艺】推挽电路及交越失真
推挽是指:由两种极性相反的器件(如 NPN 和 PNP、NMOS 和 PMOS)交替导通,一个“推”电流,另一个“拉”电流,从而实现电流的双向控制。
2025-04-23 23:55:58
2269
原创 【PCB工艺】运放电路中的负反馈机制
负反馈将输出信号的一部分反向送回输入端,从而抑制原始输入的变化。通俗解释:* 如果输出`上升`,反馈使其`下降`* 如果输出`下降`,反馈使其`上升`最终使系统趋于`稳定`或达到某个特定的目标状态。
2025-04-23 23:54:25
1468
原创 【PCB工艺】发光二极管的原理
而为什么另一部分二极管不会发光呢?是一种能够将电能转换为光能的半导体器件。它是现代照明、显示、通信等领域的核心元件之一。LED 是一种特殊的二极管,在正向导通时会发光。它的发光不是因为加热,而是源于电子-空穴复合时释放能量,称为:🔬接下来,我们来理解这个过程。
2025-04-08 17:45:14
1677
原创 【PCB工艺】时序图(Timing Diagram)
广泛用于分析和设计时序逻辑电路,如锁存器(Latch)、触发器(Flip-Flop)、计数器、状态机等。这篇文章从时序图的原理、构成、细节、扩展等多个角度全方位让你彻底能够看懂时序图。时序图是一种用于描述数字电路中信号随时间变化的图表,横轴表示时间,纵轴表示不同信号的状态(高电平 1 / 低电平 0)。✅ 时序图用于分析电路的时序关系,确定信号之间的同步性。✅ 常用于分析触发器、锁存器、CPU 总线操作等时序要求较高的电路。
2025-03-27 21:56:19
1701
原创 【PCB工艺】软件是如何控制硬件的发展过程
时光回溯到1854年,亨利·戈培尔发明了电灯泡(1879年,托马斯·阿尔瓦·爱迪生找到了更合适的材料研制出白炽灯。如果加上一个秒表来自动控制灯的亮灭,设定 30 分钟自动控制点灯的亮灭,那么,这个接下来,这是一个钢片式八音盒:上发条后,八音盒便会不同簧片在不同时间拨动从而能够产生不同的频率与声音,在钢片上哪一个位置出现凸点是音乐内容的核心,在这里,我们—— 钢片是软件的储存介质,滚筒上的凸点设计就是设计师提前设定好的程序。—— 这便是软件和硬件之间的关系,软件既不是簧片,也不是滚筒上的凸点,而是。
2025-03-27 19:12:42
1706
原创 【PCB工艺】简单的集成电路IC
集成电路(IC,Integrated Circuit)是一种将大量晶体管、电阻、电容等电子元件集成在一块半导体芯片上的电子器件,广泛应用于计算机、通信、汽车、家电等领域。集成电路(IC)是一种将多个电子元件集成到一块小型硅片上的微型电子电路。传统电路 使用独立电子元件(如晶体管、电阻、电容),体积大、功耗高、速度慢。IC 将数千甚至数十亿个晶体管集成到一块芯片上,体积小、速度快、功耗低。简单的说,IC 就是“微型化的电子电路”。
2025-03-21 21:39:58
892
原创 【PCB工艺】晶体管的发展历史
—本文纯粹出于对过往奋斗在这个领域中科学家的缅怀。科学家有太多宝贵的思想和经验值得我们认真总结和提炼,我想最好的纪念是传承,最好的告慰是奋进,同样在我们的工作和生活之中,要秉承先辈的科研精神 —— “做科学,不是简单地承担一项或几项课题就完事了,要从科研中找到你的责任,找到你的担当,这是科研者应该具备的品格。半导体的理论研究和技术应用的进展为新型电子器件的诞生奠定了理论和技术条件。这一切起源于成立了以和。
2025-03-21 17:53:24
1255
原创 【PCB工艺】电流、电压与电阻的关系 以及 含有电容和电感的电路
开始画电路图之前咱们先简单复习一下电流(Current)、电压(Voltage)和电阻(Resistance),这是电路分析的基础,它们之间遵循。是掌握电路理论的基石。另外,所以,在复习完欧姆定律之后,继续扩展到。
2025-03-19 23:43:14
1313
原创 【STM32】NVIC(嵌套向量中断控制器)
NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)适用于等 ARM 处理器,广泛用于 STM32、ESP32、GD32、NXP 等 MCU 中,它用于管理和控制中断,是ARM Cortex-M 系列微控制器的核心外设之一。NVIC 负责中断优先级管理、嵌套中断处理和中断向量跳转,使 Cortex-M 处理器能够高效地响应中断请求。NVIC 主要功能1. 支持多个中断源(STM32F103 系列最多支持 60 个)
2025-03-14 21:21:10
1691
原创 【STM32】从新建一个工程开始:STM32 新建工程的详细步骤
STM32 开发通常使用等工具来创建和管理工程。此处是 使用创建 STM32 工程的详细步骤。
2025-03-14 18:59:58
1259
原创 【STM32】STM32系列产品以及新手入门的STM32F103
📢 STM32F103xC/D/E 系列是一款高性能、低功耗的 32 位 MCU,适用于工业、汽车、消费电子等领域;,适合复杂嵌入式应用,,适用于电池供电设备。
2025-03-06 19:33:48
2843
原创 【单片机】ARM 处理器简介
是英国 ARM 公司(原 Acorn RISC Machine)开发的一种精简指令集(RISC)处理器架构。ARM 处理器因其低功耗、高性能、广泛适用性,成为嵌入式系统、移动设备、服务器、AI 计算等领域的主流选择。ARM 是一家英国公司,其商业模式独特,不直接生产芯片,而是专注于IP 核授权。Chipless 生产模式ARM 不生产芯片,也不直接设计完整芯片,而是设计高效的 CPU 内核授权给半导体公司(如 Apple、Qualcomm、NVIDIA、Samsung)进行芯片制造。
2025-03-06 16:58:26
2889
原创 【单片机】嵌入式系统设计流程
🔹目标✅总结项目的成功点和改进点✅优化下一代产品设计评价项结果设计目标是否达成生产成本是否优化可靠性是否满足标准嵌入式开发是一个系统化过程,从需求分析到生产,涉及硬件、软件、测试、生产等多个阶段,在开发前期合理规划开发流程,确保产品高效、稳定、低功耗,提高产品质量和市场竞争力。以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
2025-03-05 15:48:07
1341
原创 【单片机】嵌入式系统的硬件与软件特性
嵌入式系统的硬件和软件特点决定了它的高效、低功耗、实时性和可靠性,硬件:小型化、低功耗、面向特定应用;软件:高效、实时、代码固化、多任务管理。嵌入式软件结构可以分为不带 OS(裸机)和带 OS(RTOS / Linux)两种,如果系统简单(如 LED 控制、UART 通信) → 使用 Bare Metal。如果系统复杂(如 Linux + GUI + 网络) → 使用嵌入式 Linux。如果需要多任务调度、网络功能(如 MQTT) → 使用 RTOS。不同的软件架构适用于不同的应用场景,如。
2025-03-05 15:23:20
2403
原创 【单片机】嵌入式系统大纲
嵌入式系统是一种专用计算机系统,以应用为中心,结合软硬件进行裁剪,以满足系统对功能、可靠性、成本、体积和功耗的严格要求。嵌入式系统的特点✅ 专用性:针对特定应用优化,功能较固定。✅ 实时性:对响应速度要求高,常使用 RTOS。✅ 低功耗:适用于电池供电设备,如智能手表、传感器节点。✅ 高可靠性:要求长时间稳定运行,如汽车电子、医疗设备。✅ 体积小:硬件紧凑,适用于便携设备、嵌入式控制系统。
2025-03-05 14:37:11
1292
原创 【项目管理】基于 C 语言的 QQ 聊天室实现(TCP + 多线程 + SQLite3)后续部分代码优化
文章中的代码有一些可继续优化的部分,这篇文章是对上述项目代码的完善和说明。优化和补全,我们需要,并。
2025-02-28 03:32:26
927
原创 【项目管理】基于 C 语言的 QQ 聊天室实现(TCP + 多线程 + SQLite3)
✅ 服务器采用 多线程 + I/O 多路复用(epoll) 支持高并发。✅ 基于 SQLite3 存储用户、好友、群聊信息;✅ 使用 TCP + JSON 进行消息传输;记录用户之间的好友关系。记录群聊成员及身份。
2025-02-27 06:54:04
732
原创 Ubuntu中 json 打包数据的使用
在线安装 JSON 解析库。不同的编程语言和应用场景可能需要不同的 JSON 库,这里解释的是一些常见的 JSON 解析工具和库的安装方法。处理 JSON,可以安装 node-json 模块。,可以安装 python3-json 以扩展功能。🔹 安装 python3-json。在 Ubuntu 中,可以使用。🔹 在 Python 代码中使用。🔹 安装 json CLI 工具。中解析 JSON,可以安装。中解析 JSON,可以使用。🔹 编译 C 代码(使用。🔹 安装 Node.js。,适用于高性能应
2025-02-24 23:15:14
595
原创 基于嵌入式linux的数据库:SQLite
常用的数据库基于嵌入式linux的数据库SQLite3SQLite数据库采用了模块化设计,由8个独立的模块构成,这些独立模块又构成了三个主要的子系统,模块将复杂的查询过程分解为细小的工作进行处理:在线安装:离线安装:备注:实际上就是一张表:2. sqlite3语句(…> 表示输入的内容还未结束,需补上;)完整操作sqlite3数据表的代码综上。希望该内容能对你有帮助,感谢!以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。我是一个十分热爱技术的程序员,希望这篇文
2025-02-24 18:45:15
519
原创 【网络编程】UNIX 域套接字(Unix Domain Sockets, UDS)
方式,适用于同一台机器上的进程之间的通信。相比 TCP/IP 套接字,UDS。正确处理 UNIX 域套接字错误,可以提高通信稳定性,防止进程崩溃;(UDS, Unix Domain Socket)是一种。时,可能会遇到各种错误。以下是常见错误及其解决方法。🚨 5.1 服务器未启动时运行客户端。按 Ctrl + C 终止服务器。如果服务器异常退出,建议手动删除。,因为它省去了网络协议的开销。如果没有编译错误,将会生成。此时服务器将等待客户端连接。📌 1. 常见错误及解决方案。🚨 5.2 服务器端。
2025-02-23 09:53:37
1104
原创 【网络编程】服务器模型(二):并发服务器模型(多线程)和 I/O 复用服务器(select / epoll)
UDP不用等待确认,没有实际的发送缓冲区,所以UDP协议中不存在发送缓冲区满的情况,在UDP套接字上执行的写操作永远都不会阻塞。进程调用 read 函数从套接字上读取数据,当套接字的接收缓冲区中还没有数据可读,函数 read 将发生阻塞。阻塞I/O 模式是最普遍使用的 I/O 模式,大部分程序使用的都是阻塞模式的 I/O;当我们将一个套接字设置为非阻塞模式,我们相当于告诉了系统内核:“当我请求的I/O 操作不能够马上完成,你想让我的进程进行休眠等待的时候,不要这么做,请马上返回一个错误给我。
2025-02-22 05:16:55
1123
原创 【网络编程】服务器模型(一):循环服务器模型和并发服务器模型(多进程)
TCP并发服务器可以避免TCP循环服务器中客户端独占服务器的情况。为了响应客户机的请求,服务器要创建子进程来处理。如果有多个客户端的话,服务器端需要创建多个子进程。过多的子进程会影响服务器端的运行效率。由于只有在当前客户的所有请求都完成后,服务器才能处理下一个客户的连接/服务请求。如果某个客户端一直占用服务器资源,那么其它的客户端都不能被处理。中,服务器通常需要处理多个客户端的请求。根据服务器处理多个客户端的方式,可以分为。由于 UDP 服务器在处理某个客户端请求时可能会。的协议,服务器不需要。
2025-02-21 21:18:15
680
原创 【网络编程】基于 TCP协议 的服务器-客户端通信模型的加密传输、多线程并发服务器
基于上一篇中实现了基于 TCP 协议的网络通信模型。基于此之上,我们继续介绍(多线程并发服务器)。这是一个通信示例。这种方式可以确保。
2025-02-20 15:39:50
961
原创 【网络编程】网络编程基础:TCP/UDP 协议
网络是信息传输,接收和共享的虚拟世界,通过把网络上的信息汇聚在一起,将这些资源进行共享。初衷:知识共享。这里不得不提到1957年10月和11月,前苏联先后有两颗“Sputnik”卫星上天。1958年美国总统艾森豪威尔向美国国会提出建立DARPA (Defense Advanced Research Project Agency),即国防部高级研究计划署,简称ARPA。
2025-02-18 22:29:42
1021
原创 【进程与线程】Linux文件 I/O 编程中的生产者与消费者案例
生产者与消费者问题是经典的多线程同步问题,通常用于描述两个进程之间共享资源的协作。在 Linux 文件 I/O 中,我们这里使用来实现生产者与消费者模型。有名管道是一个特殊的文件,(非亲缘进程)。
2025-02-18 05:00:39
387
原创 【进程与线程】Linux 线程、同步以及互斥
线程是操作系统与多线程编程的基础知识。系统为每个用户进程创建一个来描述该进程:该结构体中包含了一个指针指向该进程的虚拟地址空间映射表:实际上和地址空间映射表一起用来表示一个进程。由于进程的地址空间是私有的,因此在进程间上下文切换时,系统开销比较大,因此,为了提高系统的性能,许多操作系统规范里引入了轻量级进程的概念,也被称为线程。在同一个进程中创建的线程共享该进程的地址空间,Linux里同样用来描述一个线程。线程和进程都参与统一的调度。接下来我们会详细的介绍线程共享资源和私有资源,还有线程库如。
2025-02-17 03:57:46
2130
原创 【进程与线程】System V IPC:消息队列(Message Queue)
消息队列是先进先出的队列,实际中消息队列允许根据消息类型进行读取,不完全是FIFO。消息的格式为:消息类型加消息正文 ——> 例如,在C语言中如何使用struct来定义消息,其中必须包含一个长整型的消息类型字段,然后是消息正文。因此,消息队列并不是严格的FIFO,但默认情况下可能是按发送顺序接收的,除非指定了不同的消息类型优先级。消息队列的优点在于可以异步通信,数据有结构,缺点是需要内核操作,效率不如共享内存,且存在系统限制(如最大消息数、消息大小限制)。,即使进程结束,消息队列仍然存在,除非显式删除;
2025-02-16 19:50:18
770
原创 【进程与线程】信号量(Semaphore)
信号量不传输数据,只用于同步,它的用途是协调进程,而不是传递信息。所以代码中要时刻留意信号量的初始化和释放,需要正确管理信号量,避免资源泄漏。信号量是 System V IPC 中实现进程同步的核心工具,通过 PV 操作和计数器机制协调多进程对共享资源的访问。涉及对信号量的底层实现,以及信号量集如何在内核中管理。理解内核中信号量的工作原理是非常必要的环节。IPC创建的是信号灯集:System V IPC中的信号量不是单个而是以集合的形式存在。下面的代码中会创建信号量集,并初始化其中的信号量。
2025-02-15 05:31:39
825
原创 【进程与线程】共享内存(Shared Memory)
并且,共享内存的生命周期独立于进程,需要显式删除,否则会一直存在,可能导致资源泄漏 ——> 同步机制与异步机制不同,在使用共享内存的过程中尤其需要注意这一点,比如需要使用信号量或互斥锁来避免数据不一致。共享内存的读操作通常不会阻塞,因为数据一旦写入就存在,但如果没有同步机制,读进程可能读到不完整的数据,或者写进程覆盖数据导致问题。的作用只是将内存区域置零,但共享内存本身仍然存在。阻塞的原因则是因为进程在读取时没有数据可读,但共享内存本身并不管理数据的可用性,需要额外的同步机制,比如信号量,来协调读写操作。
2025-02-15 03:27:44
874
原创 【进程与线程】信号(Signal)
/ 注册 SIGUSR1 的处理函数// 阻塞等待信号pause();// 暂停进程,直到收到信号return 0;# 编译运行# 输出 PID 后,在另一个终端发送信号:五. 信号的优缺点与适用场景用户触发中断如Ctrl+C发送SIGINT终止前台进程,Ctrl+Z发送SIGTSTP暂停进程。内核异常处理内存错误(SIGSEGV)、算术错误(SIGFPE)、非法指令(SIGILL)等异常事件。进程间通信通过kill()系统调用发送SIGUSR1SIGUSR2触发自定义逻辑。
2025-02-13 01:32:03
1037
原创 【进程与线程】有名管道(FIFO)
有名管道(FIFO)和无名管道的主要区别:无名管道只能用于有亲缘关系的进程,而有名管道(FIFO)通过文件系统中的命名文件实现,允许无关进程通信(非亲缘进程间的 通信)。这篇文章是解释有名管道FIFO的底层原理:包括内核如何管理FIFO的缓冲区、读写机制以及文件系统的交互形式。附上代码:包括FIFO文件的创建过程,比如使用mkfifo函数或命令,以及它在文件系统中的表现。此外,内核如何维护FIFO的缓冲区,处理阻塞和非阻塞模式,以及数据原子性等问题都需要详细说明。
2025-02-12 16:04:28
1081
原创 【进程与线程】无名管道(匿名管道,Pipe)
无名管道主要用于具有亲缘关系的进程间通信,比如父子进程,它通过文件描述符进行读写,是一种半双工的通信方式(即数据只能单向流动)。无名管道在内核中的实现机制涉及到内核中的数据结构,比如管道缓冲区。当调用pipe()函数时,内核会创建一个管道,并返回两个文件描述符,一个用于读,一个用于写。这两个描述符指向同一个管道对象,其中包含一个环形缓冲区,用于存储数据。当写端向管道写入数据时,数据被复制到内核缓冲区;读端从缓冲区读取数据时,数据被复制到用户空间。如果缓冲区满,写操作会阻塞;如果缓冲区空,读操作也会阻塞。
2025-02-12 15:13:05
998
运行开发板前的网络配置: 资源内容包含演示代码中的音乐播放器配置的详细过程 + 运行开发板之前的网络服务配置
2024-12-14
《流程图、图灵机和只有两条形成规则的语言》论文原版
2024-10-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人