1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > (实验38)单片机 STM32F4学习笔记 代码讲解【SD卡实验】【正点原子】【原创】

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

时间:2022-01-28 07:28:44

相关推荐

(实验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上提示初始化失败。同样用DS0来指示程序正在运行。

主程序

int main(void){u8 key; u32 sd_size;u8 t=0;u8 *buf;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168); //初始化延时函数uart_init(115200);//初始化串口波特率为115200LED_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,"/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组,共两组,一组用来发,一组用来接,我们每次读写只读取或写入一组中一半的数据

//必须是以4字节对齐的内存进行操作

//读写FIFO时,严禁任何中断打断,所以使用了一个函数来关闭所有中断==总中断

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。