自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

刻[苦] 的 blog

开源中国的markdown 是s-h-i-t

  • 博客(106)
  • 资源 (3)
  • 问答 (3)
  • 收藏
  • 关注

原创 精简体积的OLED 基础驱动库 - OLED_BASIC

1. 目前支持SPI 接口的SSD1316 和I2C 接口的SSD1306,想扩展支持相似的其他SSD 这一家子型号难度应该不大,似乎主要是初始化代码上有区别;2. 不是u8g2 库的替代;3. 不需要显示缓冲区,几乎没有额外的RAM 占用;4. 只支持文本和整数输出函数,不支持矩形以外的绘图功能;5. 想显示图片的话,只要把图片当作大一点字符来用就行,自定义一个单独的字库放进去;6. 自定义字库的部分特意做的很简单,不用像U8G2 库那样还要整一堆编码上的劳什子,取模软件输出的数组直接放进代码就

2023-08-21 17:27:37 696

翻译 PID 算法实现的细节问题处理 - 从新手级别开始逐步完善

翻译自Arduino PID 库作者的系列博客文章:[Improving the Beginner’s PID](http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/)。作者的结论应该经过了不少人的实际检验,而且文章讲得平易近人,不需要太多的理论基础。

2023-08-03 22:33:03 1024

原创 简单的按键监听函数 - 按键消抖和长按、双击事件

用一个简单的C 语言函数实现对单个按键的监听,预定可以用在各种芯片平台上,arduino,C51,stm32 等,对硬件没特别的要求。首先明确这个函数要实现的功能,以及调用它的代码要如何响应各种按键事件。上面说的“时间” 都是指函数调用的次数,也就是轮询按键的次数。较短时间或较长时间,意思就是经过的轮询次数的多少。具体是多长时间,取决于调用者调用函数的间隔。这样做是为了减少依赖,不需要有一个时间函数用来提供时间戳,可以用最简单的延时函数循环调用,从而实现更好的通用性。

2023-07-21 15:00:03 1404

原创 有刷直流电机的续流、反向电压和H 桥驱动频率 - 伊朗电系法师视频观后感

从以上这些因素考虑,似乎PWM 频率是越高越好,但就和DC-DC 电源的开关频率一样,频率越高,单位时间开关次数越多,MOS 管就有越多的时间待在过度区间里,从而导致MOS 管的发热增加,整体的效率降低。频率太高还会降低占空比的调节等级数,也就是降低了PWM 分辨率,知道单片机上PWM 原理的人应该都明白这一点。

2023-07-06 02:45:15 9098 1

原创 ADC 读取电位器旋钮,用回差消除临界值档位跳动

就是比如,用电位器当旋钮做风扇调速,划分出10 个速度档位,对应10 个ADC 转换结果的阈值。如果直接比较阈值,当旋钮拧到临近阈值的地方时,ADC 结果的微小跳动会导致风扇档位在两个级别之间不停左右横跳,因此想到了利用回差来消除抖动。

2023-06-17 23:46:50 4117

原创 可调电源LM317 的内部原理 - 特殊的电压跟随器

简单来说,LM317 内部的参考电压的使用方法是比较特别的,它并不是像简单的电压比较器一样,比较ADJ 引脚和参考电压,如果参考电压比较大就提高输出电压。如果是这样基于比较的原理,那么当ADJ 被强制拉到0V 时,LM317 应该会让输出电压达到最大以尽可能提高ADJ,而实际上此时它的输出电压是1.25V,就是内部参考电压的值。于是就清楚了,直接反馈VOUT 不行,但是给VOUT 乘上一个比例,反馈电压就和VOUT 错位了,反馈值总比输出小,如果没有1.25V 的直流偏置,输出永远保持为零。

2023-06-15 23:00:45 6681 2

原创 STM32 实现简单定时任务调度器,动态创建任务,两种思路实现流水灯

