<p>
STM32RET6可以用两种接口操作SD卡:SPI模式和SDIO模式,这个例子采用的是SPI模式。</p><br>
<br><p>
硬件连接:</p><br><p>
SD_CS : PA4</p><br><p>
SD_SCK :PA5</p><br><p>
SD_MISO :PA6</p><br><p>
SD_MOS I :PA7</p><br>
<br><p>
然后说一下SPI的初始化工作。阅读网上的代码,发现STM32 V2的库函数和V3函数中,关于SPI端口初始化的部分还是有些出入的。</p><br><p>
V2库中,把SCK,MOSI,MISO全部设置为复用输出。而V3库中,SCK,MOSI设置为复用输出,而MISO设置为浮动输入。在SD的SPI接口中,SCK,MOSI和MOSI,甚至包括CS都使用了上拉电阻。</p><br><p>
若设定MISO为浮动输入的话,或许会有某些问题,由于SD卡的输出端口驱动能力很弱,很有可能就接收不到返回数据,事实也正是如此。</p><br><p>
所以:</p><strong>MISO必须上拉</strong><p>,上拉10K,剩余的MOSI、SCK、CS可以上拉,规范些。</p><br>
<br><p>
卫生么要用STM32F103RET6?</p><br><p>
STM32F103RET6,512K的Flash,64K的RAM,如果仅仅驱动SD卡,仅仅移植FATFS的话,用不到这么大容量的MCU。</p><br><p>
但是这里的FATFS涉及到</p><strong>简体中文的支持</strong><p>,也就是CC936.c,发现cc936的文件太大了,以下为MDK4.7编译的结果</p><br><p>
Code (inc. data) RO Data RW Data ZI Data Debug Object Name</p><br><p>
180 18 175304 0 0 2125 cc936.o</p><br><p>
大家看到了,一个转换函数的参数,就用到了180K的Flash空间。容量小的MCU就放弃吧。</p>
<br><p>
最后上程序:
</p><ignore_js_op>
<img src="https://www.xiaopingtou.net/data/attach/1912/41oph8tudzadouayh9i8w42mo3gl9ruu.jpg" border="0" class="vm" alt=""> </ignore_js_op><p>链接: https://pan.baidu.com/s/1_r2r7ETE5mzQzqXwsKnBHg 提取码: kurb 复制这段内容后打开百度 {MOD}手机App,操作更方便哦</p><p><br></p>
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4G的,4G的,4G的,4G的,
哦,我现在也在弄,体积大的那种 SD卡读写都没有问题,尺寸小的SD卡 初始化可以,开始几次读写都没有问题,几次之后就无法读写了。
一周热门 更多>