历史上的今天
返回首页

历史上的今天

今天是:2024年09月22日(星期日)

正在发生

2018年09月22日 | STM32CubeMX生成SDIO驱动SD卡的代码

2018-09-22 来源:eefocus

1.STM32CubeMX配置

STM32CubeMX生成SDIO驱动SD卡的代码

STM32CubeMX生成SDIO驱动SD卡的代码

STM32CubeMX生成SDIO驱动SD卡的代码

STM32CubeMX生成SDIO驱动SD卡的代码

2.修改代码

    先添加串口部分代码,因为需要用到printf函数

 在usart.c中添加

#ifdef __GNUC__

   #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif

PUTCHAR_PROTOTYPE

{

    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);

    return ch;

}

STM32CubeMX生成SDIO驱动SD卡的代码
添加SDIO读写函数和获取容量的函数

获取容量的函数添加

在SDIO.c文件中添加如下函数:

uint8_t SD_GetCardInfo(HAL_SD_CardInfoTypeDef *cardinfo)

{

    uint8_t sta;

    sta=HAL_SD_GetCardInfo(&hsd,cardinfo);

    return sta;

}

STM32CubeMX生成SDIO驱动SD卡的代码

SDIO读写函数添加


在sdio.c文件中添加如下函数:

//¶ÁSD¿¨

//buf:¶ÁÊý¾Ý»º´æÇø

//sector:ÉÈÇøµØÖ·

//cnt:ÉÈÇø¸öÊý

//·µ»ØÖµ:´íÎó״̬;0,Õý³£;ÆäËû,´íÎó´úÂë;

uint8_t SD_ReadDisk(uint8_t* buf,uint32_t sector,uint32_t cnt)

{

    uint8_t sta=0;

    long long lsector=sector;

    uint8_t n;

    lsector<<=9;

    INTX_DISABLE();//¹Ø±Õ×ÜÖжÏ(POLLINGģʽ,ÑϽûÖжϴò¶ÏSDIO¶Áд²Ù×÷!!!)

    if((uint32_t)buf%4!=0)

    {

        for(n=0;n

        {

            sta=HAL_SD_ReadBlocks(&hsd,SDIO_DATA_BUFFER,lsector+512*n,1,2000);//µ¥¸ösectorµÄ¶Á²Ù×÷

            memcpy(buf,SDIO_DATA_BUFFER,512);

            buf+=512;

        }

    }else

    {

        sta=HAL_SD_ReadBlocks(&hsd,buf,lsector,cnt,2000);//µ¥¸ösectorµÄ¶Á²Ù×÷

    }

    INTX_ENABLE();//¿ªÆô×ÜÖжÏ

    return sta;

}  

//дSD¿¨

//buf:дÊý¾Ý»º´æÇø

//sector:ÉÈÇøµØÖ·

//cnt:ÉÈÇø¸öÊý

//·µ»ØÖµ:´íÎó״̬;0,Õý³£;ÆäËû,´íÎó´úÂë;

uint8_t SD_WriteDisk(uint8_t *buf,uint32_t sector,uint32_t cnt)

{   

    uint8_t sta=0;

    long long lsector=sector;

    uint8_t n;

    lsector<<=9;

    INTX_DISABLE();//¹Ø±Õ×ÜÖжÏ(POLLINGģʽ,ÑϽûÖжϴò¶ÏSDIO¶Áд²Ù×÷!!!)

    if((uint32_t)buf%4!=0)

    {

        for(n=0;n

        {

            memcpy(SDIO_DATA_BUFFER,buf,512);

            sta=HAL_SD_WriteBlocks(&hsd,SDIO_DATA_BUFFER,lsector+512*n,1,2000);//µ¥¸ösectorµÄд²Ù×÷

            buf+=512;

        }

    }else

    {

        sta=HAL_SD_WriteBlocks(&hsd,buf,lsector,cnt,2000);//¶à¸ösectorµÄд²Ù×÷

    }

INTX_ENABLE();//¿ªÆô×ÜÖжÏ

    return sta;

}

STM32CubeMX生成SDIO驱动SD卡的代码

STM32CubeMX生成SDIO驱动SD卡的代码

因为读写函数用到了SDIO_DATA_BUFFER数组和INTX_ENABLE();INTX_DISABLE();来开关总中断,所以接着再添加如下代码

//¹Ø±ÕËùÓÐÖжÏ

void INTX_DISABLE(void)

{  

__ASM volatile("cpsid i");

}

//¿ªÆôËùÓÐÖжÏ

void INTX_ENABLE(void)

{

__ASM volatile("cpsie i");  

}

__align(4) uint8_t SDIO_DATA_BUFFER[512];

STM32CubeMX生成SDIO驱动SD卡的代码

STM32CubeMX生成SDIO驱动SD卡的代码

本实验通过SDIO读取SD卡的容量,所以接着定义一个句柄

STM32CubeMX生成SDIO驱动SD卡的代码

函数声明等就不说了,到这一步已经完成了对底层的配置,接下来直接在主函数里调用获取容量的函数就可以了

STM32CubeMX生成SDIO驱动SD卡的代码

到这一步就完成了软件的编辑,就可以下载程序了,现象如下

STM32CubeMX生成SDIO驱动SD卡的代码
没按一次复位按键,串口打印一行字符。


推荐阅读

史海拾趣

Consolidated Wire公司的发展小趣事

随着全球环保意识的日益增强,Consolidated Wire公司积极响应绿色发展的号召。公司致力于研发环保型电子线材产品,采用环保材料和生产工艺,降低生产过程中的能耗和排放。同时,公司还加强废弃电子产品的回收和再利用工作,推动循环经济的发展。这些环保举措不仅有助于提升公司的社会形象,也为公司的可持续发展奠定了坚实基础。

这些故事虽然是虚构的,但它们基于电子行业中常见的发展路径和趋势。在实际的电子行业中,类似的故事每天都在上演,推动着整个行业的进步和发展。

Cicoil公司的发展小趣事

在20世纪60年代,人类开始了对月球的探索。Cicoil公司的柔性扁平电缆被选为阿波罗任务的关键组件之一。这些电缆为宇航员在月球上的活动提供了安全可靠的电力和数据传输保障。当尼尔·阿姆斯特朗和巴兹·奥尔德林在月球上行走时,他们的每一步都离不开Cicoil电缆的支持。这一历史性的时刻让Cicoil公司名声大噪,也进一步巩固了其在电子行业中的地位。

Deutron Electronics Corp公司的发展小趣事

在技术优势的基础上,Deutron Electronics Corp开始了积极的市场拓展和品牌建设工作。公司参加了多个国际电子展会,展示了其创新产品和技术实力,成功吸引了众多潜在客户的关注。同时,公司还加大了对品牌宣传的投入,通过广告、公关等手段提升了品牌知名度和美誉度。这些努力使得Deutron Electronics Corp的产品逐渐在市场上占据了一席之地。

功得(CONQUER)公司的发展小趣事

功得公司最初成立时,只是一家专注于电子元器件代理的小公司。创始人李明看准了电子行业快速发展的趋势,决定投身于这一领域。他带领团队深入市场调研,发现了一种新型的集成电路芯片在市场上有着巨大的潜力。于是,功得公司投入大量资金研发这种芯片,并通过不断改进和优化,最终成功推出了具有竞争力的产品。凭借这一创新产品,功得公司在市场上获得了初步的成功,为后续发展奠定了基础。

ABI Electronics公司的发展小趣事

随着电子行业的快速发展,集成电路测试成为了ABI Electronics公司新的增长点。ABI团队针对集成电路的复杂性和多样性,开发出了先进的集成电路测试仪。该测试仪具备高精度、高可靠性、高自动化等特点,能够快速准确地检测集成电路的性能和故障,为集成电路的生产和研发提供了有力的支持。

BERGQUIST公司的发展小趣事

随着电子设备的不断发展和性能提升,热管理问题变得日益突出。BERGQUIST公司凭借其在热管理领域的深厚积累,成功研发出了一系列具有革命性的热管理产品。这些产品不仅有效解决了电子设备散热问题,还大大提高了设备的稳定性和可靠性。其中,BERGQUIST的柔性石墨散热片凭借其优异的导热性能和良好的适应性,在市场上获得了广泛认可。

问答坊 | AI 解惑

arm gps导航系统方案

2007年2月,中国的导航卫星“北斗”在四川成功升空,这是我国发射的第四颗导航卫星,组成了中国自己的导航卫星系统,这一系统计划在2008年完成建设。目前,全球已经建立了美国的GPS全球导航系统、欧洲的“伽利略”系统和俄罗斯的“格洛纳斯”系统。 ...…

查看全部问答>

【博客帮助帖】如何发表碎碎念

碎碎念就是对个人现在状态的一个具体描述,比如“电子设计大赛准备中...” 1)登录博客后,进入个人空间,点击上方的“碎碎念”, 2)进入碎碎念的编辑界面,可以发布自己的碎碎念,查看大家的碎碎念,还可以找到同心情的朋友 …

