STM32-HAL-SDIO-(sd卡的識別,整理后的版本)

1STM32Cube操作

1-1配置時鐘

1-2配置調試端口

1-3配置uart

1-4配置SDIO

選擇數據傳輸引腳個數

需改配置(圖中改了兩處,選中的和最后一個)

1-5打開DMA

傳輸方向改為圖中的(由內轉向外設)在改圖中的一次讀寫的大小

1-6再打開sdio的中斷

1-7生成代碼(注意)

重點圖中其他配置和平常一樣但庫的選擇選v1.8.3(我用1.8.5時有問題生成的代碼檢測到卡時程序就卡死了。有懂得大佬可以在評論區中講解一下嗎)

2代碼編寫

2-1修改代碼

選擇次函數跳到函數調用的地方

2-2注釋代碼

圖中標志的地方注釋它

(當初始化時,檢測不到sd卡時會進入此函數,此函數是一個無限制的死循環)

上面的函數下方還有一個

注意

有些的版本過低(軟件版本)可能會出現(SDIO_BUS_WIDE_1B)是(SDIO_BUS_WIDE_4B)的情況改為(SDIO_BUS_WIDE_1B)即可但如果你是使用寬度為4比特的話不用改

2-3添加代碼使其檢測SD卡

(添加進main函數的while循環中)

2-4main.c源碼

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "dma.h"
#include "sdio.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_SDIO_SD_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){if(HAL_SD_Init(&hsd)==HAL_OK){//判斷是否插入SD卡HAL_UART_Transmit(&huart1,(uint8_t*)"SD卡已插入",11,50);}else{HAL_UART_Transmit(&huart1,(uint8_t*)"SD卡未插入,請插入SD卡",22,50);}HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
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();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

本人還寫了一篇具體各個詳細意思的想了解的可以進入主頁查看

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41689.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41689.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41689.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖像處理調試軟件推薦

對于圖像處理的調試,使用具有圖形用戶界面(GUI)且支持實時調整和預覽的圖像處理軟件,可以大大提高工作效率。以下是幾款常用且功能強大的圖像處理調試軟件推薦: ImageJ/FijiMATLABOpenCV with GUI LibrariesNI Vision …

Java中關于構造代碼塊和靜態代碼塊的解析

