Browse Source

[BSP/stm32f427-robomaster-a] add SD card suport

a1012112796 5 years ago
parent
commit
316d2e8847

+ 1 - 0
bsp/stm32/docs/STM32系列外设驱动添加指南.md

@@ -95,6 +95,7 @@
 |  10  | Watchdog | **开启该外设**                                             |
 |  10  | Watchdog | **开启该外设**                                             |
 |  11  | EMAC     | **配置 ETH 外设的工作模式(一般为 RMII 模式)**              |
 |  11  | EMAC     | **配置 ETH 外设的工作模式(一般为 RMII 模式)**              |
 |  12  | SDRAM    | **需要根据板载的 SDRAM 型号配置片选脚,地址线,数据线等**    |
 |  12  | SDRAM    | **需要根据板载的 SDRAM 型号配置片选脚,地址线,数据线等**    |
+|  13  | SDIO     | **开启该外设,配置引脚(或者使用默认引脚),SDIO会改变时钟结构,故需重新配置时钟并修改board.c** |
 
 
 ### 5.3 复杂外设配置说明
 ### 5.3 复杂外设配置说明
 
 

+ 1 - 1
bsp/stm32/stm32f427-robomaster-a/README.md

@@ -37,7 +37,7 @@ RoboMaster开发板套件是一款面向机器人DIY的开源主控套件。开
 
 
 | **板载外设**      | **支持情况** | **备注**                              |
 | **板载外设**      | **支持情况** | **备注**                              |
 | :----------------- | :----------: | :------------------------------------- |
 | :----------------- | :----------: | :------------------------------------- |
-| SD卡              |   暂不支持   |                                       |
+| SD卡              |   支持   |                                       |
 | CAN               |   支持   |    需通过24vXT30接口或usb接口供电          |
 | CAN               |   支持   |    需通过24vXT30接口或usb接口供电          |
 | **片上外设**      | **支持情况** | **备注**                              |
 | **片上外设**      | **支持情况** | **备注**                              |
 | GPIO              |     支持     | PA0, PA1... PK15 ---> PIN: 0, 1...176 |
 | GPIO              |     支持     | PA0, PA1... PK15 ---> PIN: 0, 1...176 |

File diff suppressed because it is too large
+ 0 - 0
bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/.mxproject


+ 69 - 49
bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/CubeMX_Config.ioc

@@ -8,59 +8,66 @@ KeepUserPlacement=true
 Mcu.Family=STM32F4
 Mcu.Family=STM32F4
 Mcu.IP0=CAN1
 Mcu.IP0=CAN1
 Mcu.IP1=CAN2
 Mcu.IP1=CAN2
-Mcu.IP10=UART8
-Mcu.IP11=USART1
-Mcu.IP12=USART3
-Mcu.IP13=USART6
+Mcu.IP10=UART7
+Mcu.IP11=UART8
+Mcu.IP12=USART1
+Mcu.IP13=USART3
+Mcu.IP14=USART6
 Mcu.IP2=NVIC
 Mcu.IP2=NVIC
 Mcu.IP3=RCC
 Mcu.IP3=RCC
-Mcu.IP4=SPI5
-Mcu.IP5=SYS
-Mcu.IP6=TIM4
-Mcu.IP7=TIM5
-Mcu.IP8=TIM12
-Mcu.IP9=UART7
-Mcu.IPNb=14
+Mcu.IP4=SDIO
+Mcu.IP5=SPI5
+Mcu.IP6=SYS
+Mcu.IP7=TIM4
+Mcu.IP8=TIM5
+Mcu.IP9=TIM12
+Mcu.IPNb=15
 Mcu.Name=STM32F427I(G-I)Hx
 Mcu.Name=STM32F427I(G-I)Hx
 Mcu.Package=UFBGA176
 Mcu.Package=UFBGA176
 Mcu.Pin0=PE1
 Mcu.Pin0=PE1
 Mcu.Pin1=PE0
 Mcu.Pin1=PE0
