Взял пример USB mass Storage от iar stm32f103ze sk
С наскоку не заработала. Начал смотреть инициализацию SD интерфейса.
В начальный момент должны работать CLK и CMD линии.
По CLK идут стробы, по CMD - постоянный уровень 1.
Схема подключения у меня аналогична, по этому только отрезал лишнее.
Код
void _SdInit (void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// GPIO enable clock and release Reset
RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOD
| RCC_APB2Periph_GPIOE, DISABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD
| RCC_APB2Periph_GPIOE, ENABLE);
/*
// Init CP pin
GPIO_InitStructure.GPIO_Pin = _CP_MASK;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(_CP_PORT, &GPIO_InitStructure);
// Init WP pin
GPIO_InitStructure.GPIO_Pin = _WP_MASK;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(_WP_PORT, &GPIO_InitStructure);
*/
// GPIOC and GPIOD Periph clock enable
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
// Configure PC.08, PC.09, PC.10, PC.11, PC.12 pin: D0, D1, D2, D3, CLK pin
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// Configure PD.02 CMD line
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* Enable the SDIO AHB Clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, ENABLE);
// Enable the DMA2 Clock
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
SDIO_DeInit();
}
{
GPIO_InitTypeDef GPIO_InitStructure;
// GPIO enable clock and release Reset
RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOD
| RCC_APB2Periph_GPIOE, DISABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD
| RCC_APB2Periph_GPIOE, ENABLE);
/*
// Init CP pin
GPIO_InitStructure.GPIO_Pin = _CP_MASK;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(_CP_PORT, &GPIO_InitStructure);
// Init WP pin
GPIO_InitStructure.GPIO_Pin = _WP_MASK;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(_WP_PORT, &GPIO_InitStructure);
*/
// GPIOC and GPIOD Periph clock enable
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
// Configure PC.08, PC.09, PC.10, PC.11, PC.12 pin: D0, D1, D2, D3, CLK pin
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// Configure PD.02 CMD line
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* Enable the SDIO AHB Clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, ENABLE);
// Enable the DMA2 Clock
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
SDIO_DeInit();
}
SDIO_CMD ремапиться c TIM3_ETR/UART5_RX, но я не могу найти ни одного примера с ремапом.
Может его не нужно ремапить, а проблема в другом месте?