MCU
文章平均质量分 85
嵌入式MCU开发
boringhex.top
这个作者很懒,什么都没留下…
展开
-
可能是当下最能打的MCU图形库:LVGL
LVGL 是当前最流行的免费开源嵌入式图形库,能够为任何MCU、MPU和显示器类型创建美观的用户界面。它得到了许多行业领先供应商和项目的支持,包括Arm、STM32、NXP、Espressif、Nuvoton、Arduino、RT-Thread、Zephyr、NuttX、Adafruit等。原创 2024-06-05 09:50:14 · 1137 阅读 · 0 评论 -
Rust在嵌入式系统开发中的应用
传统上,C和C++是嵌入式系统开发的主要语言选择,但随着Rust的引入,开发者们开始意识到Rust在嵌入式系统开发中的潜力。通过使用Rust,开发者能够提高嵌入式系统的可靠性、安全性和性能,从而推动嵌入式系统技术的发展。例如,嵌入式物联网平台Tessel就是使用Rust开发的,它具有高度的可靠性和灵活性。Rust具有良好的与C语言和C++语言的互操作性,使得开发者能够轻松地集成现有的C/C++代码和库。Rust通过所有权和借用系统来保证内存安全,避免了常见的内存安全问题,如缓冲区溢出和空指针异常。原创 2024-03-18 10:04:22 · 856 阅读 · 0 评论 -
生物电信号测量技术
脑电图、心电图、肌电图和眼电图是常见的生物电信号测量技术,它们可以提供有关大脑、心脏、肌肉和眼部的电活动信息。生物电信号是生物体内的电活动产生的电流或电压信号,它反映了生物体的生理状态和活动。血氧饱和度是一种测量血液中氧气含量的技术,通过在指尖或耳垂上放置传感器,测量血液中氧气的饱和度。总结起来,血氧饱和度测量的关键技术包括传感器的选择与放置、信号的采集与处理、数据的分析与解释等。脉搏血氧饱和度的测量通常使用光学传感器,传感器通过放置在患者的指尖或耳垂上,利用红外光和红光的吸收特性来测量血氧饱和度。原创 2024-03-07 14:02:35 · 764 阅读 · 0 评论 -
让人眼花缭乱的`C`语言声明
C 语言的声明是描述变量或函数的类型的语句。在 C 语言中,声明可以包括基本类型、指针、数组、结构体、联合体和函数等。声明的复杂性取决于它所描述的实体的复杂性,以及使用的修饰符和符号。原创 2024-02-02 10:36:01 · 1102 阅读 · 0 评论 -
电子实验室设备:从零开始配置实验室(一)
本文译自随着多次国际迁徙以及在几家公司(或其分支机构)工作,尤其是在没有强大电子工程团队的情况下,我不得不为自己和客户设置多个电子实验室。那些计划进行内部测试的初创公司也需要建立实验室并获取适当的设备。有时,这一切都在非常有限的预算内进行,而在其他情况下,我有几百万美元的预算可供使用。在这篇文章中,我将尝试涵盖不同预算范围,因此,无论您是业余爱好者、一家大型公司/组织打算拓展到尖端电子领域,还是介于两者之间,您都将找到从零开始建立新实验室所需的设备。原创 2024-01-08 10:09:29 · 1113 阅读 · 0 评论 -
实际项目中的环形缓冲区
在实际项目中,环形缓冲区的设计要比讲到的原型稍微复杂一些,需要一些接口函数来实现数据结构封装。GitHub上有个大帅哥写了一个轻量的环形缓冲区库,可以学习参考,也可以直接集成到自己的项目中,功能已经非常完善。size_t!defined||uint16_t0x0001uint16_t0x0001首先,代码包含了一些必要的头文件,并检查是否在C++环境中。如果是,就使用extern "C"来确保C++编译器以C语言的方式处理这个库。然后,定义了一些类型和枚举。例如,lwrb_sz_t和。原创 2024-01-08 10:08:30 · 953 阅读 · 0 评论 -
C语言环形缓冲区
环形缓冲区,也称为循环缓冲区或环形队列,是一种具有固定大小的缓冲区,其特点是当缓冲区已满时,新的数据将覆盖最旧的数据。它主要由两个指针(头指针和尾指针)和一个固定大小的数组组成。通过本文的介绍,我们了解了C语言环形缓冲区的定义、原理和应用。环形缓冲区作为一种高效的数据结构,可以在各种实际应用中发挥重要作用。公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |原创 2024-01-04 10:03:07 · 792 阅读 · 2 评论 -
FreeRTOS 中的中断处理
在 FreeRTOS 中,中断处理是通过中断服务例程(ISR,Interrupt Service Routine)实现的。FreeRTOS 提供了一些用于在中断处理中使用的函数,以确保在中断上下文中正确使用实时操作系统。这是因为在 FreeRTOS 中,一些函数需要在任务上下文中调用,而不能在中断上下文中调用。这种方式保证了中断处理的实时性,同时避免了在中断服务例程中直接调用 FreeRTOS API。:处理器在中断发生时都会保存当前上下文,执行相应的中断服务例程,然后恢复之前的上下文。原创 2023-12-27 09:37:03 · 2191 阅读 · 0 评论 -
FreeRTOS 时间管理和定时器
FreeRTOS 是一个开源的实时操作系统,提供了丰富的时间管理和定时器功能,用于实现任务调度、延时等操作。在本文中,我们将深入探讨 FreeRTOS 的时间管理和定时器相关的内容。原创 2023-12-21 10:03:14 · 1289 阅读 · 0 评论 -
FreeRTOS任务间通信与同步
在FreeRTOS中,任务是由一个或多个函数组成的独立的执行流,它们可以独立的运行和调度。任务之间的通信和同步是任务管理的核心内容之一。任务间的通信是指一个任务向另一个任务传递信息,而同步则是指多个任务按照一定的顺序执行。FreeRTOS提供了多种任务间通信和同步的机制,包括信号量,队列,互斥锁和事件标志组等。在FreeRTOS中,任务间的通信和同步是一个重要的部分,它涉及到信号量,队列,互斥锁和事件标志组等概念。通过理解和掌握这些概念,可以有效地管理和调度任务,提高系统的效率和稳定性。原创 2023-12-11 10:27:57 · 1976 阅读 · 0 评论 -
FreeRTOS中的任务调度
实时操作系统(RTOS)是为了能在规定的时间内完成特定任务的操作系统。与通用操作系统不同,实时性是其最重要的特征。原创 2023-12-11 10:26:18 · 1178 阅读 · 0 评论 -
FreeRTOS中的任务管理
任务是FreeRTOS中最基本的调度单元,它是一段可执行的代码,可以独立运行。FreeRTOS中的任务是基于优先级的抢占式调度,优先级高的任务可以抢占优先级低的任务的CPU资源。任务的创建、删除、挂起、恢复、设置优先级等操作都是通过调用API函数来实现的。原创 2023-12-05 09:42:02 · 995 阅读 · 0 评论 -
FreeRTOS下的“Hello World”
实时操作系统(RTOS)是一种专为实时应用程序设计的操作系统。实时应用程序需要在特定时间内做出预测的响应,因此RTOS专注于提供对时间约束的强调,以确保系统能够满足实时性能要求。原创 2023-12-05 09:40:51 · 402 阅读 · 0 评论 -
FreeRTOS简介
FreeRTOS作为一款成熟、稳定且广泛应用的RTOS,为嵌入式系统的开发提供了坚实的基础。其小巧高效、易移植的特点使得它在资源受限的环境中表现出色。而ESP-IDF作为ESP32的开发框架,则在FreeRTOS的基础上提供了更加便利和高级的功能,使得ESP32的开发变得更为高效。随着物联网和嵌入式系统的不断发展,FreeRTOS和ESP-IDF都将继续演进和壮大,为更多的开发者提供强大的工具和框架。这也将推动着嵌入式技术的不断创新和进步,为未来智能设备的发展打下坚实的基础。原创 2023-11-29 10:18:19 · 2091 阅读 · 4 评论 -
IDF 组件管理器
通过在文本编辑器直接编辑,你可以轻松定义清单文件中的依赖项。以下是有关定义依赖项的简单示例:# 定义来自[注册表](https://components.espressif.com/component/example/cmp) 的依赖项# 从 Git 仓库定义依赖项dependencies : # 通过相对路径定义本地依赖项 some_local_component : path : ../../projects/component有关清单文件格式的详细信息,请参阅清单文件格式文档。原创 2023-11-29 10:16:52 · 1768 阅读 · 0 评论 -
ESP32C3小飞控调试
ESP32C3小飞控板赶在国庆节前发出打样,假期后上班就收到了样板,但是迟迟没有动手调试,这两天终于抽出时间调试了,调试过程还算顺利,基本没有遇到什么大问题,下面记录一下调试过程。原创 2023-11-20 17:35:48 · 780 阅读 · 0 评论 -
Tiny Plane固定翼小飞机机身硬件整理开源
Tiny Plane是一个固定翼小飞机飞控项目,旨在DIY一款操控良好、飞行时间长、可玩性高的固定翼小飞机。目前基于48cm翼展手抛机进行改装,飞控采用ESP32-C3。原创 2023-11-01 10:04:55 · 557 阅读 · 2 评论 -
【开源】调测利器:I2C电流计 功率计
小飞机的板子画成这样:然后就开始溜号了。。。真心希望有小伙伴能来一起搞一下啊~溜号是因为这次想在马达控制中加入电流闭环,所以就想测一下720空心杯带桨和不带桨状态下用锂电池供电的电流,正当要测时发现手上的万用表没电了,很是恼火。并且我的万用表也无法连续记录数据,这样就无法得到锂电池的放电曲线,所以干脆自己做一个吧!原创 2023-10-30 11:20:23 · 428 阅读 · 0 评论 -
分享一个高颜值开源计算器
今天逛同性交友社区时发现一个高颜值的开源计算器,分享给大家,希望对大家有所帮助。原创 2023-10-13 09:43:02 · 455 阅读 · 0 评论 -
ESP32C3 UDP数据传输
运行多次,结果都差不多,在5.5KB/s左右,这个结果应该是远低于phy速率的,跟配置有关,这种测量方法本身也不能反应真实物理速率,但是跟实际使用场景比较接近,可以作为参考。这段python代码不严谨地测试了通信速率,发送一段100个字节的数据,esp32c3收到后会立即返回,然后计算时间。本文主要介绍ESP32C3的UDP数据传输,ESP32C3作UDP server,工作在ap模式。遥控小飞机的电池舱已经画好发去打样,不过座舱还没搞定,先弄弄遥控和数据传输。打印输出有多耗时呢?公众号 | FunIO。原创 2023-10-11 09:47:30 · 362 阅读 · 0 评论 -
简单强大的时序图绘制工具
今天分享一个简单强大的时序图绘制工具——WaveDrom。Wavedrom 是一款功能强大且简单易用的文本转图表工具,被广泛应用于生成时序图、波形图等交互式波形。其特点在于使用简单的文本语法,使得开发人员能够以可视化的方式表示数字信号和时间序列数据。Wavedrom 的优势在于其高度灵活性和可扩展性,使用户能够快速绘制复杂的波形和图表,并轻松与其他文档和代码进行整合。Wavedrom 的基本语法相对简单,以 JSON 对象或简洁的文本描述波形和时序信息。原创 2023-10-09 14:36:16 · 1227 阅读 · 0 评论 -
CH347读取MPU6050传感器数据和显示
姿态估计支持:由于同时具备加速度计和陀螺仪,MPU6050 能够用于姿态估计和导航,例如通过融合算法计算物体的俯仰角、滚转角和航向角。因为MPU6050传感器数据寄存器地址是连续的,获取传感器数据时其实可以快读,理论上会更快,上面的代码还没有优化,先可用。数字输出:MPU6050 输出的数据以数字形式呈现,通过 I2C 接口与微控制器或其他处理器通信,简化了数据获取和处理过程。高精度:MPU6050 提供高精度的测量性能,能够在多种环境条件下稳定工作,并具有较低的噪声和漂移。公众号 | FunIO。原创 2023-10-02 17:18:44 · 216 阅读 · 0 评论 -
CH347读写SPI Flash
上图中,红色LED的是W25Q32FV SPI Flash模块,绿色LED的是MPU6050。前面耽搁了几天,今天终于把CH347 SPI接口调试好了。微信搜一搜 “funio”,发现更多精彩内容。至此就可以读写SPI Flash了。要实现SPI通信,至少要用到。公众号 | FunIO。原创 2023-09-30 09:59:11 · 340 阅读 · 0 评论 -
详解SPI
在设计中,需要根据从设备的要求和主设备的特性来选择合适的CPOL和CPHA参数,以确保通信的正确和稳定。在模式2下,时钟处于空闲状态时为高电平,数据在时钟的下降沿进行采样,数据输出则在时钟的上升沿。在模式0下,时钟处于空闲状态时为低电平,数据在时钟的上升沿进行采样,数据输出则在时钟的下降沿。在模式1下,时钟处于空闲状态时为低电平,数据在时钟的下降沿进行采样,数据输出则在时钟的上升沿。在模式3下,时钟处于空闲状态时为高电平,数据在时钟的上升沿进行采样,数据输出则在时钟的下降沿。原创 2023-09-27 09:34:01 · 129 阅读 · 0 评论 -
ESP32C3 PWM输出
四个独立定时器,可实现小数分频波形的周期和占空比可配置,占空比精确度可达14位PWM输出信号相位可调节可在Light-sleep 模式下工作多种时钟源选择,包括APB总线时钟、外置主晶振时钟支持硬件自动步进式地增加或减少占空比,可用于LED RGB彩色梯度发生器占空比自动渐变是一个特色功能,用于呼吸灯或其它LED灯效会很方便,在官方文档特意介绍说是LED PWM控制器。原创 2023-09-22 08:51:11 · 834 阅读 · 0 评论 -
RS485转0_20mA输出模块设计
结合以前发的文章,我们知道,模拟量输出有两种,一种是共地型,一种是共源型。今天开源一款rs485隔离的转0-20ma输出模块的设计。我设计模块的原因是为了测试公司的一款模拟量检测模块的性能,因此需要一个可控的0-20ma输出模拟器,来模拟0-20ma输出。同时想测试一下GP8212S性能。话不多说,直接上。原创 2023-09-20 10:24:23 · 296 阅读 · 7 评论 -
详解SPI
在设计中,需要根据从设备的要求和主设备的特性来选择合适的CPOL和CPHA参数,以确保通信的正确和稳定。在模式2下,时钟处于空闲状态时为高电平,数据在时钟的下降沿进行采样,数据输出则在时钟的上升沿。在模式0下,时钟处于空闲状态时为低电平,数据在时钟的上升沿进行采样,数据输出则在时钟的下降沿。在模式1下,时钟处于空闲状态时为低电平,数据在时钟的下降沿进行采样,数据输出则在时钟的上升沿。在模式3下,时钟处于空闲状态时为高电平,数据在时钟的上升沿进行采样,数据输出则在时钟的下降沿。原创 2023-09-14 09:50:51 · 266 阅读 · 0 评论 -
ESP32C3 PWM输出
四个独立定时器,可实现小数分频波形的周期和占空比可配置,占空比精确度可达14位PWM输出信号相位可调节可在Light-sleep 模式下工作多种时钟源选择,包括APB总线时钟、外置主晶振时钟支持硬件自动步进式地增加或减少占空比,可用于LED RGB彩色梯度发生器占空比自动渐变是一个特色功能,用于呼吸灯或其它LED灯效会很方便,在官方文档特意介绍说是LED PWM控制器。原创 2023-09-08 09:50:24 · 399 阅读 · 0 评论 -
详解I2C
公众号 | FunIO微信搜一搜 “funio”,发现更多精彩内容。个人博客 |原创 2023-09-01 09:59:18 · 3316 阅读 · 0 评论 -
模拟4~20ma电流输出的设计
但是一定要考虑好三极管的选型,完美配合才能出现最佳效果,当然对于我们平时来讲,不需要把范围设计过大,因为过大的范围会降低输出的精度。一般用分离器件搭建的实现原理都是通过单片机控制一个三极管,使其工作在放大区,因为放大区放大并不是线性的,因此需要在串接一个电阻,通过检测电阻电压,单片机来反馈调节三极管的输入,然后从而实现4~20ma电流输出。它的实现原理通过控制PWM的占空比,控制三极管工作在放大区,在三极管上串联一个采样电阻,通过VFB反馈给芯片内部,从而控制输出,调节三极管。公众号 | FunIO。原创 2023-08-30 09:39:19 · 2170 阅读 · 0 评论 -
【开源】调试利器:高速USB转UART、SPI、I2C、JTAG
是基于沁恒CH347芯片设计的一款调试利器,支持高速USB,可以实现USB to UART,USB to SPI,USB to I2C,USB JTAG,USB to GPIO。原创 2023-08-28 11:08:19 · 1830 阅读 · 0 评论 -
无线模块的通信距离
此外,对于特殊的应用场景,还可以考虑使用中继设备、信号增强器或采用多天线技术(如MIMO)来克服障碍物和环境带来的挑战,以扩大通信范围和提升性能。带宽对通信距离也有影响。相比之下,较低的频率信号在传输过程中的损耗较小,因此能够实现较远的通信距离。此外,天线的增益也是一个重要的参数,它表示天线将输入的信号转化为辐射功率的能力。当接收器具有较高的灵敏度时,它能够接收和解码较远距离上的较弱信号,从而实现更远的通信距离。最后,需要注意的是,天线的设计和放置需要遵守相关的法规和规定,包括频率的使用和发射功率的限制。原创 2023-08-25 09:43:39 · 412 阅读 · 0 评论 -
~600行ANSI C代码实现RISC-V CPU核
今天在GitHub上看到一个C语言项目,用大约600行代码实现了一个RISC-V CPU核,甚为感叹,分享一下。不管是学习C,还是学习RISC-V,这个项目都有非常高的学习价值,开源万岁!用 ANSI C 编写的RISC-V CPU 内核。原创 2023-08-21 09:57:31 · 152 阅读 · 0 评论 -
动态库封装成python模块
之前的文章中讲解了如何将静态库封装成python模块,静态库封装相对来说还是有点复杂,今天来介绍下动态库封装成python模块的方法。原创 2023-08-17 09:47:11 · 297 阅读 · 0 评论 -
深入理解ESP-IDF构建系统
ESP-IDF 基础库,包括 libc、ROM bindings 等Wi-Fi 驱动TCP/IP 协议栈FreeRTOS 操作系统网页服务器湿度传感器的驱动负责将上述组件整合到一起的主程序ESP-IDF 可以显式地指定和配置每个组件。在构建项目的时候,构建系统会前往 ESP-IDF 目录、项目目录和用户自定义组件目录(可选)中查找所有组件,允许用户通过文本菜单系统配置 ESP-IDF 项目中用到的每个组件。在所有组件配置结束后,构建系统开始编译整个项目。原创 2023-08-16 10:11:28 · 770 阅读 · 0 评论 -
ESP-IDF前端工具idf.py
在之前的文章中,我们在vs code中完成了esp32 "hello world"程序的开发。乐鑫将很多操作集成到了vs code插件中,在gui中以按钮的形式与用户进行交互。而在这些按钮的背后,则是idf.py。idf.pyCMakeNinjaesptool.pyidf.py应在ESP-IDF工程目录下运行,即包含顶层文件的目录。原创 2023-08-14 11:44:51 · 488 阅读 · 0 评论 -
将静态库封装成python模块
很多硬件厂商的底层设备驱动都是以库的形式提供给开发者,有的是动态库,有的是静态库。开发上层应用,最快速便捷的方式当然还是用python,对于动态库,可以用python的ctypes库进行加载,而对于静态库,则要麻烦一些,今天折腾了很长时间,总算跑通了最简流程。原创 2023-08-11 09:31:19 · 222 阅读 · 0 评论 -
wsl连接usb设备
接下来再集中总结下这几种工具:跨平台支持:CMake、SCons和Ninja天然具有跨平台支持,可以在不同操作系统和编译器上运行。而Make,虽然被广泛支持,但Makefile可能需要针对不同操作系统进行调整。生成构建文件:CMake可以生成各种编译器和IDE的项目文件,如Makefiles、Visual Studio解决方案等。而SCons和Ninja只支持生成自身的构建文件。Make不支持自动生成项目文件。原创 2023-08-09 09:37:26 · 1298 阅读 · 2 评论 -
cmake?make?scons?ninja?
接下来再集中总结下这几种工具:跨平台支持:CMake、SCons和Ninja天然具有跨平台支持,可以在不同操作系统和编译器上运行。而Make,虽然被广泛支持,但Makefile可能需要针对不同操作系统进行调整。生成构建文件:CMake可以生成各种编译器和IDE的项目文件,如Makefiles、Visual Studio解决方案等。而SCons和Ninja只支持生成自身的构建文件。Make不支持自动生成项目文件。原创 2023-08-07 09:54:53 · 441 阅读 · 0 评论 -
cmake中的编译选项
CMake是一个跨平台的构建系统,它可以根据简单的配置文件生成各种平台的构建工具(例如Makefile、Visual Studio项目文件等)。CMake提供了许多配置选项和命令,可以根据项目的需求进行灵活的定制。基于esp-idf开发esp32时,idf.py工具对cmake做了一些封装,但基本兼容,cmake具有的子命令,idf.py基本都有。这里设置了项目使用C++11标准进行编译,并且如果编译器不支持C++11,CMake会报错。这将设置项目的可执行文件、库文件和静态库文件的输出目录。原创 2023-08-04 09:42:12 · 2118 阅读 · 1 评论