硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1074|回复: 1
收起左侧

关于STM32 SD初始化的一些想法

[复制链接]

7

主题

14

回帖

35

积分

新手上路

积分
35
发表于 2022-12-12 09:58:06 | 显示全部楼层 |阅读模式
这个周末遇到了STM32CubeMX配置STM32F429的SD卡,发生了一些事情,记录一下
1.STM32CubeMX V6.7.0在使用过程中会出现窗口重叠的问题.
..使用的是联想拯救者R7000P,开始猜测是显卡问题,切换了核显 独显,自动选择三种状态,软件窗口叠影BUG没解决,排除显卡问题
..软件BUG?降低版本, 从V67.0一路降低到V6.5.0,使用过程中就没有遇到窗口显示叠影的BUG.现在看是软件的BUG,(有时候版本最新的不一定好用,趟雷是真的累)
2.STM32CubeMX配置SD 生成工程后,编译正常进入到MX_SDIO_SD_Init()的Error_Handler()中,检查代码
..在MX_SDIO_SD_Init中的hsd.Init.BusWide = SDIO_BUS_WIDE_1B;此处要求开始时默认是BUS_WIDE_1B,才不会在后面的判断中进入Error_Handler();
..在CUbeMXV6.7.0中配置的时候如果选择SD 4 bits Wide BUS
image.png
那么MX_SDIO_SD_Init中默认就会将hsd.Init.BusWide初始化为 = SDIO_BUS_WIDE_4B;需要修改为1B,原因如下 具体的要去看
image.png
具体情况请看我和硬汉哥的相关帖子
https://www.armbbs.cn/forum.php?mod=viewthread&tid=116984&page=1#pid270436
注意在低版本的CubeMX,比如V6.5.0,这个位置就不需要修改,初始化就是1B;
****************
还注意到这个hsd.Init.ClockDiv,有要求在传输的时候不超过25MHz,具体的去看SD的技术文档,硬汉哥在上面的帖子里有贴图
3.上面哪些说的没问题之后,可是还是会进去Error_Handler();
为了确信是不是进去了,我在这个函数里面增加了一段点灯代码,可以知道确实是进去了.
[C] 纯文本查看 复制代码
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  HAL_GPIO_WritePin(LED_YG_GPIO_Port,LED_YG_Pin,GPIO_PIN_RESET);
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

最后检查代码么有发现问题,检查硬件设置,我的板子上 在D03 和CMD上没有设计上拉电阻,在IO口的设置中增加PullUP,同时移除SDIO_CK的上拉,测试代码可以跑过,串口输出正常.

总结:以上都是一些细节,对新手来说,确实有必要先看一遍文档,不要求完全理解做到在遇到问题的时候知道在问题的大致原因就行,因为对新手的我来说真的是,一步一跤


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
发表于 2022-12-12 10:14:55 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-11-1 07:10 , Processed in 0.208841 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表