
Cortex-M
文章平均质量分 83
--
刻BITTER
这个作者很懒,什么都没留下…
展开
-
HAL 库设置回调成员函数的一种方法
HAL 库都是拿C 写的,想注册回调函数的话,也只能是C 的函数,不能用成员函数作为回调。此外,放在外面的回调函数没办法直接引用到设备驱动对象,必须有个全局的指针变量,让它指向驱动对象,然后回调函数里再使用这个全局的指针去找对象。有了成员变量的地址,就可以根据成员变量在驱动对象中的偏移量,拿到驱动对象的地址。文件里,以后如果改了配置,只要把Cube 新生成的代码复制过来改一下就好了,我可不想在它生成的代码里照着它规定好的格式填空。所以我用的是另一种比较脏的方法,就是直接修改HAL 库的头文件,在。原创 2025-04-06 14:36:22 · 393 阅读 · 0 评论 -
PY32F002A 20PIN 引脚分配辅助表格
适用于20pin 封装的PY32F002A 单片机,比如TSSOP-20。表格里方便的显示出所有引脚的功能,标记出已经分配的引脚,避免冲突。标记功能全是用条件格式做的,兼容性比较好。下载连接:https://download.youkuaiyun.com/download/Etberzin/90403138,0 积分。压缩包里面包含ods 和xlsx 两种格式的表格。推荐用libre office 打开ods 格式的,excel 也能打开。xlsx 格式是从ods 转换的,丢失了条件格式。原创 2025-02-19 11:33:14 · 253 阅读 · 0 评论 -
掌握FreeRTOS 实时内核 - Mastering the FreeRTOS Real Time Kernel(九至十三章)
十三章全文翻译自:《 Mastering-the-FreeRTOS-Real-Time-Kernel.v1.1.0.pdf 》;内核版本:FreeRTOS V10.6.2;原文 repo:FreeRTOS-Kernel-Book;部分复制粘贴自:Mastering-the-FreeRTOS-Real-Time-Kernel-CN; 本文开源协议:CC BY-SA 4.0;翻译 2025-01-25 09:38:03 · 107 阅读 · 0 评论 -
掌握FreeRTOS 实时内核 - Mastering the FreeRTOS Real Time Kernel(一至八章)
十三章全文翻译自:《 Mastering-the-FreeRTOS-Real-Time-Kernel.v1.1.0.pdf 》;内核版本:FreeRTOS V10.6.2;原文 repo:FreeRTOS-Kernel-Book;部分复制粘贴自:Mastering-the-FreeRTOS-Real-Time-Kernel-CN; 本文开源协议:CC BY-SA 4.0;翻译 2025-01-25 09:16:54 · 265 阅读 · 0 评论 -
STM32F1 LL 库和HAL 库在GPIO 上的区别
F0 和F4 系列GPIO 寄存器把输出模式、速度、上下拉之类的配置都用单独的寄存器实现,而F1 系列是全部塞进CRH 和CRL 寄存器里,各个模式之间相互耦合,某一个寄存器位的含义取决于其他寄存器位的值;STM32F1 的LL 库在GPIO_PIN 定义上用了特别的处理,和HAL 库不一样,不能按HAL 库或标准库的惯例处理。,和GPIO 里ODR,IDR 等寄存器的操作对应,而LL 库把pin mask 左移了八位,然后在低8 位和高8 位附加了其他信息原创 2024-11-08 04:26:43 · 768 阅读 · 0 评论 -
SysTick 校准寄存器-SKEW-TENMS
如果硬件上提供了精确的参考时钟,TENMS 的值对应SysTick 计时10ms 的重装值,如果TENMS 值为0,表示没这个功能。大概就是,有参考时钟的话,硬件可以自动跟参考时钟比较,计算出10ms 对应的重装值。就是“NO无 REF 参考时钟”,如果值是1,表示没有外部参考时钟,SysTick 只能用CPU 核心时钟,或者内部的其他时钟。通常NOREF 值是1,TENMS 是0,SKEW 是1,表示这些校准功能没完全没用。值为1,表示TENMS 寄存器的值不准。原创 2024-10-22 03:12:21 · 333 阅读 · 0 评论 -
Windows 下用MSYS2 环境为RP2040 编译MicroPython 固件
就是想试试看MSYS2 能兼容到什么地步。自己做了个RP2040 板子,用了4MB 的Flash,默认的Micropython 固件是2MB 的,所以只能自己编译固件。原创 2024-07-05 06:56:39 · 1214 阅读 · 0 评论 -
STM32 实现简单定时任务调度器,动态创建任务,两种思路实现流水灯
代码实现和硬件没关系,所以并不限于STM32,Arduino 之类的其他地方也能用,只要有一个能获取时间的函数就行,或者说,只要有一个会随着时间自动增加的变量就行,时间单位无所谓,所以确实想的话,拿到电脑上也能用。原创 2023-06-06 19:27:45 · 5094 阅读 · 0 评论 -
用C++ 包装STM32 官方固件库 - 链式调用改写初始化结构体
在继续之前,先说明一下,当然,这么包一层肯定会付出一些代价,包括运行时间和空间占用,后面会有编译结果比较。有官方库“珠玉在前”,我觉得相比之下,这层包装付出的代价并不显著,有兴趣可以看看常用的GPIO 初始化函数在固件库里是怎么实现的,可以说是资源浪费的典范[doge]。另一方面,固件库里都是C 函数,函数实现都分开放在.c 文件里,编译器内联的可能性应该不大,因此就算是简单的给引脚设置个电平,用固件库也会产生额外的函数调用,所以很多人是在宏里自己写寄存器操作的。用C++ 的话,这种简单的函数放在头文件里,原创 2023-06-01 21:23:56 · 963 阅读 · 0 评论 -
HK32F030MF4P6 引脚分配辅助表格
也适用于HK32F0301MF4P6。官方的SDK 里附带了一个IO SELECT.xlsx 表格,就是用来辅助做引脚功能分配的,不太好用,因为里面用了复选框控件,兼容性不好。于是基于官方的文件,重新设计了一个表格:功能没区别,只是方便的显示出所有引脚的复用功能,标记出已经分配的引脚,避免冲突。标记功能全是用条件格式做的,兼容性好多了,相对更美观。可以随便调整单元格的大小,不会像复选框控件一样错位。原创 2023-06-01 16:40:30 · 744 阅读 · 0 评论 -
自制Arduino 风格开发板 - HK32F030MF4P6 紧凑开发板
模仿Arduino Nano 做一个HK32F030M 的紧凑开发板,排针间距和Arduino Nano 相同,整体尺寸略小,适合插在面包板上。兼容HK32F030MF4P6 和0301M,板载CH340N 串口和DS1307 时钟模块。。尺寸4.2 X 1.8cm,因为引脚数量更少,本来板子是可以更短一点的,但是没必要。原创 2023-05-29 17:54:32 · 2083 阅读 · 1 评论 -
STM32 编译期检查EXTI 中断函数是否正确定义
检查中断函数的目的是避免被低级错误浪费时间,比如,一开始用PA0 引脚输入中断信号,中断函数写的是,后来引脚换成PA2 了,但是中断函数忘记改。原创 2023-05-10 22:08:24 · 643 阅读 · 0 评论 -
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 · 695 阅读 · 0 评论 -
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 · 3859 阅读 · 0 评论