Cortex-M
文章平均质量分 85
--
刻BITTER
这个作者很懒,什么都没留下…
展开
-
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 · 610 阅读 · 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 · 250 阅读 · 0 评论 -
Windows 下用MSYS2 环境为RP2040 编译MicroPython 固件
就是想试试看MSYS2 能兼容到什么地步。自己做了个RP2040 板子,用了4MB 的Flash,默认的Micropython 固件是2MB 的,所以只能自己编译固件。原创 2024-07-05 06:56:39 · 982 阅读 · 0 评论 -
STM32 实现简单定时任务调度器,动态创建任务,两种思路实现流水灯
代码实现和硬件没关系,所以并不限于STM32,Arduino 之类的其他地方也能用,只要有一个能获取时间的函数就行,或者说,只要有一个会随着时间自动增加的变量就行,时间单位无所谓,所以确实想的话,拿到电脑上也能用。原创 2023-06-06 19:27:45 · 4551 阅读 · 0 评论 -
用C++ 包装STM32 官方固件库 - 链式调用改写初始化结构体
在继续之前,先说明一下,当然,这么包一层肯定会付出一些代价,包括运行时间和空间占用,后面会有编译结果比较。有官方库“珠玉在前”,我觉得相比之下,这层包装付出的代价并不显著,有兴趣可以看看常用的GPIO 初始化函数在固件库里是怎么实现的,可以说是资源浪费的典范[doge]。另一方面,固件库里都是C 函数,函数实现都分开放在.c 文件里,编译器内联的可能性应该不大,因此就算是简单的给引脚设置个电平,用固件库也会产生额外的函数调用,所以很多人是在宏里自己写寄存器操作的。用C++ 的话,这种简单的函数放在头文件里,原创 2023-06-01 21:23:56 · 899 阅读 · 0 评论 -
HK32F030MF4P6 引脚分配辅助表格
也适用于HK32F0301MF4P6。官方的SDK 里附带了一个IO SELECT.xlsx 表格,就是用来辅助做引脚功能分配的,不太好用,因为里面用了复选框控件,兼容性不好。于是基于官方的文件,重新设计了一个表格:功能没区别,只是方便的显示出所有引脚的复用功能,标记出已经分配的引脚,避免冲突。标记功能全是用条件格式做的,兼容性好多了,相对更美观。可以随便调整单元格的大小,不会像复选框控件一样错位。原创 2023-06-01 16:40:30 · 626 阅读 · 0 评论 -
自制Arduino 风格开发板 - HK32F030MF4P6 紧凑开发板
模仿Arduino Nano 做一个HK32F030M 的紧凑开发板,排针间距和Arduino Nano 相同,整体尺寸略小,适合插在面包板上。兼容HK32F030MF4P6 和0301M,板载CH340N 串口和DS1307 时钟模块。。尺寸4.2 X 1.8cm,因为引脚数量更少,本来板子是可以更短一点的,但是没必要。原创 2023-05-29 17:54:32 · 1847 阅读 · 1 评论 -
STM32 编译期检查EXTI 中断函数是否正确定义
检查中断函数的目的是避免被低级错误浪费时间,比如,一开始用PA0 引脚输入中断信号,中断函数写的是,后来引脚换成PA2 了,但是中断函数忘记改。原创 2023-05-10 22:08:24 · 611 阅读 · 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 · 641 阅读 · 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 · 3475 阅读 · 0 评论