-Mcu.Pin10=PI0
-Mcu.Pin11=PH0/OSC_IN
-Mcu.Pin12=PH1/OSC_OUT
-Mcu.Pin13=PF7
-Mcu.Pin14=PF6
-Mcu.Pin15=PH12
-Mcu.Pin16=PF9
-Mcu.Pin17=PF8
-Mcu.Pin18=PH11
-Mcu.Pin19=PH10
+Mcu.Pin10=PC10
+Mcu.Pin11=PG9
+Mcu.Pin12=PD1
+Mcu.Pin13=PD2
+Mcu.Pin14=PI0
+Mcu.Pin15=PC9
+Mcu.Pin16=PH0/OSC_IN
+Mcu.Pin17=PC8
+Mcu.Pin18=PH1/OSC_OUT
+Mcu.Pin19=PF7
 Mcu.Pin2=PG14
 Mcu.Pin2=PG14
-Mcu.Pin20=PD15
-Mcu.Pin21=PH6
-Mcu.Pin22=PD14
-Mcu.Pin23=PD13
-Mcu.Pin24=PD12
-Mcu.Pin25=PE8
-Mcu.Pin26=PE11
-Mcu.Pin27=PB12
-Mcu.Pin28=PB13
-Mcu.Pin29=PD9
-Mcu.Pin3=PA14
-Mcu.Pin30=PD8
-Mcu.Pin31=PF14
-Mcu.Pin32=PE7
-Mcu.Pin33=VP_SYS_VS_Systick
-Mcu.Pin34=VP_TIM4_VS_ClockSourceINT
-Mcu.Pin35=VP_TIM5_VS_ClockSourceINT
-Mcu.Pin36=VP_TIM12_VS_ClockSourceINT
-Mcu.Pin4=PA13
-Mcu.Pin5=PB7
-Mcu.Pin6=PB6
-Mcu.Pin7=PD0
-Mcu.Pin8=PG9
-Mcu.Pin9=PD1
-Mcu.PinsNb=37
+Mcu.Pin20=PF6
+Mcu.Pin21=PH12
+Mcu.Pin22=PF9
+Mcu.Pin23=PF8
+Mcu.Pin24=PH11
+Mcu.Pin25=PH10
+Mcu.Pin26=PD15
+Mcu.Pin27=PH6
+Mcu.Pin28=PD14
+Mcu.Pin29=PD13
+Mcu.Pin3=PC12
+Mcu.Pin30=PD12
+Mcu.Pin31=PE8
+Mcu.Pin32=PE11
+Mcu.Pin33=PB12
+Mcu.Pin34=PB13
+Mcu.Pin35=PD9
+Mcu.Pin36=PD8
+Mcu.Pin37=PF14
+Mcu.Pin38=PE7
+Mcu.Pin39=VP_SYS_VS_Systick
+Mcu.Pin4=PA14
+Mcu.Pin40=VP_TIM4_VS_ClockSourceINT
+Mcu.Pin41=VP_TIM5_VS_ClockSourceINT
+Mcu.Pin42=VP_TIM12_VS_ClockSourceINT
+Mcu.Pin5=PA13
+Mcu.Pin6=PB7
+Mcu.Pin7=PB6
+Mcu.Pin8=PD0
+Mcu.Pin9=PC11
+Mcu.PinsNb=43
 Mcu.ThirdPartyNb=0
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserConstants=
 Mcu.UserName=STM32F427IIHx
 Mcu.UserName=STM32F427IIHx
@@ -93,6 +100,16 @@ PB6.Signal=USART1_TX
 PB7.Locked=true
 PB7.Locked=true
 PB7.Mode=Asynchronous
 PB7.Mode=Asynchronous
 PB7.Signal=USART1_RX
 PB7.Signal=USART1_RX