代码实现和硬件没关系,所以并不限于STM32,Arduino 之类的其他地方也能用,只要有一个能获取时间的函数就行,或者说,只要有一个会随着时间自动增加的变量就行,时间单位无所谓,所以确实想的话,拿到电脑上也能用。

2023-06-06 19:27:45 5278

原创 二级指针骚操作实现链表虚拟头节点

重点是不用像其他文章里那样,用一个普通节点当头节点,节省一点空间占用,反正我觉得有点骚。就不详细交代技术背景了,简而言之,就是链表中第一个节点前没有节点了,只有一个指向它的指针,所以不能像其他节点一样对第一个节点进行删除操作,代码中必须判断这个特例,详细的参考。可以用一个普通节点当作头节点来指向第一个节点,从而让第一个节点也有前一个节点,统一操作,如下图:但是头节点里会有一个没用的数据域,浪费空间,所以才想到用二级指针。

2023-06-03 20:10:56 592

原创 用C++ 包装STM32 官方固件库 - 链式调用改写初始化结构体

在继续之前,先说明一下,当然,这么包一层肯定会付出一些代价,包括运行时间和空间占用,后面会有编译结果比较。有官方库“珠玉在前”,我觉得相比之下,这层包装付出的代价并不显著,有兴趣可以看看常用的GPIO 初始化函数在固件库里是怎么实现的,可以说是资源浪费的典范[doge]。另一方面,固件库里都是C 函数,函数实现都分开放在.c 文件里,编译器内联的可能性应该不大,因此就算是简单的给引脚设置个电平,用固件库也会产生额外的函数调用,所以很多人是在宏里自己写寄存器操作的。用C++ 的话,这种简单的函数放在头文件里,

2023-06-01 21:23:56 986

原创 HK32F030MF4P6 引脚分配辅助表格

也适用于HK32F0301MF4P6。官方的SDK 里附带了一个IO SELECT.xlsx 表格,就是用来辅助做引脚功能分配的,不太好用,因为里面用了复选框控件,兼容性不好。于是基于官方的文件,重新设计了一个表格:功能没区别,只是方便的显示出所有引脚的复用功能,标记出已经分配的引脚,避免冲突。标记功能全是用条件格式做的,兼容性好多了,相对更美观。可以随便调整单元格的大小,不会像复选框控件一样错位。

2023-06-01 16:40:30 779

原创 自制Arduino 风格开发板 - HK32F030MF4P6 紧凑开发板

模仿Arduino Nano 做一个HK32F030M 的紧凑开发板,排针间距和Arduino Nano 相同,整体尺寸略小,适合插在面包板上。兼容HK32F030MF4P6 和0301M,板载CH340N 串口和DS1307 时钟模块。。尺寸4.2 X 1.8cm,因为引脚数量更少,本来板子是可以更短一点的,但是没必要。

2023-05-29 17:54:32 2173 1

原创 Arduino 单片机程序中处理时间戳、时间溢出和延时问题

这个话题对其他单片机也适用,就是用来计时的变量万一溢出了该怎么整,类似那个经典的千年虫问题。实际上这个问题在日常生活中也很常见,比如,时钟上的小时最大值为23,从0 开始,每过24 小时归零一次,只按时钟上的小时数来记录时间,最多只能计24 小时。时间超过最大值后归零就是所谓的溢出问题。一种常见的设计是用比较时间戳的方法来预约一个延时任务,比如在1 点整的时候开始一个2 小时的延时任务,1 + 2 = 3,所以任务预约在3 点执行,当前时间大于3 时这个任务就该执行了。

2023-05-28 20:31:48 3575

原创 Real-Time C++ 嵌入式C++ 程序设计(三)

在C++ 中,局部变量可以在第一次使用的地方声明,它们不一定需要放在函数的开头。这可以提高代码可读性并促进编译器优化。例如,下面的代码在使用i、j和k前才声明了整型变量。use_i(i);use_j(j);k < 10;} }实现范围操作。

2023-05-25 21:31:08 803