構造代碼塊 特點:優先于構造方法執行,每new一次,就會執行一次 public class Person {public Person(){System.out.println("我是無參構造方法");}{System.out.println("我是構造代碼塊"); //構造代碼塊} }public class Test {public stati…

面試專區|【54道Spring Cloud高頻題整理(附答案背誦版)】

什么是Spring Cloud? Spring Cloud是一個基于Spring Boot的開源框架,它提供了在分布式系統中集成各種服務治理功能的工具,如配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態等。其主要目…

【推薦圖書】深入淺出Spring Boot 3.x

推薦原因 這部SpringBoot3.x經典之作,時隔六年迎來重磅升級! 適合java開發相關讀者 購買鏈接 商品鏈接:https://item.jd.com/14600442.html 介紹 書名:深入淺出Spring Boot 3.x ISBN:978-7-115-63282-1/ 作者&…

「ETL趨勢」分區支持PostgreSQL、Greenplum、Gauss200, 定時任務支持Kettle

FineDataLink作為一款市場上的頂尖ETL工具,集實時數據同步、ELT/ETL數據處理、數據服務和系統管理于一體的數據集成工具,進行了新的維護迭代。本文把FDL4.1.9最新功能作了介紹,方便大家對比:(產品更新詳情:…

【國產開源可視化引擎Meta2d.js】鋼筆

鋼筆 鋼筆是和其他眾多繪圖工具(Photoshop、Sketch、Illustrator)中一致的鋼筆工具,能夠很方便的在線繪制各種小圖標 在線體驗: 樂吾樂2D可視化 示例: // 開始繪畫:curve。除了curve,還有poly…

c++應用網絡編程之二網絡的IO模型

一、網絡編程的開發平臺 一般來說,目前開發者面對的主流開發平臺就是Windows和類Unix,或者干脆就是Windows和Linux平臺。至于如IBM或其它等公司的相關平臺,可能對絕大多數開發者來說,可能一生都遇不到。至于嵌入式平臺&#xff0…

上位機圖像處理和嵌入式模塊部署(mcu項目1:用戶手冊)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】 一個完整的產品,除了上位機軟件、固件、硬件、包裝之外,一般還需要一個用戶手冊。好的用戶手冊應該能夠兼顧到大多數人的認…

力扣(3200)- 三角形的最大高度

好方法: 垃圾方法:

Python面試題:請解釋 `lambda` 函數是什么,并舉一個例子

lambda函數是Python中用于創建小型匿名函數的一種方式。這些函數通常用于需要一個簡單函數的場景,例如作為參數傳遞給高階函數。lambda函數以lambda關鍵字開始,后跟參數列表和表達式,語法形式如下: lambda arguments: expression…

nginx配置stream代理

項目中遇到某些服務在內網,需要外網訪問的情況,需要配置代理訪問。可用nginx搭建代理服務。 TCP代理 通過nginx的stream模塊可以直接代理TCP服務,步驟如下: 在/etc/nginx/下新建proxy文件夾,用于存放代理配置。此處…

吉洪諾夫正則化隨筆

前言 前幾天在回顧壓縮感知中的特征選擇與LASSO回歸發現了這個Tikhonov regularization,查了一下叫個如題的名字。先來淺說一下正則化這玩意:正則化(Regularization)是一種用來防止模型過擬合(Overfitting&#xff09…

孫溟?篆刻《睡片原諒一切,醒來不問過往》

孫溟?篆刻《睡片原諒一切,醒來不問過往》 佛陀言:睡前原諒一切,醒來不問過往,珍惜所有不期而遇,看淡所有不辭而別甲辰夏溟?于寒舍小窗下刊。

相關向量機RVM算法介紹繼承sklearn-SVM-API實現回歸預測算例

一、相關向量機RVM與支持向量機SVM對比 1、相關向量機(RVM) ①定義與原理 相關向量機(Relevance Vector Machine, RVM)是一種基于概率模型的機器學習算法,主要用于分類和回歸分析。基于稀疏貝葉斯學習框架&#xff…

Springboot助農農產品銷售系統-計算機畢業設計源碼16718

摘要 SpringBoot助農農產品銷售系統旨在通過利用SpringBoot框架開發一個便捷高效的農產品銷售平臺。該系統包括用戶注冊登錄、商品瀏覽、購物車管理、訂單生成、支付功能等模塊。通過整合支付接口、地圖定位、推薦系統等技術,提供給用戶更好的購物體驗。本文介紹了…

Docker安裝遇到問題:curl: (7) Failed to connect to download.docker.com port 443: 拒絕連接

問題描述 首先,完全按照Docker官方文檔進行安裝: Install Docker Engine on Ubuntu | Docker Docs 在第1步:Set up Dockers apt repository,執行如下指令: sudo curl -fsSL https://download.docker.com/linux/ubu…

人工智能開發中的數據隱私

人工智能開發中的數據隱私對于建立用戶信任和遵守嚴格法規至關重要。保護敏感信息可確保合乎道德的人工智能使用并防止有害的數據泄露。 為什么在人工智能開發中優先考慮數據隱私至關重要 人工智能的迅猛發展開啟了一個前所未有的技術進步時代,徹底改變了各行各業&…

使用Python繪制雙向條形圖

使用Python繪制雙向條形圖 雙向條形圖效果代碼 雙向條形圖 雙向條形圖用于比較兩個類別的數值分布,條形在中軸線兩側對稱排列。這種圖表常用于顯示兩個變量的對比情況,例如男女不同年齡段人口數量對比。 效果 代碼 import matplotlib.pyplot as plt i…

linux的服務管理

systemd systemd 是一個系統和服務管理器,用于Linux操作系統中,旨在替代傳統的Unix系統V初始化系統(SysV init)。 不一定所有使用 yum 安裝的軟件都可以通過 systemctl start 來管理。能否通過 systemctl start 管理取決于軟件包…

Shopee(蝦皮)怎么獲取流量?

店鋪流量的高低會直接關聯到賣家店鋪單量,也關系到一個店鋪的營業情況和利潤,那么Shopee的流量從哪里來呢? Shopee的平臺流量可分為五個部分: 1.自然流量 2.關鍵字廣告流量 3.平臺活動流量 4.營銷流量 5.粉絲流量 怎么提升…