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

 
 
> Как заставить SPI работать (stm32f4Discovery), Использую стандартную библиотеку: stmperiph
BlackOps
сообщение Jun 8 2012, 04:13
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 618
Регистрация: 7-06-08
Из: USSR
Пользователь №: 38 121



конфигурирую пины PB13 - SPI2_SCK, PB15 - SPI2_MOSI: в режиме SPI только посылаю.

вот код:
CODE
int main(void)
{
/*!< At this stage the microcontroller clock setting is already configured,
this is done through SystemInit() function which is called from startup
file (startup_stm32f4xx.s) before to branch to application main.
To reconfigure the default setting of SystemInit() function, refer to
system_stm32f4xx.c file
*/
uint8_t d0 = 0xd9; // 11011001, test data0




// declare SPI init data structure
SPI_InitTypeDef spi2;

// declare GPIO init data structure
GPIO_InitTypeDef gpiob;

// enable SPI2 clock
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

// enable SPI2 pins
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

// connecting Alternate Functions to GPIOB pins
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);


// GPIOB configuration
gpiob.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
gpiob.GPIO_Mode = GPIO_Mode_AF;
gpiob.GPIO_OType = GPIO_OType_PP;
gpiob.GPIO_Speed = GPIO_Speed_50MHz;
gpiob.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &gpiob);

// initializing the SPI2
SPI_I2S_DeInit(SPI2);
spi2.SPI_Direction = SPI_Direction_1Line_Tx;
spi2.SPI_DataSize = SPI_DataSize_8b;
spi2.SPI_CPOL = SPI_CPOL_High;
spi2.SPI_CPHA = SPI_CPHA_1Edge;
spi2.SPI_FirstBit = SPI_FirstBit_LSB;
spi2.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
spi2.SPI_Mode = SPI_Mode_Master;

SPI_Init(SPI2, &spi2);


// enable the SPI2
SPI_Cmd(SPI2, ENABLE);

// sending the data
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2, (uint8_t)d0);



while (1)
{}
}



проблема такая, когда проверяю ножку пина PB15, то вижу клок в 5.25МГц, что вобщемто и должно быть т.к. я прескалер поставил _8.
Но на ножке PB15, с момента запуска платы никаких данных не постыпает.
SPIМне кажется сам модуль SPI вроде как сконфигурирован, но какая то проблема с посыланием данных, я сам взял это с какого то примера. Сам код отвечающий за посылку данных выделен.
// sending the data
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2, (uint8_t)d0);



я просто жду пока Тх буффер будет свободен, и заливаю туда байт.

Но в чем же причина, почему я не вижу активности на пине MOSI? (PB15)

Сообщение отредактировал IgorKossak - Jun 8 2012, 06:37
Причина редактирования: [codebox] для длинного кода!!!


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Jun 8 2012, 09:43
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



У меня работает в режиме Мастер при такой конфигурации.
Правда, без использования стандартной библиотеки.

Код
//-----------------------------------------------------------------------------
//    void init_SPI2(void)
//-----------------------------------------------------------------------------
void init_SPI2(void)
{
    SPI2->CR1 =
            SPI_CR1_SSM
        | SPI_CR1_SSI
        | SPI_CR1_MSTR
        | SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0;

    SPI2->CR2 =
            SPI_CR2_SSOE;

    SPI2->CR1 =
            SPI_CR1_SPE
        | SPI_CR1_SSM
        | SPI_CR1_SSI
        | SPI_CR1_MSTR
        | SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0;
}

//-----------------------------------------------------------------------------
//    void __inline init_SYSTEM(void)
//-----------------------------------------------------------------------------
void __inline init_SYSTEM(void)
{
    RCC->AHB1ENR = RCC_AHB1ENR_GPIOBEN;
    RCC->APB1ENR = RCC_APB1ENR_SPI2EN;
}

//-----------------------------------------------------------------------------
//    void __inline init_GPIO(void)
//-----------------------------------------------------------------------------
void __inline init_GPIO(void)
{
    GPIOB->MODER = GPIO_MODER_MODER13_1  | GPIO_MODER_MODER14_1  | GPIO_MODER_MODER15_1
    GPIOB->AFR[1] = (5 << ((13 - 8) << 2)) | (5 << ((14 - 8) << 2)) | (5 << ((15 - 8) << 2));
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- BlackOps   Как заставить SPI работать (stm32f4Discovery)   Jun 8 2012, 04:13
- - adnega   Может битик SYSCFGEN в RCC_APB2ENR взвести?   Jun 8 2012, 04:30
- - AHTOXA   Цитата(BlackOps @ Jun 8 2012, 10:13) Но в...   Jun 8 2012, 05:14
|- - adnega   Цитата(AHTOXA @ Jun 8 2012, 09:14) Вы заб...   Jun 8 2012, 05:20
|- - BlackOps   Цитата(AHTOXA @ Jun 8 2012, 10:14) Вы заб...   Jun 8 2012, 05:26
|- - AHTOXA   Пардон, я не разглядел, что речь идёт о F4. Там эт...   Jun 8 2012, 05:38
- - BlackOps   ну тогда в чем же еще может там быть проблема? я с...   Jun 8 2012, 05:44
|- - AHTOXA   Да вроде нормально всё. Попробуйте задать spi2.SPI...   Jun 8 2012, 06:06
- - BlackOps   попробовал. не помогло. мало того да и пин PB13 да...   Jun 8 2012, 06:08
- - BlackOps   что еще может быть? может данные как то по другому...   Jun 8 2012, 07:33
|- - AHTOXA   Данные вы отправляете правильно. Попробуйте ещё по...   Jun 8 2012, 07:40
- - Gunner   QUOTE (BlackOps @ Jun 8 2012, 07:13) конф...   Jun 8 2012, 08:41
- - BlackOps   т.е. сконфигурировать NSS и подать на него Vdd?   Jun 8 2012, 09:05
|- - Gunner   QUOTE (BlackOps @ Jun 8 2012, 12:05) т.е....   Jun 8 2012, 09:23
- - BlackOps   сделал. не сработало. вот что получаю: пин MOSI п...   Jun 8 2012, 09:36
- - BlackOps   ну хоть дернулся пин PB15! какой то сдвиг, где...   Jun 8 2012, 09:51
- - BlackOps   Вобщем получилось наконец-то завести SPI2. Кстати...   Jun 11 2012, 00:29


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 15:35
Рейтинг@Mail.ru


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