分享一个STM32F103RET6的SPI1接口读写SD卡例子

2019-12-31 19:19发布

<p> STM32RET6可以用两种接口操作SD卡:SPI模式和SDIO模式,这个例子采用的是SPI模式。</p><br> <br><p> 硬件连接:</p><br><p> SD_CS&nbsp; &nbsp;&nbsp; &nbsp;: PA4</p><br><p> SD_SCK&nbsp; &nbsp;&nbsp;&nbsp;:PA5</p><br><p> SD_MISO&nbsp; &nbsp;:PA6</p><br><p> SD_MOS I&nbsp;&nbsp;: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> &nbsp; &nbsp;&nbsp; &nbsp;Code (inc. data)&nbsp; &nbsp;RO Data&nbsp; &nbsp; RW Data&nbsp; &nbsp; ZI Data&nbsp; &nbsp;&nbsp; &nbsp;Debug&nbsp; &nbsp;Object Name</p><br><p> &nbsp; &nbsp;&nbsp; &nbsp; 180&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;18&nbsp; &nbsp;&nbsp;&nbsp;175304&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 0&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 0&nbsp; &nbsp;&nbsp; &nbsp; 2125&nbsp; &nbsp;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="">&nbsp;</ignore_js_op><p>链接:&nbsp;https://pan.baidu.com/s/1_r2r7ETE5mzQzqXwsKnBHg&nbsp;提取码:&nbsp;kurb&nbsp;复制这段内容后打开百度 {MOD}手机App,操作更方便哦</p><p><br></p>
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。