- 博客(47)
- 收藏
- 关注
原创 DCDC电路和LDO电路分析与推荐选型
通过开关元件(如MOSFET)的快速导通和关断,配合电感、电容等储能元件,实现电压转换。:效率低(效率≈Vout/Vin)、仅支持降压、大压差时发热严重。:效率高(通常70%~95%)、输入电压范围宽、支持升压/降压。输入输出电压差小(ΔV < 0.5V)、低噪声需求、小电流场景。高功率、高效率需求(如电池供电设备、FPGA/CPU供电)。输入输出电压差大、效率要求高、需升压或大电流场景。:输出有开关噪声、需要外围电感/电容、成本较高。对噪声敏感(如射频模块、ADC/DAC供电)。
2025-04-22 01:35:11
935
原创 PCB新手常见问题--晶振和MCU 电容放置
从晶振引脚出发,沿着线路查看信号走向。看晶振引脚是否先连接到滤波电容引脚,然后从电容引脚再连接到 MCU 对应的引脚(图中 MCU 相关引脚如 PC13、PC14、PC15 等 )。如果线路是这样的连接顺序,就说明晶振信号先经过电容,再进入 MCU。
2025-04-17 00:53:58
364
转载 编程思维、逻辑思维的培养
可以根据学到的算法和数据结构解决书本习题后面的算法问题(注意不是看了解答过程再重复写一遍,而是在自己不知道情况下写一遍,代码量可能是只有十几行,写花不了多少时间,只是思考得花些时间——一定要坚持,我曾经思考了几天就为了解一道算法题,当然根据自己的情况,不用一下选这么难的。对于在公司上班,你会发现思考时间越来越少,完全是需求到了就马上知道怎么写了。剩下的时间,你可以听英语,看电影,想干嘛干嘛,升值加薪,老板听你的,即使老板吝啬不加,那么大可拍拍屁股走人,去给你开高工资的地方,此时你有的是底气不怕没人要。
2025-04-16 01:57:49
89
原创 串口接收的使用-中断
启用USART/UART外设,配置波特率、数据位、停止位、校验位等。在中断服务函数中读取数据,并重新使能中断以等待下一次接收。中使能串口接收中断(USARTx_IRQn)。当串口接收到一个字节数据时,触发。: HAL库的中断统一处理函数。对于不定长数据帧,结合。
2025-04-15 18:23:42
400
原创 单片机非耦合业务逻辑框架
在小型单片机项目开发初期,由于业务逻辑相对简单,我们往往较少关注程序架构层面的设计。然而随着项目经验的积累,开发者会逐渐意识到模块间的耦合问题:当功能迭代时,一处修改可能引发连锁反应。此时,。当前的代码框架采用了一种基于全局变量的解耦设计模式。各模块函数仅依赖底层驱动接口,无需跨模块调用其他功能函数,而是通。系统借助,在每个调度周期内由输出函数统一解析标志位状态,据此决定执行逻辑或输出动作。这种设计有效隔离了模块间的直接依赖,使得代码维护与功能扩展更为灵活。
2025-04-15 17:24:29
409
原创 串口通讯协议帧结构
在串口通讯中,数据的传输是分段进行的,每一段数据就叫做“帧”。每一帧都包含几个部分,这些部分帮助接收方识别什么时候数据开始,什么时候结束,以及数据是否有错误。帧头(Start Bit):告诉接收方“数据来了!数据位(Data Bits):真正要传输的信息,比如字母、数字等。校验位(Parity Bit):用于检查数据有没有错误(可选的)。停止位(Stop Bit):告诉接收方“数据传完了!串口通讯的帧结构就像一个有明确开头和结尾的“数据包”,它让发送和接收数据更加规范和可靠。
2025-04-15 13:11:57
738
原创 [硬件]单片机下载电路讲解-以ch340为例
例如,在使用 CH340 芯片给 STM32 单片机烧录程序时,借助 RTS# 和 DTR# 引脚的配合,上位机能够自动控制 STM32 单片机进入系统存储器引导模式,从而实现程序的自动下载,这极大地提高了烧录效率,特别是在需要频繁烧录程序的开发过程中优势明显。这两根线用于 USB 数据信号传输,实现芯片与主机(如电脑 )之间的数据交互。通过改变 RTS# 引脚的电平,经过三极管等组成的电路,控制目标设备的启动模式选择引脚(如 BOOT 引脚)的电平,从而使目标设备进入下载模式。
2025-04-10 00:57:06
2464
原创 [模块]接近开关
https://baike.baidu.com/item/%E6%8E%A5%E8%BF%91%E5%BC%80%E5%85%B3/1037200作用:使用:金属的一碰就有反应输出高低电平
2025-04-09 02:37:30
322
原创 初入Web网页开发
每个文件有不同的功能,而功能对应需求。假如你只需要开发一个页面不包含交互,那么可以不需要.js文件。:确保HTML中引用的CSS和JS文件路径正确(如文件在同一目录直接写文件名)。搜索AI 发现远远不止,在复杂的项目里面,包含其他各种各样形式的文件。数据在网页中的流动方式,比如用户输入如何被处理,如何与服务器通信。,用JavaScript实现交互功能(如按钮点击事件)。:向设备的特性(Characteristic)写入数据。,用CSS控制样式(如颜色、布局)。,用HTML编写网页结构和内容。
2025-04-08 23:12:24
1006
原创 STM32寄存器开发全面指南
STM32微控制器可以通过直接操作寄存器或使用HAL库进行开发。寄存器操作是最底层的编程方式,而HAL库则是ST公司提供的硬件抽象层,封装了寄存器操作,提供了更友好的API。STM32的寄存器通常是32位的,每个位或一组位控制特定功能。
2025-03-31 01:15:40
1166
原创 [C++]C++入门篇 2025最新版
变量的别名,操作引用等价于操作原变量。:变量可以在任何位置声明(更灵活)。:避免全局变量/函数的名字冲突。引用必须初始化且不能更改指向。:变量必须在作用域开头声明。更安全,无需检查空指针。调用析构函数,更安全。
2025-03-30 10:23:26
320
原创 [物联网iot]云服务实现机制
设备与云端的通信(Wi-Fi、4G/5G、LPWAN等),支持多种协议(MQTT、CoAP、HTTP)。:云端部署协议适配器(如MQTT Broker、CoAP网关),将不同协议统一转换为内部数据格式。:提供RESTful API(设备控制、数据查询)和多种语言SDK(Python、Java)。:通过分布式架构(如Kubernetes集群)、负载均衡(Nginx)支持百万级设备连接。:提供API、可视化工具和业务逻辑,供用户开发具体应用(如智能家居、工业监控)。:轻量级发布/订阅协议,适合低带宽场景。
2025-03-30 10:17:04
1128
原创 [ROS]ROS系统是如何协调工作机器人
ROS(Robot Operating System)是一种灵活的机器人开发框架,其核心思想是通过分布式节点和通信机制协调机器人各模块的工作。通过以上机制,ROS将机器人复杂的硬件和软件模块解耦,形成松耦合、高内聚的系统,最终实现感知→决策→执行的闭环控制。封装底层设备(如电机、摄像头)为ROS节点,通过标准消息(如sensor_msgs/Image。:处理需长时间运行的任务(如导航到目标点),支持进度反馈和取消。:异步的发布-订阅模型,用于持续数据传输(如传感器数据流)。
2025-03-30 10:11:00
744
原创 [物联网iot]对比WIFI、MQTT、TCP、UDP通信协议
Broker 将数据通过同样的流程反向传递到手机 APP(Wi-Fi → IP → TCP → MQTT → 展示数据)。未配置MQTT Broker的用户名密码(公开测试Broker不需要,但私有环境需要)。转换为 Wi-Fi 帧(包含 MAC 地址:路由器的 MAC 是下一站)。:相当于“快递单上的具体说明”(比如“货到付款”或“放门口”)。:顺丰快递(保证包裹不丢、按顺序送达,但速度可能慢)。但物联网中也有变种如。:普通快递(可能丢件、顺序乱,但速度快)。目标端口:1883(MQTT 默认端口)。
2025-03-30 10:03:54
1131
原创 STM32 HAL库函数原理解析
在 51 单片机的学习过程中,我们就已熟知寄存器是控制单片机外设功能的核心。当过渡到 STM32 单片机时,会发现每个外设内部都存在大量功能各异且相互独立的寄存器。正是这些不同类型寄存器的协同工作,让单片机能够依据开发者的需求实现 “自定义” 功能。
2025-03-22 01:08:29
1053
原创 嵌入式代码入门-读
与英语、德语等语言需要听说读写不同,嵌入式语言的学习更侧重于代码的编写与阅读 —— 编写是为了通过代码解决实际工程问题,而阅读则与是为了理解现有代码逻辑,从而进一步提升自身的编写能力,两者相辅相成构成嵌入式开发的核心技能。所以也有人说,在这一片(系统)内 是写不出什么大名堂的,因为本质要么就是对输出对象控制,要么就是输入信号进行处理.单片机在系统中做输入输出的交互作用,所以也控制着对输入信号的处理以及如何控制输出对象。1.对输入信号的处理部分,思考单片机在对输入信号做了哪些处理.1、理解单片机的作用。
2025-03-21 08:38:10
220
原创 ESP32学习 -从STM32工程架构进阶到ESP32架构
ESP-IDF鼓励模块化开发,用户可以将功能封装为组件(如传感器驱动、网络协议),便于复用。:配置ESP-IDF的系统参数(如任务堆栈大小、Wi-Fi SSID),通过文本文件或。:图形化配置STM32的外设(如GPIO、UART),生成初始化代码,不可直接编辑文本。:通常只有一个顶层的Makefile或CubeIDE工程文件,较少使用CMake。:每个组件(包括用户组件和系统组件)都有自己的。STM32项目中类似功能通常直接写在。或通过CubeMX生成的库代码实现。使用CubeMX配置外设并生成代码。
2025-03-17 22:53:22
1611
原创 [KEIL]单片机技巧—Keil软件篇
可以用来查看当前栈内函数调用的使用情况,从图中可以看出在main函数中调用了SystemClock_Config这个函数,紧接着又在SystemClock_Config又调用了HAL_RCC_OscConfig这个函数,可以很清晰的看出函数之间调用的层次关系。将i拖动到内存窗口即可显示当前变量的值,如果在 i 前面加上取地址符 & 即可显示当前变量的地址。,学会如何通过寄存器的值来排外设上的蛊是嵌入式开发从小白到入门的重要一步,一定要善于使用这个工具,而不是外设出了问题时,一点点的通过表层外设现象排蛊。
2025-03-02 10:47:01
1201
1
原创 单片机栈和堆、FALSH、区别
比 RAM 慢,但容量较大(STM32 的 Flash 通常为几十 KB 到几 MB)。| Stack(向下增长) ← 栈顶(Stack Top)| Heap(向上增长) ← 堆顶(Heap Top):存放代码和常量(只读),CPU 直接从 Flash 取指令执行。:运行时不可直接修改(需特殊操作,如 Flash 编程)。:均位于 RAM 中,但方向相反(栈向下,堆向上)。由编译器自动管理,向下增长(高地址 → 低地址)。由程序员手动管理,向上增长(低地址 → 高地址)。
2025-03-01 23:59:14
980
原创 FreeRTOS空闲任务和钩子函数
空闲任务是FreeRTOS中一个重要的系统任务,用于防止CPU空转、回收资源和管理低功耗模式。空闲钩子函数允许用户在空闲任务中插入自定义代码,实现低功耗模式或执行后台任务。使用空闲钩子函数时,需要注意避免阻塞操作,并确保定期返回。
2025-02-24 10:05:34
412
原创 辅助焊接:PCB板元件焊接困难?
PCB板元件焊接困难?不知道元件对应哪里?手动焊接困难?相信很多小伙伴在自己打板到货后,进行焊接都会很头疼。接下来我会给大家介绍一个非常方便的工具,让我们在焊接过程中能够更轻松的正确焊接完整个板子.
2025-02-23 21:14:13
1141
原创 OV-WATCH手表
MCU选型选择STM32F4411C1U6,因为它具备较大的ROM和RAM,能够运行FreeRTOS和VIGL。采用触摸显示屏,具体型号可在淘宝搜索。电源部分充电芯片:采用TP4056,用于3.7V锂电池的充电。升降压芯片:采用TPS63020,用于解决电池在3V-4V波动时的放电问题。通信部分NFC:采用UID卡,通过模拟开关连接。蓝牙:采用HC-04。传感器包括心率传感器、海拔指南针等,具体型号未提及,但需按照说明手册连接。看门狗由于STM32内部看门狗无法关闭,进入休眠模式会导致重启,因此采用外部看门
2025-02-23 20:46:16
949
原创 单片机裸机编程:状态机与其他高效编程框架
在单片机裸机编程中,状态机、时间片轮询、中断驱动、非阻塞式编程和超级循环都是常见的编程模式。状态机:适用于复杂逻辑和事件驱动的系统,能够有效管理任务切换和逻辑复杂性。时间片轮询:适合多任务并发但对实时性要求不高的场景。中断驱动:适合对实时性要求较高的系统。非阻塞式编程:适合需要快速响应多个事件的系统。超级循环:适合简单的多任务场景。
2025-02-23 19:49:30
771
1
原创 单片机裸机编程-时机管理
也就是说,在不同的执行函数之间的通信使用的是全局变量,或者说是标志位。的概念,对不同的任务进行局部管理。状态机通过定义不同的状态和状态之间的转换条件,使得代码更加模块化和灵活。通过这种方式,我们可以在裸机中实现类似 RTOS 的时间片轮询机制,使得任务的执行更加公平和灵活。通过状态机,我们可以清晰地定义每个任务的执行条件和状态转换逻辑,从而提高代码的可读性和可维护性。:在定时器中断中维护一个任务状态数组,记录每个任务的执行状态和剩余时间片。在裸机编程中,任务的执行顺序通常是固定的,由程序的。
2025-02-23 19:38:07
371
原创 单极性与双极性步进电机区分
简明扼要不废话:如图所示单极性,就是有一个公共端,接VCC 总共5根线。 电流方向不能变,比如A低电平,B低电平。双极性:与单极性最大的区别:就是电流方向可变。通过电流方向控制磁场方向。比如可以A+ > A- 也可以A- > A+,这样就通过电流方向(高低电平)来控制方向
2025-02-23 15:55:04
567
原创 FreeRTOS之任务栈
当一个任务调用另一个函数时,就好比你在冒险途中遇到一个岔路口,决定去探索一条新的小路。当被调用的函数执行完,程序就可以根据栈里存储的返回地址,准确地回到原来的函数继续执行,就像你顺利回到主路一样。函数创建任务时,任务的栈空间会从 FreeRTOS 的堆空间中动态分配。在动态分配中,栈的大小需要根据任务的实际需求来设置。在任务切换时,FreeRTOS 会检查栈指针是否在合法的栈空间范围内。如果任务中没有复杂的嵌套调用,分配 128 字的栈空间通常就足够了。任务的栈空间在任务创建时分配,在任务删除时释放。
2025-02-21 17:03:24
1076
原创 FreeRTOS 时间管理
这样,在这 X 个时间滴答内,这个任务就会乖乖地 “睡觉”,把 CPU 资源让给其他需要工作的任务。你可以创建一个软件定时器,设置好定时时间,再指定一个回调函数(也就是到时间后要执行的操作)。一旦定时器启动,它就会默默倒计时,时间一到,就会立刻触发回调函数。FreeRTOS 的软件定时器是一种更灵活的时间管理工具,可以用于周期性执行任务或在一段时间后触发事件。(tick),它就像是 FreeRTOS 的心跳,为系统提供了最基本的时间单位。,它在指定的绝对时间执行任务,而不是相对于当前时间的相对延时。
2025-02-21 16:48:11
864
原创 FREERTOS关键概念-任务管理
当一个低优先级任务持有互斥锁,而此时一个高优先级任务试图获取该互斥锁时,低优先级任务的优先级会临时提升到与高优先级任务相同,这样可以避免高优先级任务因为等待低优先级任务释放互斥锁而被长时间阻塞,提高系统的实时性。在设置栈空间大小时,要根据任务的实际需求来确定。比如,在一个智能家居系统中,有两个同优先级的任务,一个是控制灯光的任务,一个是控制窗帘的任务。例如,在使用队列时,可以设置一个合理的超时时间,当任务在等待队列数据时超过超时时间还没有得到数据,就会退出等待状态,这样可以避免任务一直等待下去导致死锁。
2025-02-19 00:35:48
584
原创 [FreeRTOS]01从抽象到具体,从软件到硬件,依旧是是寄存器的杰作
如此抽象的RTOS软件架构是如何最终落实到像STM32这样的处理器底层硬件电路呢?
2025-02-09 06:06:00
858
原创 【无标题】
特性值传递(第一种方式)指针传递(第二种方式)修改的目标仅修改函数内部的副本数据修改的是原始结构体数据修改后效果函数执行完后,外部结构体的数据不会改变函数执行完后,外部结构体的数据会被修改调用时传递的参数直接传递结构体的值(副本)传递结构体的地址(指针)内存开销传递整个结构体的副本,内存开销相对较大传递指针,内存开销较小函数内部访问方式使用rb.rrb.wrb.size来修改副本使用rb->rrb->wrb->size来修改原始结构体适用场景适用于不需要修改原始数据,只需对数据进行操作时。
2024-12-14 23:37:43
130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人