+PC10.Mode=SD_4_bits_Wide_bus
+PC10.Signal=SDIO_D2
+PC11.Mode=SD_4_bits_Wide_bus
+PC11.Signal=SDIO_D3
+PC12.Mode=SD_4_bits_Wide_bus
+PC12.Signal=SDIO_CK
+PC8.Mode=SD_4_bits_Wide_bus
+PC8.Signal=SDIO_D0
+PC9.Mode=SD_4_bits_Wide_bus
+PC9.Signal=SDIO_D1
 PCC.Checker=false
 PCC.Checker=false
 PCC.Line=STM32F427/437
 PCC.Line=STM32F427/437
 PCC.MCU=STM32F427I(G-I)Hx
 PCC.MCU=STM32F427I(G-I)Hx
@@ -114,6 +131,8 @@ PD14.Locked=true
 PD14.Signal=S_TIM4_CH3
 PD14.Signal=S_TIM4_CH3
 PD15.Locked=true
 PD15.Locked=true
 PD15.Signal=S_TIM4_CH4
 PD15.Signal=S_TIM4_CH4
+PD2.Mode=SD_4_bits_Wide_bus
+PD2.Signal=SDIO_CMD
 PD8.Locked=true
 PD8.Locked=true
 PD8.Mode=Asynchronous
 PD8.Mode=Asynchronous
 PD8.Signal=USART3_TX
 PD8.Signal=USART3_TX
@@ -194,7 +213,7 @@ ProjectManager.TargetToolchain=MDK-ARM V5
 ProjectManager.ToolChainLocation=
 ProjectManager.ToolChainLocation=
 ProjectManager.UnderRoot=false
 ProjectManager.UnderRoot=false
 ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-true,3-MX_SPI5_Init-SPI5-false-HAL-true,4-MX_USART6_UART_Init-USART6-false-HAL-true,5-MX_CAN1_Init-CAN1-false-HAL-true,6-MX_CAN2_Init-CAN2-false-HAL-true,7-MX_TIM4_Init-TIM4-false-HAL-true,8-MX_TIM5_Init-TIM5-false-HAL-true,9-MX_TIM12_Init-TIM12-false-HAL-true,10-MX_UART7_Init-UART7-false-HAL-true,11-MX_UART8_Init-UART8-false-HAL-true,12-MX_USART1_UART_Init-USART1-false-HAL-true,13-MX_USART3_UART_Init-USART3-false-HAL-true
 ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-true,3-MX_SPI5_Init-SPI5-false-HAL-true,4-MX_USART6_UART_Init-USART6-false-HAL-true,5-MX_CAN1_Init-CAN1-false-HAL-true,6-MX_CAN2_Init-CAN2-false-HAL-true,7-MX_TIM4_Init-TIM4-false-HAL-true,8-MX_TIM5_Init-TIM5-false-HAL-true,9-MX_TIM12_Init-TIM12-false-HAL-true,10-MX_UART7_Init-UART7-false-HAL-true,11-MX_UART8_Init-UART8-false-HAL-true,12-MX_USART1_UART_Init-USART1-false-HAL-true,13-MX_USART3_UART_Init-USART3-false-HAL-true
-RCC.48MHZClocksFreq_Value=90000000
+RCC.48MHZClocksFreq_Value=45000000
 RCC.AHBFreq_Value=180000000
 RCC.AHBFreq_Value=180000000
 RCC.APB1CLKDivider=RCC_HCLK_DIV4
 RCC.APB1CLKDivider=RCC_HCLK_DIV4
 RCC.APB1Freq_Value=45000000
 RCC.APB1Freq_Value=45000000
@@ -210,14 +229,15 @@ RCC.HCLKFreq_Value=180000000
 RCC.HSE_VALUE=12000000
 RCC.HSE_VALUE=12000000
 RCC.HSI_VALUE=16000000
 RCC.HSI_VALUE=16000000
 RCC.I2SClocksFreq_Value=192000000
 RCC.I2SClocksFreq_Value=192000000
-RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VcooutputI2S,VcooutputI2SQ
+RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VcooutputI2S,VcooutputI2SQ
 RCC.LSE_VALUE=32768
 RCC.LSE_VALUE=32768
 RCC.LSI_VALUE=32000
 RCC.LSI_VALUE=32000
 RCC.MCO2PinFreq_Value=180000000
 RCC.MCO2PinFreq_Value=180000000
 RCC.PLLCLKFreq_Value=180000000
 RCC.PLLCLKFreq_Value=180000000
 RCC.PLLM=6
 RCC.PLLM=6
 RCC.PLLN=180
 RCC.PLLN=180