原创 Real-Time C++ 嵌入式C++ 程序设计(二)

二、在实际硬件上实践C++ 程序

2023-05-25 18:00:53 915

原创 Real-Time C++ 嵌入式C++ 程序设计(一)

翻译自 Real-Time C++ Efficient Object-Oriented and Template Microcontroller Programming 4th Edition - Kormanyos, Christopher,这书涉及了从C++11 到C++20 的内容,主要介绍使用C++ 的模板、面向对象等特性设计嵌入式程序。书里的示例代码都是公开的:https://github.com/ckormanyos/real-time-cpp。

2023-05-25 15:48:25 1015

原创 快速找出PATH 路径下重复的命令程序文件

RT,就是想找出命名冲突的可执行文件。日积月累的,PATH 环境变量里乱七八糟堆了一堆东西,很可能想叫一个命令出来,结果实际执行的是另一个地方的程序。

2023-05-18 02:08:08 360

原创 STM32 编译期检查EXTI 中断函数是否正确定义

检查中断函数的目的是避免被低级错误浪费时间,比如,一开始用PA0 引脚输入中断信号,中断函数写的是,后来引脚换成PA2 了,但是中断函数忘记改。

2023-05-10 22:08:24 661

原创 用CD4051 实现八档位可变 / 可编程增益同相比例运放电路

CD4051 相当于一个单刀八掷的开关,一个公共端对应另一边八个档位,如下图。左边的Z 就是公共端的“单刀”,右边Y0 到Y7 是“八掷”,用A0、A1、A2 三位选择这八个档位。基于CD4051 的变增益电路实现的原理是一致的,只是细节上的处理大致有两种方式。

2023-04-23 14:32:41 6211 2

原创 快速找出满足所需比值的一对电阻值 - Python 函数实现

性能大概算不上快速,但是能用,而且这种寻找最优组合的问题,基本上也只有暴力搜索这一条路可走吧。

2023-04-20 16:04:47 822 2

原创 C++ 特性简化STM32 风格固件库的GPIO 操作,使用HK32F030M

首先要处理的就是引脚定义的问题。这个引脚的Port 指针引脚的Pin时钟一类的宏,有几个固件库函数也要用到,于是常见的写法就是像上面的代码那样,一个引脚要定义好几个宏,东一榔头西一棒槌的,连最简单的给引脚置高电平都得同时引用和// 51 单片机 LED1 = 1;心智负担明显小多了,时间和精力也是很宝贵的,除了AVR,倒是和STM32 的风格差不多[doge]。// 分配PA0 引脚为LED1 LED1 = PA0;// 点亮LED1,置高电平 setpin(LED1);

2023-04-15 00:02:39 711

翻译 Cortex M0 和M0+ 的简单说明 - 《Cortex M0/M0+ 权威指南》 英文版PDF 资料

ARM® Cortex-M0 处理器和 Cortex-M0+ 处理器都是 32 位处理器。它们的寄存器组内部寄存器、数据路径和总线接口都是 32 位。它们都有一个主系统总线接口,因此被认为是冯·诺依曼总线架构。Cortex-M0+ 处理器具有可选的单周期 I/O 接口,主要用于更快地访问外设 I/O 寄存器。

2023-04-13 19:36:37 3966

原创 用C 实现以静态数组作为内存池的单向链表

完全是ctrl c / v的new bing 吐出来的代码,看着还不错,按自己的想法补了点注释。这是一个使用空闲链表技术优化后的单向链表实现,它使用静态数组作为内存池,而不是堆内存。它还包含一个有序插入函数,可以根据data的大小自动找到合适的插入位置,使整个链表保持从小到大的顺序。这个版本添加了一些注释,以帮助您更好地理解代码。请注意,这只是一个示例,您可能需要根据您的具体需求进行修改。:就是把内存池本身初始化成一个链表,每个节点对应一个空闲的块,创建新链表的节点时直接从空闲链表里拿,不用反复查找。

2023-03-25 01:58:35 216

