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

 
 
> STM32F0 и SPI, почему-то 2 байта вместо одного
toweroff
сообщение Sep 2 2015, 19:03
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Доброго времени

Пытаюсь настроить сабж:
Код
    // Configure SPI2 pins
    
    // Enable PORTB and PORTA clock
    RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
    // Configure pins
    GPIOB->MODER &= ~(GPIO_MODER_MODER12 | GPIO_MODER_MODER13 | GPIO_MODER_MODER14 | GPIO_MODER_MODER15); // Clear to default function pins
    // Set alternate function pins mode
    GPIOB->MODER |= GPIO_MODER_MODER12_1 | GPIO_MODER_MODER13_1 | GPIO_MODER_MODER14_1 | GPIO_MODER_MODER15_1;
    
    // Set port speed to HIGH
    GPIOB->OSPEEDR |= GPIO_OSPEEDR_OSPEEDR12 | GPIO_OSPEEDR_OSPEEDR13 | GPIO_OSPEEDR_OSPEEDR14 | GPIO_OSPEEDR_OSPEEDR15;
    
    // Set pulldown for SCK and none for other
    GPIOB->PUPDR &= ~(GPIO_PUPDR_PUPDR12 | GPIO_PUPDR_PUPDR13 | GPIO_PUPDR_PUPDR14 | GPIO_PUPDR_PUPDR15);
    
    GPIOB->PUPDR |= GPIO_PUPDR_PUPDR13_1;
    
    // Set alternate functions to pins
    GPIOB->AFR[1] &= ~(GPIO_AFRH_AFR12 | GPIO_AFRH_AFR13 | GPIO_AFRH_AFR14 | GPIO_AFRH_AFR14); // Clear to default (SPI2_NSS, SPI2_SCK, SPI2_MISO, SPI2_MOSI
    GPIOB->AFR[1] |= (GPIO_AFRH_AFR12_(0) | GPIO_AFRH_AFR13_(0) | GPIO_AFRH_AFR14_(0) | GPIO_AFRH_AFR15_(0)); // Set to AltFunc 0 (SPI2_NSS, SPI2_SCK, SPI2_MISO, SPI2_MOSI

    SPI2->CR1 = SPI_CR1_BR_0 | SPI_CR1_BR_1; // FPCLK/16, CPOL=0, CPHA=0
    SPI2->CR2 = SPI_CR2_DS_0| SPI_CR2_DS_1 | SPI_CR2_DS_2 | SPI_CR2_NSSP; // 8 bits, NSS enabled
    SPI2->I2SCFGR = 0UL; // SPI selected, I2S disabled
    SPI2->CR1 |= SPI_CR1_SPE; // SPI enable


и отправляю в цикле вот такой функцией:
Код
void spi_update(uint8_t data)
{
    while(SPI2->SR & SPI_SR_BSY);
    SPI2->DR = data;
    while(SPI2->SR & SPI_SR_BSY);
    while (!(SPI2->SR & SPI_SR_RXNE));
    spi_in = SPI2->DR;
}


отправляю байт с одной единичкой. В результате - посылка из необходимых 8 бит состоит из 2х - 8+8 бит. Между ними - промежуток в 5 длин положительного клока, потом опять две посылки и т.д.
В первой посылке - моя единичка, во второй - нули
Что за фигня? NSS дергается для каждой посылки корректно
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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