
虽然STM32F429IDISCOVERY自带有USB OTG功能,不过对于我这个还没接触过USB 通信的人来说目前是玩不起来了,还是打算玩比较 : ?" M. w6 n, A8 @ 熟悉的SD卡吧,但板子上没有SD卡座,感觉太可惜了,板子反面OTG接口的旁边明明有那么一块空白区域刚好放得下MicroSD卡座, , Z( m. x# K, n: L" n1 I 但ST却为了节省这点成本没加上去。查看了一下板子的原理图,发现STM32F429大部分引脚基本跟STM32F103系列的兼容,SDIO的几& f1 C1 Y3 s9 p6 _ 3 E. J: b3 Y% ~, P/ r( q 个相关引脚也在OTG接口附近(PC8~12, PD2),而且也没跟别的芯片复用,看来添加起来应该比较容易。拆了很早之前的一个MP42 S$ h. R$ [7 R ,把sd卡相关的部分切割下来,做成了一个SD卡模块,然后想这个模块该怎么跟开发板组合起来。起初是想做个底板,把开发板上1 k `9 p: s( O2 E9 T 的所有引脚引到底板上,然后在底板布线安置模块,后来底板也用万用板做好了,但还是放弃了,原因是底板和开发板插接好后很 难再分在,而且本来一块轻便的板子弄的很笨重,再后来一想,SD卡本来就是个常用的外设,干脆就粘在开发板上了。废话了这么/ c; p8 i: J: B+ S4 D 多,下面是正题,完成之后的效果(美观什么的就不要吐槽了,能用就行-_-):& q% N4 C- z; Y" }+ w0 a! B ![]() ![]() Y7 P0 b4 F2 q/ e2 M% b4 q 硬件完成好后,直接把STM32F4Discovery上的SD卡驱动拿过来了(主要两个文件:stm32f4xx_sdio_sd.c, stm32f4xx_sdio.c, 一- B( o! D+ m- P" O# y % y6 k: T$ B8 U' S, U3 _8 D0 }4 H 个是SDIO外设驱动,一个是基于SDIO驱动的SD卡读写驱动,貌似我改过文件名。。),然后加上软件包自带的FatFs,把这些添加 到软件包里Projects\Peripheral_Examples\FMC_SDRAM这个工程下,注释掉main函数里无关的东西,加上fmount()和fread()再调 用软件包里自带的LCD驱动函数LCD_WriteBMP()来读取SD卡里的图片并显示(当然LCD要先初始化的),完成这些就开始调试了。至4 _( _8 c7 c) o. }# p 于为什么要选FMC_SDRAM这个工程,因为这个工程包含了我要用到的LCD驱动、SDRAM相关驱动,同时也没有多余的东西。调试时发 3 J: r: q% @6 I. l' w& z2 ^ 现SD卡底层初始化可以通过,但读数据出问题,导致最后的初始化通不过,通过反复调试发现sd卡读出的第一扇区数据跟电脑上读* ]/ q6 I0 x/ T6 k/ s5 r 出的不一样,但单步调试却又正常。对比STM32F4Discovery例程,发现SD卡用到的SDIO_IRQHandler和SD_SDIO_DMA_IRQHANDLER(" O! }8 k1 T+ d; k9 S; F 2 \( L U, v4 } 宏定义,实际为DMA2_Stream3_IRQHandler)没有添加,这两个中断会分别调用SD_ProcessIRQSrc()和SD_ProcessDMAIRQ()来处理 1 _ K/ O" j* ~6 { SD卡相关中断事件,上述问题的出现应该是在全速运行时SD卡数据的DMA还没传输完成便被后面的程序拿去处理,当然会出错,但0 X4 H2 H( k6 I3 u* Z 单步运行时足够DMA传输,数据完全读出因此没有问题。参照STM32F4Discovery例程在stm32f4xx_it.c中添加这两个中断处理函数 1 C7 H$ u* z9 A+ g3 u7 {. B) R 后问题顺利解决。图片显示出来后稍微修改了一下,在SD卡里按名称递增方式放了500多张从视屏里截取的连续图片,然后单片机. Q& `0 \2 A( W 依次循环读取图片显示,形成一个动画的效果,以下是测试效果(由于实际帧速率太高,而受制于gif图片帧速率和文件大小的限 # q3 e9 O1 Y3 j! l4 @ 制,预览图里的效果仅供参考,实际效果更流畅):1 Z+ |8 Y9 j. E ![]() ![]() ![]() * K; ^0 M' C! q" ~1 i 没什么技术含量的东西,仅供娱乐。有兴趣的也可以自行添加,方便开发。: y0 y6 d' I! D; r' {. X (图片硬是显示不出来。。。) |
RE:[STM32F429IDISCOVERY]给开发板加装SD卡
RE:[STM32F429IDISCOVERY]给开发板加装SD卡
回复:[STM32F429IDISCOVERY]给开发板加装SD卡
兄台,PC10接的lcd的R2哦
' h* Q; y7 [0 C% A& J
还真是,我看走眼了,不过确实是能用的,可能是因为没有涉及多任务,SD卡读写和LCD显示是分时复用PC10的所以没有问题,如果加上RTOS多任务调用LCD显示和SD卡读写估计会出问题。谢谢提醒
回复:[STM32F429IDISCOVERY]给开发板加装SD卡
兄台,PC10接的lcd的R2哦
+ ?# P6 w1 j) V7 H) ^9 }- K8 a
另外之后我也试过往官方的Demo的图片浏览小程序里加入从SD卡读取功能,确实也出了问题,SD卡初始化以及获取文件名都没问题,但图片就是不能从SD卡读出来显示,同时退出这个小应用之后再进去就显示找不到文件了,之前没空研究就放下了,现在看来可能就是这引起的问题。如果有人也打算这样做的话这个问题需要注意啊。
回复:[STM32F429IDISCOVERY]给开发板加装SD卡
佩服,你还真下的去手,我可舍不得
% {) w* i4 M% X% w- Q
其实添加这个,开发板本身不需要做任何改动,就跟杜邦线连一样的效果,只不过我是焊上去的线而已,线是用的变压器里的那种漆包线,表面绝缘的,不存在短路问题,卡座也是用那种泡沫双面胶粘上去的可以很容易拆下来(其实也没必要拆下来,担心有影响的话取下SD卡就行了,焊接了连线的那几个脚照样还是可以接其他外设,只是加了一个上拉电阻而已)。重在动手嘛
RE:[STM32F429IDISCOVERY]给开发板加装SD卡