381 lines
10 KiB
C
381 lines
10 KiB
C
|
/**
|
|||
|
******************************************************************************
|
|||
|
* @file bsp_sdio_sd.c
|
|||
|
* @author fire
|
|||
|
* @version V1.0
|
|||
|
* @date 2018-xx-xx
|
|||
|
* @brief SDIO sd<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ϵͳ<EFBFBD><EFBFBD>
|
|||
|
******************************************************************************
|
|||
|
* @attention
|
|||
|
*
|
|||
|
* ʵ<EFBFBD><EFBFBD>ƽ̨:<EFBFBD><EFBFBD><EFBFBD><EFBFBD> STM32 H750 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>̳ :http://www.firebbs.cn
|
|||
|
* <EFBFBD>Ա<EFBFBD> :http://firestm32.taobao.com
|
|||
|
*
|
|||
|
******************************************************************************
|
|||
|
*/
|
|||
|
#include "./sd_card/bsp_sdio_sd.h"
|
|||
|
#include "./led/bsp_led.h"
|
|||
|
#include "./delay/core_delay.h"
|
|||
|
#include "./usart/bsp_debug_usart.h"
|
|||
|
|
|||
|
|
|||
|
SD_HandleTypeDef uSdHandle;
|
|||
|
|
|||
|
|
|||
|
//SDMMCֻ<43>ܷ<EFBFBD><DCB7><EFBFBD>AXI_SRAM
|
|||
|
uint8_t Buffer_Block_Tx[MULTI_BUFFER_SIZE/4];
|
|||
|
uint8_t Buffer_Block_Rx[MULTI_BUFFER_SIZE/4];
|
|||
|
|
|||
|
//<2F><><EFBFBD>ͱ<EFBFBD>־λ
|
|||
|
__IO uint8_t TX_Flag=0;
|
|||
|
//<2F><><EFBFBD>ܱ<EFBFBD>־λ
|
|||
|
__IO uint8_t RX_Flag=0;
|
|||
|
/**
|
|||
|
* @brief SD_Card<EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void SD_Test(void)
|
|||
|
{
|
|||
|
LED_BLUE;
|
|||
|
/*------------------------------ SD <20><>ʼ<EFBFBD><CABC> ------------------------------ */
|
|||
|
if(BSP_SD_Init() != HAL_OK)
|
|||
|
{
|
|||
|
LED_RED;
|
|||
|
printf("SD<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD>SD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD>뿪<EFBFBD><EFBFBD><EFBFBD>壬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>SD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>\n");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
printf("SD<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>\n");
|
|||
|
LED_BLUE;
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
SD_EraseTest();
|
|||
|
|
|||
|
LED_BLUE;
|
|||
|
/*single block <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>*/
|
|||
|
SD_SingleBlockTest();
|
|||
|
|
|||
|
LED_BLUE;
|
|||
|
/*muti block <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>*/
|
|||
|
SD_MultiBlockTest();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>SDMMC1<EFBFBD><EFBFBD>SD<EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval HAL_OK<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>HAL_ERROR<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
static HAL_StatusTypeDef BSP_SD_Init(void)
|
|||
|
{
|
|||
|
HAL_StatusTypeDef sd_state = HAL_OK;
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>SDMMC<4D><43><EFBFBD><EFBFBD> */
|
|||
|
uSdHandle.Instance = SDMMC1;
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч */
|
|||
|
uSdHandle.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
|
|||
|
/* <20>رս<D8B1><D5BD><EFBFBD>ģʽ */
|
|||
|
uSdHandle.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
|
|||
|
/* <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>Ϊ4 */
|
|||
|
uSdHandle.Init.BusWide = SDMMC_BUS_WIDE_4B;
|
|||
|
/* <20>ر<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
uSdHandle.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
|
|||
|
/* ʱ<>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>Ϊ0 */
|
|||
|
uSdHandle.Init.ClockDiv = 8;
|
|||
|
|
|||
|
/* <20><>ʼ<EFBFBD><CABC>SD<53>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
BSP_SD_MspInit();
|
|||
|
|
|||
|
/* HAL SD <20><>ʼ<EFBFBD><CABC> */
|
|||
|
if(HAL_SD_Init(&uSdHandle) != HAL_OK)
|
|||
|
{
|
|||
|
sd_state = HAL_ERROR;
|
|||
|
}
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>SD<53><44><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> */
|
|||
|
if(sd_state == HAL_OK)
|
|||
|
{
|
|||
|
/* <20><><EFBFBD><EFBFBD>Ϊ4bitģʽ */
|
|||
|
if(HAL_SD_ConfigWideBusOperation(&uSdHandle, uSdHandle.Init.BusWide) != HAL_OK)
|
|||
|
{
|
|||
|
sd_state = HAL_ERROR;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
sd_state = HAL_OK;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return sd_state;
|
|||
|
}
|
|||
|
/**
|
|||
|
* @brief SD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
static void SD_EraseTest(void)
|
|||
|
{
|
|||
|
HAL_StatusTypeDef Status = HAL_OK;
|
|||
|
HAL_StatusTypeDef EraseStatus = HAL_OK;
|
|||
|
if (Status == HAL_OK)
|
|||
|
{
|
|||
|
Status = HAL_SD_Erase(&uSdHandle, 0x00, (BLOCK_SIZE * NUMBER_OF_BLOCKS));
|
|||
|
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(Wait_SDCARD_Ready() != HAL_OK)
|
|||
|
{
|
|||
|
EraseStatus = HAL_ERROR;
|
|||
|
}
|
|||
|
}
|
|||
|
if(EraseStatus == HAL_OK)
|
|||
|
{
|
|||
|
LED_GREEN;
|
|||
|
printf("SD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Գɹ<EFBFBD><EFBFBD><EFBFBD>\n");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LED_RED;
|
|||
|
printf("SD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>\n");
|
|||
|
printf("<EFBFBD><EFBFBD>ܰ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SD<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD>SD<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>single<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾSD<EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>á<EFBFBD>\n");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief SD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void SD_SingleBlockTest(void)
|
|||
|
{
|
|||
|
HAL_StatusTypeDef Status = HAL_OK;
|
|||
|
HAL_StatusTypeDef TransferStatus1 = HAL_ERROR;
|
|||
|
/* Fill the buffer to send */
|
|||
|
Fill_Buffer(Buffer_Block_Tx, BLOCK_SIZE/4, 0);
|
|||
|
// SCB_CleanDCache_by_Addr((uint32_t*)Buffer_Block_Tx, BLOCK_SIZE/4);
|
|||
|
if(Status == HAL_OK)
|
|||
|
{
|
|||
|
/* <20><>ʼ<EFBFBD><CABC>ַΪ0<CEAA><30>д<EFBFBD><D0B4>512<31><32><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
Status = HAL_SD_WriteBlocks_DMA(&uSdHandle, Buffer_Block_Tx, 0x00,1);
|
|||
|
while(TX_Flag == 0);
|
|||
|
}
|
|||
|
/* Fill the buffer to reception */
|
|||
|
Fill_Buffer(Buffer_Block_Rx, BLOCK_SIZE/4, 0);
|
|||
|
// SCB_CleanDCache_by_Addr((uint32_t*)Buffer_Block_Rx, BLOCK_SIZE/4);
|
|||
|
if(Status == HAL_OK)
|
|||
|
{
|
|||
|
/* <20><>ʼ<EFBFBD><CABC>ַΪ0<CEAA><30><EFBFBD><EFBFBD>ȡ512<31><32><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
Status = HAL_SD_ReadBlocks_DMA(&uSdHandle, Buffer_Block_Rx,0, 1);
|
|||
|
while(RX_Flag == 0);
|
|||
|
}
|
|||
|
if (Status == HAL_OK)
|
|||
|
{
|
|||
|
TransferStatus1 = Buffercmp(Buffer_Block_Tx, Buffer_Block_Rx, BLOCK_SIZE/4);
|
|||
|
}
|
|||
|
if(TransferStatus1 == HAL_OK)
|
|||
|
{
|
|||
|
LED_GREEN;
|
|||
|
printf("Single block <20><><EFBFBD>Գɹ<D4B3><C9B9><EFBFBD>\n");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LED_RED;
|
|||
|
printf("Single block <20><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ȷ<EFBFBD><C8B7>SD<53><44><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>뿪<EFBFBD><EBBFAA><EFBFBD>壬<EFBFBD><E5A3AC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>SD<53><44><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>\n");
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
* @brief SD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void SD_MultiBlockTest(void)
|
|||
|
{
|
|||
|
HAL_StatusTypeDef Status = HAL_OK;
|
|||
|
HAL_StatusTypeDef TransferStatus1 = HAL_ERROR;
|
|||
|
TX_Flag = 0;
|
|||
|
RX_Flag = 0;
|
|||
|
/* Fill the buffer to send */
|
|||
|
Fill_Buffer(Buffer_Block_Tx, MULTI_BUFFER_SIZE/4, 0);
|
|||
|
// SCB_CleanDCache_by_Addr((uint32_t*)Buffer_Block_Tx, MULTI_BUFFER_SIZE/4);
|
|||
|
if(Status == HAL_OK)
|
|||
|
{
|
|||
|
/* <20><>ʼ<EFBFBD><CABC>ַΪ0<CEAA><30>д<EFBFBD><D0B4>NUMBER_OF_BLOCKS*512<31><32><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
Status = HAL_SD_WriteBlocks_DMA(&uSdHandle, (uint8_t *)Buffer_Block_Tx, 0,NUMBER_OF_BLOCKS);
|
|||
|
CPU_TS_Tmr_Delay_US(10000);
|
|||
|
while(TX_Flag == 0);
|
|||
|
}
|
|||
|
/* Fill the buffer to reception */
|
|||
|
Fill_Buffer(Buffer_Block_Rx, MULTI_BUFFER_SIZE/4, 0);
|
|||
|
// SCB_CleanDCache_by_Addr((uint32_t*)Buffer_Block_Rx, MULTI_BUFFER_SIZE/4);
|
|||
|
if(Status == HAL_OK)
|
|||
|
{
|
|||
|
/* <20><>ʼ<EFBFBD><CABC>ַΪ0<CEAA><30><EFBFBD><EFBFBD>ȡNUMBER_OF_BLOCKS*512<31><32><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
Status = HAL_SD_ReadBlocks_DMA(&uSdHandle, Buffer_Block_Rx,0, NUMBER_OF_BLOCKS);
|
|||
|
CPU_TS_Tmr_Delay_US(10000);
|
|||
|
//<2F>ȴ<EFBFBD>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
while(RX_Flag == 0);
|
|||
|
}
|
|||
|
if (Status == HAL_OK)
|
|||
|
{
|
|||
|
TransferStatus1 = Buffercmp(Buffer_Block_Tx, Buffer_Block_Rx, MULTI_BUFFER_SIZE/4);
|
|||
|
}
|
|||
|
if(TransferStatus1 == HAL_OK)
|
|||
|
{
|
|||
|
LED_GREEN;
|
|||
|
printf("Multi block <20><><EFBFBD>Գɹ<D4B3><C9B9><EFBFBD>\n");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LED_RED;
|
|||
|
printf("Multi block <20><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ȷ<EFBFBD><C8B7>SD<53><44><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>뿪<EFBFBD><EBBFAA><EFBFBD>壬<EFBFBD><E5A3AC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>SD<53><44><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>\n");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief SD<EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval HAL_OK<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>HAL_ERROR<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
static HAL_StatusTypeDef Wait_SDCARD_Ready(void)
|
|||
|
{
|
|||
|
uint32_t loop = SD_TIMEOUT;
|
|||
|
|
|||
|
/* Wait for the Erasing process is completed */
|
|||
|
/* Verify that SD card is ready to use after the Erase */
|
|||
|
while(loop > 0)
|
|||
|
{
|
|||
|
loop--;
|
|||
|
if(HAL_SD_GetCardState(&uSdHandle) == HAL_SD_CARD_TRANSFER)
|
|||
|
{
|
|||
|
return HAL_OK;
|
|||
|
}
|
|||
|
}
|
|||
|
return HAL_ERROR;
|
|||
|
}
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⺯<EFBFBD><EFBFBD>
|
|||
|
* @param pBuffer1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飻pBuffer2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飻BufferLength<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鳤<EFBFBD><EFBFBD>
|
|||
|
* @retval HAL_OK<EFBFBD><EFBFBD>ƥ<EFBFBD>䣻HAL_ERROR<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
static HAL_StatusTypeDef Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint32_t BufferLength)
|
|||
|
{
|
|||
|
while (BufferLength--)
|
|||
|
{
|
|||
|
if (*pBuffer1 != *pBuffer2)
|
|||
|
{
|
|||
|
return HAL_ERROR;
|
|||
|
}
|
|||
|
else{
|
|||
|
|
|||
|
pBuffer1++;
|
|||
|
pBuffer2++;
|
|||
|
}
|
|||
|
}
|
|||
|
return HAL_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief Fills buffer with user predefined data.
|
|||
|
* @param pBuffer: pointer on the Buffer to fill
|
|||
|
* @param BufferLength: size of the buffer to fill
|
|||
|
* @param Offset: first value to fill on the Buffer
|
|||
|
* @retval None
|
|||
|
*/
|
|||
|
void Fill_Buffer(uint8_t *pBuffer, uint32_t BufferLength, uint32_t Offset)
|
|||
|
{
|
|||
|
uint32_t index = 0;
|
|||
|
/* Put in global buffer same values */
|
|||
|
for (index = 0; index < BufferLength; index++)
|
|||
|
{
|
|||
|
pBuffer[index] = index + Offset;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>WIFIģ<EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
static void WIFI_PDN_INIT(void)
|
|||
|
{
|
|||
|
/*<2A><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>GPIO_InitTypeDef<65><66><EFBFBD>͵Ľṹ<C4BD><E1B9B9>*/
|
|||
|
GPIO_InitTypeDef GPIO_InitStruct;
|
|||
|
/*ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>*/
|
|||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
|||
|
/*ѡ<><D1A1>Ҫ<EFBFBD><D2AA><EFBFBD>Ƶ<EFBFBD>GPIO<49><4F><EFBFBD><EFBFBD>*/
|
|||
|
GPIO_InitStruct.Pin = GPIO_PIN_2;
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ģʽ*/
|
|||
|
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> */
|
|||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
|||
|
/*<2A><><EFBFBD>ÿ⺯<C3BF><E2BAAF><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>GPIO_InitStructure<72><65>ʼ<EFBFBD><CABC>GPIO*/
|
|||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
|||
|
/*<2A><><EFBFBD><EFBFBD>WiFiģ<69><C4A3>*/
|
|||
|
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_RESET);
|
|||
|
}
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>SD<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval None
|
|||
|
*/
|
|||
|
static void BSP_SD_MspInit(void)
|
|||
|
{
|
|||
|
GPIO_InitTypeDef GPIO_InitStruct;
|
|||
|
|
|||
|
/* ʹ<><CAB9> SDMMC ʱ<><CAB1> */
|
|||
|
__HAL_RCC_SDMMC1_CLK_ENABLE();
|
|||
|
|
|||
|
/* ʹ<><CAB9> GPIOs ʱ<><CAB1> */
|
|||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
|||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
|||
|
|
|||
|
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|
|||
|
|GPIO_PIN_12;
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD><EFBFBD><EFBFBD>ģʽ*/
|
|||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> */
|
|||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
|||
|
/*<2A><><EFBFBD><EFBFBD>ΪSDIO1<4F><31><EFBFBD><EFBFBD> */
|
|||
|
GPIO_InitStruct.Alternate = GPIO_AF12_SDIO1;
|
|||
|
/*<2A><><EFBFBD>ÿ⺯<C3BF><E2BAAF><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>GPIO_InitStructure<72><65>ʼ<EFBFBD><CABC>GPIO*/
|
|||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
|||
|
|
|||
|
GPIO_InitStruct.Pin = GPIO_PIN_2;
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD><EFBFBD><EFBFBD>ģʽ*/
|
|||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> */
|
|||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
|||
|
/*<2A><><EFBFBD><EFBFBD>ΪSDIO1<4F><31><EFBFBD><EFBFBD> */
|
|||
|
GPIO_InitStruct.Alternate = GPIO_AF12_SDIO1;
|
|||
|
/*<2A><><EFBFBD>ÿ⺯<C3BF><E2BAAF><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>GPIO_InitStructure<72><65>ʼ<EFBFBD><CABC>GPIO*/
|
|||
|
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
|||
|
//<2F><><EFBFBD><EFBFBD>WIFIģ<49><C4A3>
|
|||
|
WIFI_PDN_INIT();
|
|||
|
|
|||
|
HAL_NVIC_SetPriority(SDMMC1_IRQn,0,0); //<2F><><EFBFBD><EFBFBD>SDMMC1<43>ж<EFBFBD>
|
|||
|
HAL_NVIC_EnableIRQ(SDMMC1_IRQn); //ʹ<><CAB9>SDMMC1<43>ж<EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
//SDMMC1<43><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻص<C9BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd)
|
|||
|
{
|
|||
|
TX_Flag=1;
|
|||
|
}
|
|||
|
|
|||
|
//SDMMC1<43><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻص<C9BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd)
|
|||
|
{
|
|||
|
// SCB_InvalidateDCache_by_Addr((uint32_t*)Buffer_Block_Rx, MULTI_BUFFER_SIZE/4);
|
|||
|
RX_Flag=1;
|
|||
|
}
|
|||
|
/************************END OF FILE*******************/
|