-RCC.PLLQCLKFreq_Value=90000000
+RCC.PLLQ=8
+RCC.PLLQCLKFreq_Value=45000000
 RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
 RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
 RCC.RTCFreq_Value=32000
 RCC.RTCFreq_Value=32000
 RCC.RTCHSEDivFreq_Value=6000000
 RCC.RTCHSEDivFreq_Value=6000000

+ 1 - 1
bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h

@@ -58,7 +58,7 @@
 /* #define HAL_RNG_MODULE_ENABLED   */
 /* #define HAL_RNG_MODULE_ENABLED   */
 /* #define HAL_RTC_MODULE_ENABLED   */
 /* #define HAL_RTC_MODULE_ENABLED   */
 /* #define HAL_SAI_MODULE_ENABLED   */
 /* #define HAL_SAI_MODULE_ENABLED   */
-/* #define HAL_SD_MODULE_ENABLED   */
+#define HAL_SD_MODULE_ENABLED
 /* #define HAL_MMC_MODULE_ENABLED   */
 /* #define HAL_MMC_MODULE_ENABLED   */
 #define HAL_SPI_MODULE_ENABLED
 #define HAL_SPI_MODULE_ENABLED
 #define HAL_TIM_MODULE_ENABLED
 #define HAL_TIM_MODULE_ENABLED

+ 42 - 1
bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/main.c

@@ -65,6 +65,8 @@
 CAN_HandleTypeDef hcan1;
 CAN_HandleTypeDef hcan1;
 CAN_HandleTypeDef hcan2;
 CAN_HandleTypeDef hcan2;
 
 
+SD_HandleTypeDef hsd;
+
 SPI_HandleTypeDef hspi5;
 SPI_HandleTypeDef hspi5;
 
 
 TIM_HandleTypeDef htim4;
 TIM_HandleTypeDef htim4;
@@ -95,6 +97,7 @@ static void MX_UART7_Init(void);
 static void MX_UART8_Init(void);
 static void MX_UART8_Init(void);
 static void MX_USART1_UART_Init(void);
 static void MX_USART1_UART_Init(void);
 static void MX_USART3_UART_Init(void);
 static void MX_USART3_UART_Init(void);
+static void MX_SDIO_SD_Init(void);
 /* USER CODE BEGIN PFP */
 /* USER CODE BEGIN PFP */
 
 
 /* USER CODE END PFP */
 /* USER CODE END PFP */
@@ -144,6 +147,7 @@ int main(void)
   MX_UART8_Init();
   MX_UART8_Init();
   MX_USART1_UART_Init();
   MX_USART1_UART_Init();
   MX_USART3_UART_Init();
   MX_USART3_UART_Init();
+  MX_SDIO_SD_Init();
   /* USER CODE BEGIN 2 */
   /* USER CODE BEGIN 2 */
 
 
   /* USER CODE END 2 */
   /* USER CODE END 2 */
@@ -181,7 +185,7 @@ void SystemClock_Config(void)
   RCC_OscInitStruct.PLL.PLLM = 6;
   RCC_OscInitStruct.PLL.PLLM = 6;
   RCC_OscInitStruct.PLL.PLLN = 180;
   RCC_OscInitStruct.PLL.PLLN = 180;
   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
-  RCC_OscInitStruct.PLL.PLLQ = 4;
+  RCC_OscInitStruct.PLL.PLLQ = 8;
   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
   {
   {
     Error_Handler();
     Error_Handler();
@@ -281,6 +285,42 @@ static void MX_CAN2_Init(void)
 
 
 }
 }
 
 