原创 微机原理笔记 - X86 汇编指令系统和语法

主要基于王克义的《微机原理》第二版 ,和其他8086 汇编教材应该没区别。

2023-03-24 18:24:17 5040

原创 Python 自动识别并批量转换文本文件编码

如题,很简单,就是先用chardet 库识别文件编码,解码之后再输出成目标编码。算是个偶尔能用上的小工具,要用的时候万一没有就很难受的那种,比如,网上下载了别人的项目文件,一打开全是乱码……

2023-03-16 02:53:35 395

原创 双击打开Python 脚本同时自动切换Anaconda 虚拟环境

Python launcher 安装后位于C 盘Windows 目录下,文件名叫py.exe,这个位置是默认加入PATH 的。可以用一个配置文件py.ini 自定义若干用于启动脚本的命令,配置文件要放在py.exe 的相同目录或者用户的底下,AppData 下的配置会覆盖Windows 目录下的配置。等号左边是命令名称,右边是命令行。第一个命令用来切换到base 环境再调用python.exe 执行脚本,相应的第二个就是先切换到other 环境。

2023-03-15 19:20:11 1348

原创 Arduino 基于状态机实现简易的协程 - 几种非阻塞程序设计风格

想要处理的场景类似生产者 - 消费者模型:在一个顺序执行的函数中间,先要向生产者发送请求,比如让ADC 开始采样,过一段时间,等ADC 采样完成,获得返回的数据之后函数才能接着顺序执行。这是单片机程序里常见的问题,ADC 完成采样需要时间,没有返回的数据函数就不能接着执行,和网络编程中向服务器请求数据差不多,都是必须等待另一个并行运行的单元返回必要的数据,不同点在于,单片机程序不能在生产者那边想办法,硬件是死的。

2023-03-13 01:03:22 1508

原创 SPI 接口OLED 模块 - 兼容5V 和3.3V 电平

老王家买的屏幕放了快一年了,终于还是决定整个单独的模块,之前一直打算集成到开发板上的,不太灵活。

2023-03-11 02:46:18 4095

原创 用二极管和电容过滤电源波动,实现简单的稳压 - 小水泵升压改装方案

简而言之,就是类似采样保持电路,当电源电压因为电机启动而骤降时,用二极管避免电容电压跟着降低,从而让电容上连接的低功耗芯片有一个比较稳定的供电电压。没什么特别的用处,省个LDO 吧,电压跌幅太大的时候也能用。

2023-03-05 21:58:54 2469 1

原创 智能笔式万用表简单体验加拆解 - VC6012C - 智能电笔

虽然上面说了这么多缺点,整体可用性还是可以的,日常很少感觉到不方便,还有一些独到的优势,比如小体积、可换笔尖、两种模式的电笔功能,不过对于只想买个万用表的人来说,这款性价比不够高。

2023-02-17 19:33:34 4600 1

原创 Solid Edge 放样使用引导曲线

放样用引导曲线的时候被一个错误提示卡了挺长时间——“选来用作路径或横截面的所有边必须连接在一起”,所以记录一下遇到的问题。https://docs.sw.siemens.com/zh-CN/doc/246738425/PL20211001099989437.feature_modeling/feat12c,或者B 站SE center 的视频教程。

2023-01-23 02:00:32 3963

原创 电容并联放电电阻的RC 电路时间常数计算,一阶线性常系数微分方程

就是在谁都知道的RC 电路里的电容旁边并联一个放电电阻,计算它对时间常数的影响,参考下面的示意图:电路的输入电压是电源电压V,在R0 和R1 之间连接着一个单片机引脚,所以想计算上电后单片机引脚上电压的变化,也就是输出电压Uo。电容C 通过R0 和R1 充电,R2 放电。计算以前电路上好像学了简化方法,叫三要素法,但是我忘光了,所以就从基础开始算。电容两端的电压公式如下:Uc′=1CIc(1){U_c}' = \frac{1}{C} I_c \tag{1}Uc​′=C1​Ic​(1)即电