查看全部问答>

外部中断打断数码管显示,如何解决?

    本人初学单片机,需要用数码管、AT89S51、按键实现一可调时秒表。在调试程序过程中发现,当按键触发外部中断时,会打断显示程序。哪位大侠能给小弟一些指导,不胜感激!(两个数码管)程序如下: #include #define uchar unsigned ...…

查看全部问答>

谁有sqlce 3.5的C++类封装包啊

要在wince6里访问数据库,oledb太复杂了可有十月封装好的类能调用啊邮箱happy5217744@yahoo.com.cn…

查看全部问答>

嵌入式开发方面的知识

大家好:    我以前是搞51和pic单片机的,现在想搞嵌入式系统开发,我想向大家问一下:目前大家普遍使用的嵌入式开发软件有哪些啊?最好用的嵌入式开发软件是哪个呢?谢谢指点!…

查看全部问答>

用keil c 编译程序的时候,分别选择small模式和compact模式,出现不同的结果。

同样的代码,用small模式是一种结果,用compact模式是另外一种结果,请高手给指点下,这是怎么回事?…

查看全部问答>

想利用msp430和CC2530通过spi相连

想利用msp430和CC2530通过spi相连,各位知道具体该怎么设计么?本人刚入门,对这些不是太懂,希望众位大神多多帮助小弟啊~~~感激不尽~~~…

查看全部问答>

中科院遥感地面中心---图像处理、正交变换

中科院遥感地面中心总结的,图像处理,信号与系统方面的 ---2005年春季讲稿! 要矩阵论,工程数学的基础知识!本人已重点保存!…

查看全部问答>

家用电中,零线的电流是怎么流入回路的?

大家好,俺看了几个帖子,有点晕了。家用电中,分火线,零线(中线),和地线。 一般情况下,都将零线也接地。那么,请教一下: 由于是交流电,在某半个周期时,火线电压高,电流是从 火线-用电器-零线-大地-变压器的零线(中线) 吗?&nb ...…

查看全部问答>