реклама на сайте
подробности

 
 
> STM32F100C8 Не могу сделать Remap SPI1, На AF SPI1 работает, нужен Remap
KWlad
сообщение Mar 7 2017, 17:11
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 7-03-17
Пользователь №: 95 736



На AF SPI1 (PA4-PA7) работает, нужен Remap на PB3-PB5, PA15. Процессор STM32F100C8. Перекопал и-нет и перепробовал разные примеры, но запустить не могу. Причем, если на работающем AF SPI1 сделать
Код
// Ремапим
    AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
    AFIO->MAPR |= AFIO_MAPR_SPI1_REMAP;
То основной отключается, а "ремаповный" не работает.

Привожу кусок инициализации, может кто-то подскажет, в чем проблема!
Технически МП проверил, нужные Рин ы устанавливаются и сбрасываются прграммно.

CODE
// включаем тактирование (=питание) на порты 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);
}
Последний кусок из примера в интернете.

Сообщение отредактировал IgorKossak - Mar 8 2017, 13:04
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th August 2025 - 22:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.02307 секунд с 7
ELECTRONIX ©2004-2016