历史上的今天
今天是:2025年04月22日(星期二)
2020年04月22日 | STM32L4新版HAL库SDIO(DMA)、FatFs使用教程(四)
2020-04-22 来源:eefocus
添加FreeRtos支持。
FreeRtos中使用FATFS是强制要求使用DMA模式的SDIO驱动。步骤如下:
1、打开工程配置文件,添加FreeRtos支持

2、配置参数
发现configuration选项卡SDMMC1报错,信息如下,意思是中断优先级问题。

打开NVIC配置界面,修改中断优先级,注意,DMA优先级要比SD中断优先级低。

打开FREERTOS选项,如图所示适当配置任务堆栈大小,这里为了测试方便,放到Start Task中测试,正式使用时,不要放在这里,要新建任务。文件操作所在的任务需要适当加大堆栈。

3、生成代码,打开工程,将main函数中的Fatfs_RW_test();语句剪切,粘贴到StartDefaultTask函数(635行附近),/* USER CODE BEGIN 5 */标记后面,如图所示。

4、由于重新生成了代码,bsp_driver_sd.c文件中的BSP_SD_ReadBlocks_DMA和BSP_SD_WriteBlocks_DMA被覆盖掉,需要按照上一节的步骤,加入DMA通道配置函数。
以下段落复制于上一节内容:
然后,打开bsp_driver_sd.c文件,到BSP_SD_ReadBlocks_DMA函数中(186行附近),在
if (HAL_SD_ReadBlocks_DMA(&hsd1, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK)
{
sd_state = MSD_ERROR;
}
上方添加以下代码:
if(SD_DMAConfigRx(&hsd1) != HAL_OK)
{
return MSD_ERROR;
}
在BSP_SD_WriteBlocks_DMA(214行附近),在
if (HAL_SD_WriteBlocks_DMA(&hsd1, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK)
{
sd_state = MSD_ERROR;
}
上方添加以下代码:
if(SD_DMAConfigTx(&hsd1) != HAL_OK)
{
return MSD_ERROR;
}
5、编译测试源码,到此全部教程结束。
史海拾趣
|
创意幽默的 DIESEL 这次将数位电子錶款带入另一个多彩境界,春夏全新推出「颜色DNA」电子錶款系列。此系列玩色十足,藉由 5 种不同的颜色DNA营造出不同的色彩活力,搭配极具前卫设计感的造型錶身,个性帅性。不论是热情生活的红色、尽情自我的蓝色 ...… 查看全部问答> |
|
RFID(RadioFrequencyIdentification,即射频识别)技术是从20世纪80年代走向成熟的一项自动识别技术。本文针对RFID系统产生的安全隐患进行了详细分析并有针对性地总结提出了相关对策。 RFID作为无线应用领域 ...… 查看全部问答> |
|
刚接手别人N年前的一个汇编程序,用AT89C52控制对45AT45D041卡的读写.程序中每次最多只能读32字节,如果要读264字节就要分9次发送读取命令.为什么?是89C52容量有限还是41卡的特性决定的?还有就是用伟福调试时,把电路板上的晶振换大后并且程序也做了修 ...… 查看全部问答> |
|
现在已将串口接收汉字转换为unicode,且可以通过messagebox或edit显示汉字,但为什么使用cfile类进行写入txt文件后,通过word打开文件显示的不是汉字,而是汉字unicode码中每个字节所对应的ascii码呢?我写入的类型是wchar呀?请高手帮助!谢谢!… 查看全部问答> |
|
目的: 公司有项目需外包,寻工作室或个人开发。想了解一下大家信赖哪些外包网站。 问题: 请教eeworld上的高手,你们一般会通过哪些方式接私活?eeworld的外包频道效用如何? 备注:我们公司是开发工具软件的,主要是做 PC 维护方面的工具。 项 ...… 查看全部问答> |
|
为什么LM3S9B96的开发板,就是群星的那款,16M的外部晶振用示波器测试没有波形呢?9B96不是没有内部震荡源吗?程序可以正常下载、调试、运行… 查看全部问答> |




