Перейти к содержанию
    

kvladg

Новичок
  • Постов

    3
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Спасибо друзья за участие. Проблема у меня решилась очень просто: Конечно тактировать AFIO обязательно перед REMAP Но главное: Порядок инициализации и ремап должен быть такой: Ремапим AFIO->MAPR |= AFIO_MAPR_SPI1_REMAP; AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE; И всё заработало на 100 и 103 процессоре проверил. Всем спасибо!
  2. Потому, что к сожалению, не знаю как правильно для режима Remap и прошу помочь. Спасибо, Я эти варианты брал из примеров в и-нете как рабочие. Я считал, что "RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE);" достаточно для включения тактирования. Значит нужно дополнительно тактировать режим AFIO. Я его включал, но потом закоментировал. Буду разбираться. Но определённости у меня пока нет. Вы мне показали как не надо, но я и сам понимал, что не правильно, иначе зачем обращаться за советом.
  3. На AF SPI1 (PA4-PA7) работает, нужен Remap на PB3-PB5, PA15. Процессор STM32F100C8. Перекопал и-нет и перепробовал разные примеры, но запустить не могу. Причем, если на работающем AF SPI1 сделать // Ремапим AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE; AFIO->MAPR |= AFIO_MAPR_SPI1_REMAP; То основной отключается, а "ремаповный" не работает. Привожу кусок инициализации, может кто-то подскажет, в чем проблема! Технически МП проверил, нужные Рин ы устанавливаются и сбрасываются прграммно. // включаем тактирование (=питание) на порты A, B и железный SPI1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE); // Ремапим SPI1 AFIO->MAPR |=AFIO_MAPR_SPI1_REMAP ; GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); GPIO_InitTypeDef PORT; void GPIOInit(void) { // выбрали ноги для настройки PORT.GPIO_Pin = NSS_Pin; //Pin15 // установили наименьшую скорость PORT.GPIO_Speed = GPIO_Speed_2MHz; // (важно!) определяем предназначение ног. здесь - выбор "альтернативной функции" ног PORT.GPIO_Mode = GPIO_Mode_AF_PP; // настроили ногу в порту А GPIO_Init(GPIOA, &PORT); // выбрали ноги для настройки PORT.GPIO_Pin = SCK_Pin | MOSI_Pin; //Pin PB3, Pin PB5 // установили скорость PORT.GPIO_Speed = GPIO_Speed_2MHz; // предназначение - общее, выход PORT.GPIO_Mode = GPIO_Mode_Out_PP; // настроили ноги в порту B GPIO_Init(GPIOB, &PORT); PORT.GPIO_Pin = MISO_Pin; //Pin4 // установили скорость PORT.GPIO_Speed = GPIO_Speed_2MHz; // предназначение - общее, выход PORT.GPIO_Mode = GPIO_Mode_IPU; // настроили ногу в порту B GPIO_Init(GPIOB, &PORT); }; void SPIInit(void) { SPI_InitTypeDef SPIConf; // указываем, что используем мы только передачу данных SPIConf.SPI_Direction = SPI_Direction_1Line_Tx; // указываем, что наше устройство - Master SPIConf.SPI_Mode = SPI_Mode_Master; // передавать будем по 8 бит (=1 байт) SPIConf.SPI_DataSize = SPI_DataSize_8b; // режим 00 SPIConf.SPI_CPOL = SPI_CPOL_Low; SPIConf.SPI_CPHA = SPI_CPHA_1Edge; // будем устанавливать SS программно (даже необязательно тогда будет припаивать SS) SPIConf.SPI_NSS = SPI_NSS_Soft; // установим скорость передачи (опытным путём выяснили, что разницы от изменения этого параметра нет) SPIConf.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; // передаём данные старшим битом вперёд (т.е. слева направо) SPIConf.SPI_FirstBit = SPI_FirstBit_MSB; // внесём настройки в SPI SPI_Init(SPI1, &SPIConf); // включим SPI1 // SPI_Cmd(SPI1, ENABLE); } Последний кусок из примера в интернете.
×
×
  • Создать...