STM32使用STM32CUBEMX配置FreeRTOS+SDIO4bit+FATFS注意事项

news2024/9/20 16:24:33

一、使用STM32CUBEMX配置FreeRTOS+SDIO4bit+FATFS注意事项:

以STM32F429为例:
1、SDIO配置
在这里插入图片描述
配置为4bit模式,此配置不是最终配置,后面会在代码进行修改。
2、Fatfs配置
在这里插入图片描述
Set Defines 选项中的配置可以默认,最重要注意Advanced Setting 选择中的配置,如下
在这里插入图片描述
该界面配置默认Use dma template是默认使能的 ,并且不可以选择,只能选择使能,所以需要使能 SDIO中断和SDIO DMA(注意:如果不使能可能会出现问题),如下图所示:
在这里插入图片描述
在这里插入图片描述
在使能中断之后,注意 SDIO global 中断要小于或者等于SDIO DMA的中断,否则会出现问题
3、FreeRTOS配置
FreeRTOS配置默认即可
在这里插入图片描述
配置完成记得把启动文件的堆栈改大一点,如下:
在这里插入图片描述
生成代码即可

二、生成代码修改:

找到sdio.c文件中的void MX_SDIO_SD_Init(void)函数,修改如下:

void MX_SDIO_SD_Init(void)
{

  /* USER CODE BEGIN SDIO_Init 0 */

  /* USER CODE END SDIO_Init 0 */

  /* USER CODE BEGIN SDIO_Init 1 */

  /* USER CODE END SDIO_Init 1 */
  hsd.Instance = SDIO;
  hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
  hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
  hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
  hsd.Init.BusWide = SDIO_BUS_WIDE_4B;
  hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
  hsd.Init.ClockDiv = 4;
  /* USER CODE BEGIN SDIO_Init 2 */
	//初始化时使用1bit + SDIO_INIT_CLK_DIV初始化时钟频率
	hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
	hsd.Init.ClockDiv = SDIO_INIT_CLK_DIV;//SDIO_TRANSFER_CLK_DIV;
  /* USER CODE END SDIO_Init 2 */

}

在这里插入图片描述
经过实际测试,使用最大频率也是可以的,但是初始化时使用1bit+SDIO_INIT_CLK_DIV 初始化时钟频率,防止不必要的错误

在生成的bsp_driver_sd.c文件中找到__weak uint8_t BSP_SD_Init(void)函数,该函数是一个弱函数,可在其他文件复写,如下:

uint8_t BSP_SD_Init(void)
{
  uint8_t sd_state = MSD_OK;
  /* Check if the SD card is plugged in the slot */
  if (BSP_SD_IsDetected() != SD_PRESENT)
  {
    return MSD_ERROR;
  }
  /* HAL SD initialization */
  sd_state = HAL_SD_Init(&hsd);
  
  /* Configure SD Bus width (4 bits mode selected) */
  if (sd_state == MSD_OK)
  {
	hsd.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV;//改为最大传输频率
    /* Enable wide operation */
    if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)
    {
      sd_state = MSD_ERROR;
    }
  }

  return sd_state;
}

由于使用的SD卡支持改频率,所以我采用SDIO_TRANSFER_CLK_DIV最大频率,这里分频根据不同的SD卡可做调整。
在这里插入图片描述
我这里是在main.c复写的。

进行实际读写测试:
在这里插入图片描述
调试发现能够正常读写,本次分享到此结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/691146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git配置和git合并

git配置: 首先下载安装git:https://git-scm.com/downloads/ 一路默认,安装完成后,打开文件夹C:\Users\Administrator\.ssh(Administrator是当前用户名),在空白处点鼠标右键选择“Git Bush Her…

资源分享开发系统

资源分享系统-开放 提示:开源是学习的来源,分享是进步的体现 近期,使用springboot结合layui写了一个技术管理系统,其实最主要是做一些资源的分享,可便捷生活和学习,包括免费听音乐的网站,免费…

和鲸助力中国大学生计算机设计大赛国赛作品评审标准落实研讨会召开,专家平台首发布

6月16日至19日,中国大学生计算机设计大赛国赛作品评审标准落实研讨会(第一期)在天津召开,本次会议由中国大学生计算机设计大赛组委会主办,南开大学承办,和鲸社区参与协办。 会议由中国人民大学杜小勇教授、…

GPIO模拟时序控制外设1——WS2812B

文章目录 前言WS2812B1.模块简介2.时序介绍3.硬件介绍4.传输速率,以及帧数要求 代码1.初始化2.模拟时序1.复位函数2.发送0、1码3.封装发送函数 总结 前言 上一篇文章中介绍了整个板子的最基本功能模块——使用GPIO的通用输入输出实现简单的按键输入以及推挽输出控制…

【若依分离版操作方法日志与其它业务数据(如入库操作)关联的实现】