2022-10-23 16:08:03 12343 2

原创 DS1302 / DS1307 不起振可能是寄存器配置原因

秒寄存器的第七位定义是**时钟停止标志(CH)**,当其置为1,DS1302 的时钟振荡器会停止,芯片也进入低功耗模式,此时电流消耗小于100nA,当CH 标志被写为0 后时钟启动。上电后这个标志位的初始状态是未定义的

2022-10-02 00:33:30 3461

原创 Windows 下使用bpg 图片 - 查看,转换,预览

介绍一下windows 下怎么使用bpg 格式压缩图片体积,同时可以和流行的图片格式一样不影响日常使用便利。

2022-08-24 19:15:00 4682

原创 贴片微型滚珠振动开关的结构原理

tb上看到有个店卖这种微型的滚珠振动开关,空间有限,又不想用MEMS陀螺仪的情况下能用来代替普通圆柱形的滚珠开关。外形有点像1206的自恢复保险,只是厚一些。到手之后试过,感觉比普通的滚珠开关要灵敏一点,还不错。...

2022-07-19 15:32:44 2628

原创 7905 和TL431 负电压稳压电路 - 相对于电源正极的稳压和浮地电路

首先要澄清,这里所谓的负电压稳压并不是像电荷泵一样产生一个负电压,而是类似7905 的作用,稳压芯片的地和输入/输出电压反过来,GND 电压更高。如果GND 接电源正极,输出就是稳定的比电源低固定的电压,如果以电源正极为参考零电位,稳压器输出的是负电压。其实就和PNP 三极管的数据都是负的一样,如下图:那么普通的1117 之类的LDO 反接一下是不是也可以反向稳压呢?可以试试看[狗头]在很多地方7905 是和7805 对称组合使用的,类似下面这样:如此一来后面的电路只要把它们的地连接到7805 和7905

2022-06-03 17:46:16 12505

原创 芝诺悖论的计算

