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

 
 
> Проблемы с SPI на STM32L151xxx
AndreyKeil
сообщение Jan 15 2017, 17:16
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



При установке флага SPE, сбрасывается флаг MSTR в регистре SPI_CR1 контроллера STM32L151VBT6. В результате SPI не работает. В чем может быть проблема?
Код
void SPI_Config() {
    RCC_APB2ENR|=
        0<<14|//USART1EN:
        1<<12|//SPI1EN: 1-разр.SPI1
        0<<11|//SDIOEN:
        0<< 9|//ADC1EN:
        0<< 4|//TIM11EN:
        0<< 3|//TIM10EN:
        0<< 2|//TIM9EN:
        0<< 0;//SYSCFGEN:

    GPIOA_AFRL|=
        5<<28|//7 вывод
        5<<20;//5 вывод

    ConfPort_UltraLowPower(A, 7, cAlter, cPpull, cOut10MH, cNoPud);    //SDA индикатора
    //SDA_HI;
    ConfPort_UltraLowPower(A, 5, cAlter, cPpull, cOut10MH, cPulDow);    //SCL индикатора
    //SCL_LO;

    SPI1_I2SCFGR&= (ushort)~0x800;
    SPI1_CR1=
        0<<15| //BIDI MODE: 1-передача только в одну сторону
        1<<14| //BIDI OE: 1-вывод включен (только передача)
        0<<13| //CRC EN: 0-CRC не считать
        0<<12| //CRC NEXT: 0-передача без CRC
        0<<11| //DFF: 0- режим 8бит, 1- режим 16бит (SPE=0 надо запрещать)
        0<<10| //RX ONLY: 0-режим передача и прием
        1<< 9| //SSM: 0-режим slave запрещен
        0<< 8| //SSI:
        0<< 7| //LSB: FIRST 0-начинать со старш.бита
        0<< 6| //SPE: 1-разрешение SPI
        1<< 3| //BR[2:0] 0-clk:2, 1-clk:4
        1<< 2| //MSTR: 1-мастер
        0<< 1| //CPOL
        0<< 0; //CPHA

    //SPI1_I2SPR= 7;
    SPI1_CR1|= 0x40;    //SPE: 1-разрешение SPI
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
controller_m30
сообщение Jan 15 2017, 22:15
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



В AVR есть подобная проблема с SPI: если на ножке SS при первой инициализации присутствует лог.0, то модуль переходит в режим Slave (бит Master сбрасывается). Здесь возможно тоже самое.

Вот товарищ пишет про SPI в STM32 (описание регистра SPI_CR1) о нюансе запуска в режиме Master.
Цитата
Если же SPI модуль работает в режиме мастера, то ногу NSS нужно подтянуть к питанию или включить программное управление (SSM=1) и установить бит SSI. В противном случае - SPI модуль подумает, что появился новый мастер и сам станет слейвом. Этот момент для меня был не совсем очевиден и я потратил много времени чтоб разобраться.


Сообщение отредактировал controller_m30 - Jan 15 2017, 22:21
Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Jan 15 2017, 23:17
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



Все верно! sm.gif Спасибо! Биты SSM и SSI надо установить в единицу. Теперь ошибки не возникает, но передачи все равно нет. Програмная реализация SPI работает.
Какая конфигурация ножки CS (она же NSS или SS) должна быть: альтернативная или обычная программная (выход)?
Разобрался. Правильный код:
Код
SPI1_CR1=
             1<<15| //BIDI MODE: 1-передача только в одну сторону
        1<<14| //BIDI OE: 1-вывод включен (только передача)
        0<<13| //CRC EN: 0-CRC не считать
        0<<12| //CRC NEXT: 0-передача без CRC
        0<<11| //DFF: 0- режим 8бит, 1- режим 16бит (SPE=0 надо запрещать)
        0<<10| //RX ONLY: 0-режим передача и прием
        1<< 9| //SSM: 0-режим slave запрещен
        1<< 8| //SSI:
        0<< 7| //LSB: FIRST 0-начинать со старш.бита
        0<< 6| //SPE: 1-разрешение SPI
        1<< 3| //BR[2:0] 0-clk:2, 1-clk:4
        1<< 2| //MSTR: 1-мастер
        1<< 1| //CPOL
        1<< 0; //CPHA

Конфигурация ножки CS (она же NSS или SS) должна быть обычная программная как выход.
Спасибо всем, кто смотрел.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 06:47
Рейтинг@Mail.ru


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