+/**
+  * @brief SDIO Initialization Function
+  * @param None
+  * @retval None
+  */
+static 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_1B;
+  hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
+  hsd.Init.ClockDiv = 0;
+  if (HAL_SD_Init(&hsd) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /* USER CODE BEGIN SDIO_Init 2 */
+
+  /* USER CODE END SDIO_Init 2 */
+
+}
+
 /**
 /**
   * @brief SPI5 Initialization Function
   * @brief SPI5 Initialization Function
   * @param None
   * @param None
@@ -690,6 +730,7 @@ static void MX_GPIO_Init(void)
   /* GPIO Ports Clock Enable */
   /* GPIO Ports Clock Enable */
   __HAL_RCC_GPIOE_CLK_ENABLE();
   __HAL_RCC_GPIOE_CLK_ENABLE();
   __HAL_RCC_GPIOG_CLK_ENABLE();
   __HAL_RCC_GPIOG_CLK_ENABLE();
+  __HAL_RCC_GPIOC_CLK_ENABLE();
   __HAL_RCC_GPIOA_CLK_ENABLE();
   __HAL_RCC_GPIOA_CLK_ENABLE();
   __HAL_RCC_GPIOB_CLK_ENABLE();
   __HAL_RCC_GPIOB_CLK_ENABLE();
   __HAL_RCC_GPIOD_CLK_ENABLE();
   __HAL_RCC_GPIOD_CLK_ENABLE();

+ 85 - 0
bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c

@@ -222,6 +222,91 @@ void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan)
 
 
 }
 }
 
 
