1.STM32CubeMX配置
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;
}
添加SDIO读写函数和获取容量的函数
获取容量的函数添加
在SDIO.c文件中添加如下函数:
uint8_t SD_GetCardInfo(HAL_SD_CardInfoTypeDef *cardinfo)
{
uint8_t sta;
sta=HAL_SD_GetCardInfo(&hsd,cardinfo);
return sta;
}
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;
}
因为读写函数用到了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];
本实验通过SDIO读取SD卡的容量,所以接着定义一个句柄
函数声明等就不说了,到这一步已经完成了对底层的配置,接下来直接在主函数里调用获取容量的函数就可以了
到这一步就完成了软件的编辑,就可以下载程序了,现象如下
没按一次复位按键,串口打印一行字符。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』