若依框架业务表和操作日志表关联 需求:分析:思路:实现: 需求: 基于若依分离版框架业务数据与操作日志的数据做个关联 入库表 /*入库业务表 */ CREATE TABLE [BS_In]( [Id] int IDENTITY(1,1)…

【MySQL 主从复制与读写分离】

目录 一、MySQL主从复制1.1、主从复制架构和原理1.2、MySQL的扩展1.2.1、什么是读写分离1. 读写分离的基本原理2. MySQL 读写分离原理 1.2.2、为什么要读写分离1.2.3、什么时候要读写分离1.2.4、主从复制与读写分离1.2.5、mysql支持的复制类型 1.3、复制的共用1.4、复制架构1.5…

2023年下半年北京/上海/深圳NPDP产品经理认证招生

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

java学习记录之DBUtils

1 jdbc回顾 1.1 批处理  Statement 执行多条sql addBatch(sql) clearBatch() int[] executeBatch()  PreparedStatement 执行一条sql语句,多组参数 addBatch() 执行之前必须设置实际参数 psmt.setXxxx() clearBatch() executeBatch() 1.2 事务  事务&…

SpringBoot 整合redis + Aop防止重复提交 (简易)

1.redis的安装 redis下载 解压 安装 # wget http://download.redis.io/releases/redis-6.0.8.tar.gz # tar xzf redis-6.0.8.tar.gz # cd redis-6.0.8 # make 看一下就会有 进入redis-6.0.8下的src目录 [rootVM-16-8-centos redis]# cd redis-6.0.8 [rootVM-16-8-centos re…

【Java】Java 中的引用类型

本文仅供学习参考! Java是一种类型化语言,这本质上意味着声明的每个变量都有与之关联的特定类型。此类型确定它可以存储的值。例如,整数类型可以存储非小数。也称为数据类型,这可以大致分为两类:基元和引用。基元类型是…

华为云GaussDB,能否成为数据库国产化替代的“更优选择”?

没有一个行业比数据库更需要长期主义,而在践行长期主义的道路上,国内数据库厂商中华为是不可忽视的存在。 近日,Gartner Peer Insights《Voice of the Customer for Cloud Database Management Systems,2023》报告发布&#xff0…

使用python unittest从零构建web应用的自动化测试用例

文章目录 必要性使用pycharm搭建unittest框架selenium下载web driverweb driver的基本使用driver 定位元素driver使用事件处理下拉框处理复选框 sshftp数据库sqlserveroracle安装使用 mongodb excelpycurl 必要性 大部分团队起始对于要不要投入资源进行UI自动化测试的开发都是…

泰裤辣!Corona 10强势来袭,蓝海创意云同步更新支持

2023年6月22日,Chaos Corona官网发布了Chaos Corona 10 for 3ds Max and Cinema 4D版本。本次不仅更新了新功能,还优化了渲染卡顿的问题,一起来看看有哪些实用的好玩意吧! 1.贴花影响特定通道 CR10在你的场景中焕然一新&#xff…

Git报错: Please move or remove them before you switch branches.

Bug记录:在我写需求的时候,产品说上个包有崩溃,于是我就控制台 git checkout切分支,结果报错Please move or remove them before you switch branches.下面是被改动的文件,因为是项目build的时候产生的临时文件&#x…

在虚幻引擎中创建大气的HIMIL电影作品

今天瑞云渲染小编给大家带来了关于电影制片人Tiziano Fioriti展示了《H I M I L》项目背后的工作流程,解释了人工智能是如何用于细节的,并谈到了设置火光的问题。 介绍 大家好,我叫Tiziano Fioriti,是来自意大利的自由电影制作人…

RabbitMQ管理界面介绍

1.管理界面概览 connections: 无论生产者还是消费者,都需要与RabbitMQ建立连接后才可以完成消息的生产和消费,在这里可以查看连接情况 channels: 通道,建立连接后,会形成通道,消息的投递获取依…

高阶常系数微分方程——笔记整理

首先,介绍基本知识: 首先,我们对式子进行处理得到: 得到特征根是 和 0, 所以其通解 假设特解是,带入方程所得:

Nik Color Efex 滤镜库

Nik Color Efex 滤镜库中提供了 55 个滤镜。有关这些滤镜的详细参数说明请分别参阅: 1 ~ 11 《Nik Color Efex 滤镜详解(1/5)》 12 ~ 22 《Nik Color Efex 滤镜详解(2/5)》 23 ~ 33 《Nik Color Efex 滤镜详解&#x…

2023年java还是golang还是c#?

前言 我们可以先来看一下这三门语言各自的优劣 学习曲线:如果你是初学者或对编程相对陌生,Java可能是一个较好的选择。它有广泛的学习资源和社区支持,易于上手。Go也有简单易学的特点,但由于相对较年轻,相关的学习资…

为何收入或存款增量难找存量告急

其实,和年纪关系不太大吧,平凡的普通人都没多少存款。 *近日,有调查称“大概五分之一的年轻人存款在一万元以内。10万元存款是一个“坎”,存款超过10万就会超过53.7%的人。”“年轻人”“存款”两个词碰撞在一起,引来了…