+/**
+* @brief SD MSP Initialization
+* This function configures the hardware resources used in this example
+* @param hsd: SD handle pointer
+* @retval None
+*/
+void HAL_SD_MspInit(SD_HandleTypeDef* hsd)
+{
+  GPIO_InitTypeDef GPIO_InitStruct = {0};
+  if(hsd->Instance==SDIO)
+  {
+  /* USER CODE BEGIN SDIO_MspInit 0 */
+
+  /* USER CODE END SDIO_MspInit 0 */
+    /* Peripheral clock enable */
+    __HAL_RCC_SDIO_CLK_ENABLE();
+  
+    __HAL_RCC_GPIOC_CLK_ENABLE();
+    __HAL_RCC_GPIOD_CLK_ENABLE();
+    /**SDIO GPIO Configuration    
+    PC12     ------> SDIO_CK
+    PC11     ------> SDIO_D3
+    PC10     ------> SDIO_D2
+    PD2     ------> SDIO_CMD
+    PC9     ------> SDIO_D1
+    PC8     ------> SDIO_D0 
+    */
+    GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_11|GPIO_PIN_10|GPIO_PIN_9 
+                          |GPIO_PIN_8;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+    GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;
+    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = GPIO_PIN_2;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+    GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;
+    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+
+  /* USER CODE BEGIN SDIO_MspInit 1 */
+
+  /* USER CODE END SDIO_MspInit 1 */
+  }
+
+}
+
+/**
+* @brief SD MSP De-Initialization
+* This function freeze the hardware resources used in this example
+* @param hsd: SD handle pointer
+* @retval None
+*/
+void HAL_SD_MspDeInit(SD_HandleTypeDef* hsd)
+{
+  if(hsd->Instance==SDIO)
+  {
+  /* USER CODE BEGIN SDIO_MspDeInit 0 */
+
+  /* USER CODE END SDIO_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_SDIO_CLK_DISABLE();
+  
+    /**SDIO GPIO Configuration    
+    PC12     ------> SDIO_CK
+    PC11     ------> SDIO_D3
+    PC10     ------> SDIO_D2
+    PD2     ------> SDIO_CMD
+    PC9     ------> SDIO_D1
+    PC8     ------> SDIO_D0 
+    */
+    HAL_GPIO_DeInit(GPIOC, GPIO_PIN_12|GPIO_PIN_11|GPIO_PIN_10|GPIO_PIN_9 
+                          |GPIO_PIN_8);
+
+    HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2);
+
+  /* USER CODE BEGIN SDIO_MspDeInit 1 */
+
+  /* USER CODE END SDIO_MspDeInit 1 */
+  }
+
+}
+
 /**
 /**
 * @brief SPI MSP Initialization
 * @brief SPI MSP Initialization
 * This function configures the hardware resources used in this example
 * This function configures the hardware resources used in this example

+ 12 - 0
bsp/stm32/stm32f427-robomaster-a/board/Kconfig

@@ -8,6 +8,12 @@ config SOC_STM32F427II
     default y
     default y
 
 
 menu "Onboard Peripheral Drivers"
 menu "Onboard Peripheral Drivers"
+    config BSP_USING_SDCARD
+        bool "Enable SDCARD (sdio)"
+        select BSP_USING_SDIO
+        select RT_USING_DFS
+        select RT_USING_DFS_ELMFAT
+        default n
 endmenu
 endmenu
 
 
 menu "On-chip Peripheral Drivers"
 menu "On-chip Peripheral Drivers"
@@ -76,6 +82,12 @@ menu "On-chip Peripheral Drivers"
                     default n
                     default n
         endif
         endif
 
 
+    config BSP_USING_SDIO
+        bool "Enable SDIO"
+        select RT_USING_SDIO
+        select RT_USING_DFS
+        default n
+
     menuconfig BSP_USING_PWM
     menuconfig BSP_USING_PWM
         bool "Enable pwm"
         bool "Enable pwm"
         default n
         default n

+ 3 - 0
bsp/stm32/stm32f427-robomaster-a/board/SConscript

@@ -12,6 +12,9 @@ board.c
 CubeMX_Config/Src/stm32f4xx_hal_msp.c
 CubeMX_Config/Src/stm32f4xx_hal_msp.c
 ''')
 ''')
 
 
+if GetDepend(['BSP_USING_SDCARD']):
+    src += Glob('ports/sdcard_port.c')
+
 path =  [cwd]
 path =  [cwd]
 path += [cwd + '/CubeMX_Config/Inc']
 path += [cwd + '/CubeMX_Config/Inc']
 path += [cwd + '/ports']
 path += [cwd + '/ports']

+ 1 - 1
bsp/stm32/stm32f427-robomaster-a/board/board.c

@@ -32,7 +32,7 @@ void SystemClock_Config(void)
   RCC_OscInitStruct.PLL.PLLM = 6;
   RCC_OscInitStruct.PLL.PLLM = 6;
   RCC_OscInitStruct.PLL.PLLN = 180;
   RCC_OscInitStruct.PLL.PLLN = 180;
   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
-  RCC_OscInitStruct.PLL.PLLQ = 4;
+  RCC_OscInitStruct.PLL.PLLQ = 8;
   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
   {
   {
     Error_Handler();
     Error_Handler();

+ 62 - 0
bsp/stm32/stm32f427-robomaster-a/board/ports/sdcard_port.c

@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2006-2018, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2018-12-13     balanceTWK   add sdcard port file
+ */
+
+#include <rtthread.h>
+
+#ifdef RT_USING_DFS
+
+#include <dfs_elm.h>
+#include <dfs_fs.h>
+#include <dfs_posix.h>
+
+#define DBG_TAG "app.card"
+#define DBG_LVL DBG_INFO
+#include <rtdbg.h>
+
+void sd_mount(void *parameter)
+{
+    while (1)
+    {
+        rt_thread_mdelay(500);
+        if(rt_device_find("sd0") != RT_NULL)
+        {
+            if (dfs_mount("sd0", "/", "elm", 0, 0) == RT_EOK)
+            {
+                LOG_I("sd card mount to '/'");
+                break;
+            }
+            else
+            {
+                LOG_W("sd card mount to '/' failed!");
+            }
+        }
+    }
+}
+
+int stm32_sdcard_mount(void)
+{
+    rt_thread_t tid;
+
+    tid = rt_thread_create("sd_mount", sd_mount, RT_NULL,
+                           1024, RT_THREAD_PRIORITY_MAX - 2, 20);
+    if (tid != RT_NULL)
+    {
+        rt_thread_startup(tid);
+    }
+    else
+    {
+        LOG_E("create sd_mount thread err!");
+    }
+    return RT_EOK;
+}
+INIT_APP_EXPORT(stm32_sdcard_mount);
+
+#endif
+

Some files were not shown because too many files changed in this diff