矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: iffi123

最近玩的STM32

[复制链接]
     
 楼主| 发表于 2024-3-3 07:58:12 | 显示全部楼层
本帖最后由 iffi123 于 2024-3-3 08:06 编辑
bis 发表于 2024-3-3 00:47
软硬件分割呗。比如软件说置1,给中间代码发,然后中间代码给硬件代码发。

STM32的库,把中间代码给硬 ...


寄存器是软件层面最底层的操作,寄存器编程哪来的中间层?不论标准库,还是hal库还是LL库,最终都是控制外设的寄存器

寄存器编程,干掉所有这些中间过程,直接对寄存器的位操作,最少的函数调用,效率最高

比如要对GPIO管脚设置工作模式,你得分别多次对不同模式设置,输入的调用函数设置一次,通用输出的设置一次,复用的设置一次,很麻烦,寄存器编程可以一条GPIOx->MODER=xxx 把不同的工作模式放在一起,一条命令就搞定,根本无需调用函数

库里的函数都是针对一种操作,如果你要多种不同操作或者不同外设,需要频繁调用函数,而寄存器编程甚至可以几条语句把不同外设的操作放在一起

这里有一张几种开发方式的对比,一目了然,效率秒杀其它几种
不用库开发方式对比.png
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-3-3 08:05:11 | 显示全部楼层
李默 发表于 2024-3-3 00:54
某些算法在STM32内部已经用硬件实现,可以直接调用?

不要自己用寄存器重新实现算法?

看你要方便,还是要效率
回复 支持 反对

使用道具 举报

     
发表于 2024-3-3 13:11:33 | 显示全部楼层
iffi123 发表于 2024-3-3 07:58
寄存器是软件层面最底层的操作,寄存器编程哪来的中间层?不论标准库,还是hal库还是LL库,最终都是控 ...

Cube HAL的设计太糟糕,隐藏了一部分设备相关的复杂性,但又引入了很多设计相关的复杂性。
最终抽象出的东西也只不过是另一套操作寄存器的接口而已。很多时候不了解寄存器,HAL也用不好。
倒是CubeMX的确是降低了STM32的使用门槛。

相比之下,ST的硬件手册很完善,操作寄存器虽然麻烦,但熟练以后,有了文档的加持心中会更有数一些。用HAL很难做到这一点。
不过,很多人做东西只要勉强能跑就万事大吉了,并不追求这个。
用寄存器最大的问题是,寄存器的很多操作缺乏业务上的逻辑性。
比如你所说的,初始化操作可以合并完成。
在性能上这是优势,但在设计上这样做会使代码的逻辑性变差。
时间稍长就你自己都会忘记这段代码的逻辑。
这样的代码维护起来会比较恼火,容易引入BUG
回复 支持 反对

使用道具 举报

     
发表于 2024-3-3 17:01:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2024-3-3 17:49:42 | 显示全部楼层
iffi123 发表于 2024-3-3 08:05
看你要方便,还是要效率

你说的是运行效率,还是开发效率?
回复 支持 反对

使用道具 举报

     
发表于 2024-3-3 17:53:12 来自手机 | 显示全部楼层
iffi123 发表于 2024-3-3 07:58
寄存器是软件层面最底层的操作,寄存器编程哪来的中间层?不论标准库,还是hal库还是LL库,最终都是控 ...

这是debug O0下的数据还是Os的数据
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-3-3 19:32:17 | 显示全部楼层
本帖最后由 iffi123 于 2024-3-3 19:35 编辑
scu319hy 发表于 2024-3-3 13:11
Cube HAL的设计太糟糕,隐藏了一部分设备相关的复杂性,但又引入了很多设计相关的复杂性。
最终抽象出的 ...


说的没错,HAL设计的初衷是好的,统一接口,但因为stm32产品线很多,同样的外设,比如GPIO,不同系列寄存器也不尽相同,F1系列的模式设置(MODER寄存器)和其它系列差别很大,F1还有1个端口置0的寄存器BRR,在其它系列也取消了,统一在BSRR里置1置0,F1系列估计出的早,和后面出的就不一样,所以我现在尽量不碰F1

当然,现在还在用寄存器编程的很少,甚至用标准库的都不多(F7起就没有标准库),估计大多用cube mx编程,不过我因为喜欢玩一些负荷重一些,或者实时性要求高一些的,需要效率的diy(比如多中断多DMA一起跑), 所以直接用寄存器更合适,效率和方便本来就有矛盾,只能看自己侧重哪一方面

移植肯定比较麻烦,通常在关键点上我会做比较详细的备注,即使一段时间不用,回头看看备注也会很快想起来
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-3-3 19:39:39 | 显示全部楼层
本帖最后由 iffi123 于 2024-3-3 19:46 编辑
aidn 发表于 2024-3-3 17:53
这是debug O0下的数据还是Os的数据


这张表是ST提供的,我忘记是哪个文档里,当时看过,网上有人把它翻成中文
回复 支持 反对

使用道具 举报

     
发表于 2024-3-4 12:18:42 | 显示全部楼层
iffi123 发表于 2024-3-3 19:32
说的没错,HAL设计的初衷是好的,统一接口,但因为stm32产品线很多,同样的外设,比如GPIO,不同系列寄 ...

嵌入式芯片厂家的软件能力普遍很差。ST已经算是比较强的了,但它自己发布的HAL库还是会有各种非常低级的错误。
比如:函数定义/声明类型不匹配,块注释没有关闭...最近已经给它改了好几处了
真是让人一言难尽。国内厂家更是如此
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-3-5 19:04:18 | 显示全部楼层
本帖最后由 iffi123 于 2024-3-5 19:06 编辑

昨晚把根目录的文件显示出来(文件大小,时长这些还没加到列表),拷入90多个,全部识别,没多也没少,并能选曲播放,
子目录显示目前还没写,文件名里的问号,是中文文件名,无法显示用问号代替,
当初设计电路没把字库加进去,无法显示中文文件名(当然菜单可以搞成中文以后弄)
未标题-1.jpg
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-4-7 21:24:46 | 显示全部楼层
本帖最后由 iffi123 于 2024-4-7 21:37 编辑

一晃一个月过去了,哈,不过我也没闲着,这次没有烂尾,一点点往前做,今天已经实现基本功能,开始只是实现16bit/44.1K,后面陆续添加了24bit/96K, 直至最大潜力的24bit/192K, 因为STM32 I2S最大支持到192K采样率,不论位数增加还是采样率增加,都给数据处理带来新的问题,相比之下16bit/44.1K最容易实现

支持中文长文件名,不限层数目录结构,显示还有点小bug未处理
1.jpg

2.jpg

原视频删除了(开始不知道可以编辑替换就不用删了),重新上传新视频, 手机录制,效果无法完整体现,用耳机听就很好
https://www.bilibili.com/video/BV1Lt421L7kT/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-26 08:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表