Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 SPI2
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
juvf
инициализация

Код
Код
void initSpi()
{
    RCC_APB2ENR_bit.IOPAEN = 1; // Разрешить тактирование PORTA
    RCC_APB2ENR_bit.IOPBEN = 1; // Разрешить тактирование PORTB
    //конфигурируем ножки для SPI
    RCC_APB2ENR_bit.AFIOEN = 1; // Тактирование альтернативных функций GPIO.
    GPIOB_CRH_bit.MODE13 = 0x3; // out < 50 MHz SPISCK
    GPIOB_CRH_bit.CNF13 = 0x2; // alt push pull
    GPIOB_CRH_bit.MODE14 = 0x0; // input        SPIMISO
    GPIOB_CRH_bit.CNF14 = 0x2; // float
    GPIOB_BSRR_bit.BS14 = 1;
    GPIOB_CRH_bit.MODE15 = 0x3; // out < 50 MHz SPIMOSI
    GPIOB_CRH_bit.CNF15 = 0x2; // alt push pull
    //EEPROM ~CS
    GPIOB_CRL_bit.MODE7 = 0x1; // out < 10 MHz ~SS
    GPIOB_CRL_bit.CNF7 = 0x0; // push pull
    GPIOB_BSRR_bit.BS7 = 0x1; // set hold hi
    //FRAM ~CS
    GPIOA_CRH_bit.MODE12 = 0x1; // out < 10 MHz ~SS
    GPIOA_CRH_bit.CNF12 = 0x0; // push pull
    GPIOA_BSRR_bit.BS12 = 0x1; // set hold hi

    RCC_APB1ENR_bit.SPI2EN = 1; //включим SPI
    SPI2_CR1 = 0;
    SPI2_CR2 = 0;
    SPI2_CR1_bit.BR = 0x4; // 22МГц/32 ~ 600 kHz on spi
    SPI2_CR1_bit.MSTR = 0x1;
    SPI2_CR1_bit.SSI = 0x1;
    SPI2_CR1_bit.SSM = 0x1;
    SPI2_CR1_bit.SPE = 0x1;
}


код рабоающий с SPI
Код
Цитата
uint8_t readFramStatus()
{
enableFram();
SPI2_DR = FRAM_RDSR;
while(SPI2_SR_bit.BSY == 1);
uint8_t byte = SPI2_DR;
SPI2_DR = 0; //читаем данные
while(SPI1_SR_bit.RXNE == 0); //в этом месте зависаем
byte = SPI2_DR;
disableFram();
return byte;
}

Зависает на строчке while(SPI1_SR_bit.RXNE == 0)
смотрел отладчик..... ни разу не видел, чтобы SPI2->RXNE встал в 1. Тот же код с тем же камнем на SPI1 прекрасно работает. Смотрел ноги логическим анализатором.... все такты, cs, miso и mosi - все прекрасно... клкоки есть, есть запрос на mosi, есть ответ на miso.... но почемуто бит приема ни кога не встает в 1. Почему? может есть ещё какието смежные конфигурациолнные биты у ядра, которые я не проинитил?

ps проверил на 2-х платах. процессор STM32F100C8T6
mdmitry
Цитата(juvf @ Oct 11 2013, 17:42) *
while(SPI1_SR_bit.RXNE == 0); //в этом месте зависаем

А может надо
Код
while(SPI2_SR_bit.RXNE == 0)
juvf
да....
в форуме код перечитал и тоже заметил.... копепаст с SPI1.

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.