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

Прошу помощи в инициализации SPI2 в STM32F100

Суть проблемы в том что у меня не получается завести как в режиме мастера, так и в режиме слейва SPI2 на отладочной плате 32F100DISCOVERY.

Самое интересное то, что SPI1 я смог настроить и передавал/принимал данные через него, но при такой же инициализации SPI2 (с учетом того что он тактируется уже от APB1) я получаю полное молчание.

Пробовал и с программной реализацией NSS и с аппаратной - результата нет вообще. Я больше чем уверен в том что я чего то не учел и не прописал.

Вот код (а также прикреплен весь проект в Keil):

void init_spi2(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);			//включаем тактирование порта B
RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);			//включаем тактирование SPI2

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;				//выбераем режим - альтернативная функция с Push-Pull
 GPIO_InitStruct.GPIO_Pin 	= GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;//PB.13 - SCK, PB.14 - MISO, PB.15 - MOSI
 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOB, &GPIO_InitStruct);

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;     				//выбераем режим - с открытым стоком
 GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_12;						//PB.12 - NSS
 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOB, &GPIO_InitStruct);



SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; 	//режим - полный дуплекс
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; 				//размер пакета - 8 бит
//===========================нулевой ражим работы SPI===========================
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; 	//настройка нормального состояния на SCK (SCK опущена - когда ничего не передается/принимается)
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; 	//передача/считывание происходит по переднему фронту на MOSI/MISO
//==============================================================================
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; 					//управлять состоянием NSS програмно
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
//предделитель SCK = 32 (при 8 МГц, скорость SPI = 1/((8000000/32)/8)= 1 байт в 32 мкс)
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; 				//первым отправляется старший бит
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; 				//режим - master
SPI_Init(SPI2, &SPI_InitStructure); 						//функция инициализации SPI2 с заданной структурой

//SPI_I2S_ITConfig(SPI2,SPI_I2S_IT_RXNE,ENABLE); 				//включаем прерывание по приему байта

SPI_Cmd(SPI2, ENABLE); 							//включаем модуль SPI2

//SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set);

//NVIC_EnableIRQ(SPI2_IRQn); 						//разрешаем прерывания от SPI2
}

test7_nRF24L01_.rar

Изменено пользователем IgorKossak

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что в этот момент делает I2C? У STM32F10X есть бага, что не отключается один из сигналов SM BUS (даже при работе в I2C) - и он, возможно, и занят SPI? workaround - на время работы с SPI выключать I2C.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот непонятность в случае если наш МК работает как Slave: и нам надо передать мастеру байт, сами мы не может начать обмен с мастером и ждем пока он опустит нашу NSS в ноль. И что дальше ? Для автоматической отправки ему нашего байта, его надо просто загрузить в "SPI1(или 2)->DR" и ждать? Правильно ли я думаю что для этого у нас должно быть настроено прерывание по приёму от мастера?

Изменено пользователем allsettingsdone

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...