这是本文档旧的修订版!
银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
技术论坛 | http://www.eeschool.org | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-11-19 | gingko | 初次建立 |
1.在主界面选择File–>New Project或者直接点击ACCEE TO MCU SELECTOR 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置在搜索栏的下面,提供的各 种查找方式,可以选择芯片内核,型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32FIGHx。 3.配置RCC,使用外部时钟源 4.Debug选择Serial Wire,时基源选择SysTick 5.将PI3,PI4,PH14设置为GPIO_Output 6.引脚模式配置 7.设置串口 8.在NVIC Settings一栏使能接收中断 9.配置SDIO 10.配置FATFS 11.时钟源设置,选择外部高速时钟源,配置为最大主频 12.工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可IDE我们使用的是MDK V5.27 13.点击Code Generator,进行进一步配置
常见的文件系统:
1.主函数
int main(void) { int i,j; static FRESULT res; unsigned char write_buffer[512]; //写文件缓冲区 unsigned char read_buffer[512]; //读文件缓冲区 unsigned int counter; HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SDIO_SD_Init(); MX_USART1_UART_Init(); MX_FATFS_Init(); usart1.initialize(115200); //串口波特设置 usart1.printf("\x0c"); //清屏 usart1.printf("\033[1;32;40m"); //设置终端字体为绿色 usart1.printf("Hello,I am iCore3L!\r\n\r\n");//串口信息输出 res = f_mount(&fatfs,"0:",1); if(res != RES_OK) { usart1.printf("f_mount error!\r\n"); while(1) { LED_RED_ON; HAL_Delay(500); LED_RED_OFF; HAL_Delay(500); } } else { usart1.printf("f_mount successful!\r\n"); } //打开源文件 res = f_open(&file,"0:/SD卡测试.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS); //打开驱动器0上的源文件 if(res != RES_OK) { usart1.printf("f_open error!\r\n"); while(1) { HAL_Delay(500); LED_RED_ON; HAL_Delay(500); LED_RED_OFF; } } else { usart1.printf("f_open successful!\r\n"); } //移动写指针到文件首 res = f_lseek(&file,0); if(res != RES_OK) { usart1.printf("f_lseek error!\r\n"); while(1) { HAL_Delay(500); LED_RED_ON; HAL_Delay(500); LED_RED_OFF; } } else { usart1.printf("f_lseek successful!\r\n"); } for(i = 0;i < 512;i++) { write_buffer[i] = i % 256; } //向文件写数据 res = f_write(&file,write_buffer,512,&counter); //将缓冲器中的内容写入源文件 if(res != RES_OK || counter != 512) { usart1.printf("f_write error!\r\n"); while(1) { HAL_Delay(500); LED_RED_ON; HAL_Delay(500); LED_RED_OFF; } } else { usart1.printf("f_write successful!\r\n"); } //移动读指针到文件首 res = f_lseek(&file,0); if(res != RES_OK) { usart1.printf("f_lseek error!\r\n"); while(1) { HAL_Delay(500); LED_RED_ON; HAL_Delay(500); LED_RED_OFF; } } else { usart1.printf("f_lseek successful!\r\n"); } //读文件数据 res = f_read(&file,read_buffer,512,&counter); if(res != RES_OK || counter != 512) { usart1.printf("f_read error!\r\n"); while(1) { HAL_Delay(500); LED_RED_ON; HAL_Delay(500); LED_RED_OFF; } } else { usart1.printf("f_read successful!\r\n"); } f_close(&file); //打印读取到的数据 usart1.printf("read data:\r\n"); for(i = 0;i < 32;i++) { for(j = 0; j < 16; j ++) usart1.printf(" %02X",read_buffer[i*16+j]); usart1.printf("\r\n"); } LED_RED_ON; while (1) { } }