没什么复杂的,学了高数应该都懂,只是稍微写写,算是复健一下。芝诺悖论简单表述就是,假设A 和B 之间路程为1,一个人先走了12\frac{1}{2}21​,然后又走了剩余路程的12\frac{1}{2}21​,就这么无穷匮也,那这人到底能不能走到那边。第一步走了二分之一,第二步走了二分之一的二分之一,以此类推,把每一步走的路程加起来就是这个人一共走过的路程,即:L=12+14+18+116+⋯L = \frac{1}{2} + \frac{1}{4} + \frac{1}{8} + \frac{1}{1

2022-06-02 00:24:13 302

原创 电源防反接和防倒灌 - 使用MOS 管和运放实现理想二极管

防反接电路的用处很容易理解,实现也相对简单,但是防倒灌电路则可能到用到的时候才会发现有点复杂。比方说,一个东西既支持用PD 供电输入20V,又可以直接DC 输入24V,USB 5V 供电时也能亮,还允许插着DC 供电的同时插着USB 线连接上位机,并且传输数据的USB 接口和PD 供电接口是同一个,这时问题就出现了,DC 24V 可能会通过USB 的VBUS 直冲上位机。最万无一失、最豪华的方案可能是给VBUS 上串一个隔离变压器,先逆变再变回DC,这样一来有变压器挡着,后级电压绝对跑不到上位机去。说不

2022-06-01 15:46:35 46691 5

原创 STC 纯硬件自动下载电路 V2

在之前那篇电路STC 纯硬件自动下载电路 - 三极管负脉冲电路 的基础上略微简化,把三极管换成了MOS 管,减少了一两个元件。原理的详细信息,比如RTS# 和DTR# 信号,参见那篇。原理主要的差别是把左边延时电路的三极管换成了MOS 管,原理还是一样的。然后就是改用一个NMOS 控制单片机的GND 来控制断电和上电,因为这么一来就可以直接把Q2 的输出连接到Q1 栅极,要是Q1 用PMOS 的话中间还得再加一个管子反相,就太蹩脚了。这么一来两个管子可以用一样的NMOS,也简化了BOM。图里用的2N7

2022-05-26 14:33:21 3989 11

原创 SPI 接口OLED 使用5V 信号驱动可能需要电平转换

这类OLED 模块一般都用I2C 驱动,此时信号电平用5V 好像也没什么问题,但是SPI 接口的OLED 使用5V 信号电平时可能完全不工作。模块电路以淘宝上这种SPI 接口模块举例:一般是叫做4 线SPI 接口,再加上VCC,GND 和复位信号,一共就是7 针,复位信号可以不接。其中,SPI 标准的三根线里只用了SCLK(SCK) 和MOSI(SDA),因为OLED 芯片不支持读取数据,只能向它输出,MISO 不接。在标准的SPI 接口以外,OLED 芯片增加了一个DCX 或者DC 信号,用来在S

2022-05-22 00:28:51 3744

原创 Adblock 插件规则语法实现B 站动态黑名单 - 隐藏特定用户的图文动态

需求很简单,比方说有时候会关注几个专职搬运视频的号,然后就会发现他们会发些很烦人的图文动态。视频还是想看的,所以需要精确的只屏蔽特定用户的图文动态。b 站本身似乎没这种功能,因为我主要是电脑上浏览器看看b 站动态,所以决定用浏览器的广告屏蔽插件来实现,具体而言,就是添加一条自定义屏蔽规则。屏蔽插件我用的firefox 浏览器,插件是这个Adblocker Ultimate,用了挺长时间了,效果一直很强力,除了偶尔会遇上针对广告拦截的,不过规则更新也挺勤快。Chrome 应该也有这个。广告屏蔽插件的原

2022-05-18 19:49:19 2301

PY32F002A 20PIN 引脚分配辅助表格

用来辅助分配引脚功能的表格,单片机引脚的复用功能又多又乱,所以用表格汇总所有复用功能,并且设置了公式和条件格式,可以显示每个引脚的分配状态。里面包含ods 和xlsx 两种格式的表格。推荐用libre office 打开ods 格式的,excel 也能打开。xlsx 格式是从ods 转换的,丢失了条件格式。

2025-02-19

辉芒FMD FT60F011单片机C 语言例程、资料、应用笔记

包含FT60F011 单片机的数据手册、应用笔记、C 语言例程,应该也适用于FT60E011。本来还有更多应用笔记的PDF,忘记存,回头再找就发现完全搜不到,也记不起来我自己以前是从哪儿找的这些资料。 C 语言开发环境和编程器去立创社区找。 编程器原作者的项目:https://oshwhub.com/kktun/PICjian-rong-dan-pian-ji-xue-xi-; 我修改的硬件:https://oshwhub.com/etberzin/ft60-bian-cheng-qi; 行吧,想起来之前从哪儿下载的了,直接去辉芒官网下载就有,https://www.fremontmicro.com。

2025-02-13

HK32F030MF4P6 引脚分配辅助表格

包含两种格式的表格文件,XLSX 和ODS。用LibreOffice 的话推荐ODS 格式

2023-06-01

BPG 图片格式转换工具。

Romeolight Bpgconv 2.5 便携版 Description : Batch conversion tool for BPG images Version : 2.5 Website : http://www.romeolight.com/products/bpgconv License : BSD-2-Clause Binaries : BPGconv.exe

2022-08-31

Op Amps for Everyone 第5版,运放权威指南

运放指南 Op Amps for Everyone - 2018 fifth edition

2022-05-30

Circuit Wizard 2 教育版,电路仿真和设计软件

可以直接安装,Circuit Wizard 2 教育版,打开后里面会显示个教育版标签,不影响使用。比1.5 版本多了个单片机功能。

2022-05-27

8051单片机指令定义详解 - 来自STC 文档

RT,中英文对照8051 指令集详解,77页。

2022-02-11

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除