资讯详情

(实验38)单片机,STM32F4学习笔记,代码讲解【SD卡实验】【正点原子】【原创】

文章目录

  • 其他文章链接,独家吐血整理
  • 实验现象
  • 主程序
  • SD卡驱动程序
  • 代码讲解


其他文章链接,独家吐血整理

(实验3)单片机,STM32F4学习笔记,代码解释按键输入实验正点原子原创 (实验4)单片机,STM32F4学习笔记,代码讲解【串口实验】【正原子】【原创】 (实验5)单片机,STM32F4学习笔记,代码解释外部中断实验正原子原创 (实验6,实验7)单片机,STM32F4学习笔记,代码解释看门狗实验正原子原创 (实验8)单片机,STM32F4学习笔记,代码解释定时器实验正原子原创 (实验9)单片机,STM32F4学习笔记,解释代码【PWM正原子原创 (实验10)单片机,STM32F4学习笔记,代码解释输入捕获实验正原子原创 (实验11)单片机,STM32F4学习笔记,代码解释电容触摸按钮实验正原子原创 (实验12)单片机,STM32F4学习笔记,解释代码【OLED正原子原创 (实验13)单片机,STM32F4学习笔记,解释代码【TFTLCD彩屏显示实验正点原子原创 (实验15)单片机,STM32F4学习笔记,解释代码【RTC实时点原子】【原创】实时时钟实验 (实验17)单片机,STM32F4学习笔记,代码解释待机唤醒实验正原子原创 (实验23)单片机,STM32F4学习笔记,解释代码【DMA正原子原创 (实验25)单片机,STM32F4学习笔记,解释代码【SPI正原子原创 (实验34)单片机,STM32F4学习笔记,解释代码【FLASH模拟EEPROM正原子原创 (实验36)单片机,STM32F4学习笔记,代码解释外部SRAM正原子原创 (实验37)单片机,STM32F4学习笔记,代码解释内存管理实验正原子原创 (实验38)单片机,STM32F4学习笔记,解释代码【SD【正原子】【原创】 (实验39)单片机,STM32F4学习笔记,解释代码【FATFS实验】【正点原子】【原创】 (实验46)单片机,STM32F4学习笔记,解释代码【FPU正原子原创 (实验47)单片机,STM32F4学习笔记,解释代码【DSP-FFT正原子原创 (实验50)单片机,STM32F4学习笔记,代码解释串口IAP正原子原创 (实验50)单片机,STM32F4学习笔记,代码解释串口IAP实验-RTC时钟实验正原子原创 (实验55)单片机,STM32F4学习笔记,代码解释网络通信实验正点原子原创

实验现象

本实验启动时首先初始化SD卡,如果SD完成卡的初始化提示LCD初始化成功KEY0,读取SD卡扇区0的数据,然后通过串口发送到计算机。如果没有初始化,则在LCD提示初始化失败。同样使用DS指示程序正在运行。

主程序

int main(void) { 
                  u8 key;     u32 sd_size;  u8 t=0;   u8 *buf;   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);///设置系统中断优先级分组2  delay_init(168);  //初始化延迟函数  uart_init(115200);  ///初始串口波特率为115200  LED_Init();     //初始化LED    LCD_Init();     //LCD初始化    KEY_Init();     //按键初始化     my_mem_init(SRAMIN);  ////内部内存池的初始化   my_mem_init(SRAMCCM);  //初始化CCM内存池     POINT_COLOR=RED;//设置红色字体   LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");	
	LCD_ShowString(30,70,200,16,16,"SD CARD TEST");	
	LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
	LCD_ShowString(30,110,200,16,16,"2014/5/15");   
	LCD_ShowString(30,130,200,16,16,"KEY0:Read Sector 0");	   
 	while(SD_Init())//检测不到SD卡
	{ 
        
		LCD_ShowString(30,150,200,16,16,"SD Card Error!");
		delay_ms(500);					
		LCD_ShowString(30,150,200,16,16,"Please Check! ");
		delay_ms(500);
		LED0=!LED0;//DS0闪烁
	}
	show_sdcard_info();	//打印SD卡相关信息
 	POINT_COLOR=BLUE;	//设置字体为蓝色 
	//检测SD卡成功 
	LCD_ShowString(30,150,200,16,16,"SD Card OK ");
	LCD_ShowString(30,170,200,16,16,"SD Card Size: MB");
	LCD_ShowNum(30+13*8,170,SDCardInfo.CardCapacity>>20,5,16);//显示SD卡容量
	while(1)
	{ 
        
		key=KEY_Scan(0);
		if(key==KEY0_PRES)//KEY0按下了
		{ 
        
			buf=mymalloc(0,512);		//申请内存
			if(SD_ReadDisk(buf,0,1)==0)	//读取0扇区的内容
			{ 
        
				LCD_ShowString(30,190,200,16,16,"USART1 Sending Data...");
				printf("SECTOR 0 DATA:\r\n");
				for(sd_size=0;sd_size<512;sd_size++)printf("%x ",buf[sd_size]);//打印0扇区数据 
				printf("\r\nDATA ENDED\r\n");
				LCD_ShowString(30,190,200,16,16,"USART1 Send Data Over!");
			}
			myfree(0,buf);//释放内存 
		}
		t++;
		delay_ms(10);
		if(t==20)
		{ 
        
			LED0=!LED0;
			t=0;
		}
	}
}

SD卡驱动程序

直接调用驱动函数即可,故略

代码讲解

//昨天看到SD卡,心情也比较浮躁,没看个所以然,果然今天沉下心,静一静,就明白了大概

//其实SD卡和上节课外扩SRAM一样,都是为了提高单片机存储,用于数据处理啥的 //然后F4自带SDIO驱动=SDIO控制器=SDIO接口,可以支持驱动SD卡,当然SPI也可以是驱动SD卡 //不过本程序使用的是F4自带的SDIO接口,自带了干嘛没事找SPI驱动呢?(众拳用的F1-SPI驱动) //当然了,我相信正点原子F1一定也用了SPI驱动,哈哈哈,SD卡=大卡,tranflash=microSD=小卡

//F4的SDIO驱动支持多种多媒体卡,SD卡就是一类,又三个时钟控制,SD卡时钟,SDIO时钟,APB2时钟 //SD卡刚刚初始化时,SD卡时钟不能超过400khz,否则会异常,都自带CRC校验错误检测 //SDIO控制器与SD卡之间传输,数据以数据块形式传输,MMC卡==数据块或者数据流,本节当然是数据块

//因为SD卡容量很大,所以用到FIFO寄存器(SDIO控制器自带)==连续地址的32个寄存器组成 //16个寄存器为1组,共两组,一组用来发,一组用来接,我们每次读写只读取或写入一组中一半的数据 //

// //INTX_DISABLE();//关闭总中断(POLLING模式,严禁中断打断SDIO读写操作!!!)

标签: sd接电容sd电容器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台