最近玩的STM32
本帖最后由 iffi123 于 2024-3-2 21:28 编辑板子是去年打的,做了一半就搁置了
前段时间重新拾起来,最近有空时就写些代码,完善功能或者优化结构,还挺顺利
就是一个普通的播放器,我不是追求什么hifi,只求能正常发声并控制,主要目的是学习,音质确实很好,这几天下班回家就开起来听,自己做的听起来感觉有点不一样。:)
最早用的电阻触摸TN屏,调通后感觉比较不好用,比如需要校准,然后买了一块同大小的IPS电容屏,相比之下,比之前TN好太多,色彩扎实可视角度大,当初不了解看便宜就买了TN屏真是坑
不得不说,电容触摸真的好太多了
不过巧的是,最近买的IPS屏,排针接口和之前的TN一样,连信号线的顺序都一样(不同生产厂家),太好了,我直接插上就可以,不用重新打板:lol
再回到板子上,电路上,用si5351生成STM32需要的时钟和DAC的时钟,输出用了一片音频接口芯片,可驱动耳机和喇叭,也支持线路输入,话筒输入
再说说软件,所有的底层驱动都是自己写的,没有参考任何现成代码,保持程序的一致性
电容触摸是走I2C,所以比较简单,不过,只要触摸没释放,就会一直产生中断,需要软件加以处理,以免出错; si5351设置也是走I2C, 官方有个工具可以算参数
液晶屏走SPI,按照手册的时序和指令操作,就没什么说的,不过这2块屏,虽然都是ILI9341,不过好像分别是9341和9341V, 初始化序列不同,我直接换上新屏,能显示,颜色全乱不正确,重新用厂家给的序列,就正常,
稍麻烦的是TF驱动,因为不想用别人的代码,所以我下载了一个SD3.0规范原文(除了H7系列之外好像支持2.0),重点研究识别过程(card identifilication),发现网上的信息有很多不正确,1.1和2.0操作混淆,规范写的最准确,严格按其流程操作就可以,
因为SDIO读写数据需要操作DMA, 所以稍微麻烦点,中间碰到一个乌龙,当初在1位模式调试通过,单块多块读写都成功,但是4位模式始终不成功,后来接示波器发现TF插座和CPU的SDIO引脚存在虚焊,汗,居然还有这种常识错误:L 浪费了我多少时间,一直怀疑软件写的有误,重焊后一次成功, 4位模式+48MHz时钟最高支持到24MB/s读写,可以说一般的应用绰绰有余
然后实验了FFT, 作为音乐的频谱显示,我设计了3种风格的谱线,一种是原始的柱状显示,还有平滑柱状,最后是包络空心风格(这好像比较流行的),如图,不过UI界面还没优化,简单示意一下
并且实践了状态机的程序结构,用起来优点多多,之前就听说,这次得以一试:victory:
最后一个麻烦点的是FAT32的支持,我也坚持自己写驱动,这个还没全部完成,目前可以顺利读取卡里的音乐文件播放,参考FAT32的原理,只要根据簇号定位存放的扇区,并在FAT表查找下一个簇号,链式结构一个个串起来,实现起来并不复杂
一个板子可以学习不少东西,还是挺值得
视频链接
本帖最后由 iffi123 于 2024-3-2 20:46 编辑
bis 发表于 2024-3-2 20:39
玩儿底层的纯属神志不清,peripheral register太多太复杂,学了做个项目完了就完了,没有后续建设性经验。
我现在写的程序,以后都可以用到的,每个功能一个模块,下次拿出来简单改改端口或配置之类就可以
比如LCD驱动,其实不是这次写的,是玩上一块板子写的,因为主控型号一样,这次拿出来改一下SPI设置就可以用,如果下次板子还有TF卡,一样可以用到这次的代码 现在扎实学东西的人太少了,都挣快钱去了。
我最近因工作需要,又开始学习Excel。整天头晕脑胀的。年龄不饶人了 干得漂亮~~
强烈邀请你使用我的编辑器来开发,帮我测试/提建议。能脚踏实地干事的人,提出的建议会更有实用价值:lol
https://www.ed-x.cn/manual.html 玩底层,学到的都是妥妥的干货! 音频数据用的是wav/raw,还是上mp3软解码了? t3486784401 发表于 2024-3-2 21:13
音频数据用的是wav/raw,还是上mp3软解码了?
目前是wav, 因为最简单,没问题了以后才再试mp3 iffi123 发表于 2024-3-2 21:15
目前是wav, 因为最简单,没问题了以后才再试mp3
嗯的确是好思路。
mp3单单解码就够折腾一阵子了 板子用什么软件画的? t3486784401 发表于 2024-3-2 21:43
嗯的确是好思路。
mp3单单解码就够折腾一阵子了
解码算法么? bis 发表于 2024-3-2 20:39
玩儿底层的纯属神志不清,peripheral register太多太复杂,学了做个项目完了就完了,没有后续建设性经验。
怎么才能有后续建设性经验? bis 发表于 2024-3-3 00:47
软硬件分割呗。比如软件说置1,给中间代码发,然后中间代码给硬件代码发。
STM32的库,把中间代码给硬 ...
某些算法在STM32内部已经用硬件实现,可以直接调用?
不要自己用寄存器重新实现算法?
页:
[1]
2