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

Непонятки с SPI

Где вообще свет в конце тунелля )

Вот такая штука всегда выводит 16 тактов, на бит DS не реагирует, это так и должно быть и для чего тогда DS ?

те вывести один байт невозможно ?

  SPI1->CR1 = 0;
  SPI1->CR2 = 0;
  
  SPI1->CR1 = 
      1<<SPI_CR1_LSBFIRST_Pos     // MSB передается первым
    | 1<<SPI_CR1_SSM_Pos          // Программное управление ведомым отключено
    | 1<<SPI_CR1_SSI_Pos          // Значение этого бита принудительно подается на NSS 
    | 0x02<<SPI_CR1_BR_Pos        // 01= F_PCLK/4 = 64/4=16мгц
    | 1<<SPI_CR1_MSTR_Pos;         // Режим Master
   
  
  SPI1->CR2  |= (0x0111<<SPI_CR2_DS_Pos);  // длинна пакета 8 бит
  
  SPI1->CR1 |= 1<<SPI_CR1_SPE_Pos; // вкл SPI

 

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


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

15 минут назад, whale сказал:

0x0111<<SPI_CR2_DS_Pos

0x111 = 1 0001 0001 в бинарном виде или 273 в десятичном. Явно тут у вас ошибка.

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


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

14 минут назад, whale сказал:

Где вообще свет в конце тунелля )

Если вы хотите передать 8 и менее бит, то в DR вы должны записывать не как 16-битный регистр, а как в 8-битный

Типа такого *(uint_8t *)&SPI1->DR = 0x12

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


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

Just now, MrBearManul said:

0x111 = 1 0001 0001 в бинарном виде или 273 в десятичном. Явно тут у вас ошибка.

Там было цифра 7 случайно сюда запостил в таком виде

Just now, adnega said:

Если вы хотите передать 8 и менее бит, то в DR вы должны записывать не как 16-битный регистр, а как в 8-битный

Типа такого *(uint_8t *)&SPI1->DR = 0x12

Красота страшная сила ! работает ! Правда тогда вопрос а если 5 или 4 бита надо ? ставим DS на 4 бита все равно выводит 8 

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

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


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

42 минуты назад, adnega сказал:

Если вы хотите передать 8 и менее бит, то в DR вы должны записывать не как 16-битный регистр, а как в 8-битный...

Судя по RM, это относится только к приему - читать кратно FIFO Rx Threshold.
При передаче лишние биты обрезаются, опять же, как пишет мануал в описании DR

Цитата

Note: Data is always right-aligned. Unused bits are ignored when writing to the register, and read as zero when the register is read.
The Rx threshold setting must always correspond with the read access currently used.

А не, нифига. У них там чуть выше другое объяснение есть: действительно DR чувствителен к типу доступа.

P.S. Кстати, у ТС еще и режим выбран LSB-first, хотя в комментарии он пишет, что требуется MSB-first...

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


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

Just now, Arlleex said:

 


P.S. Кстати, у ТС еще и режим выбран LSB-first, хотя в комментарии он пишет, что требуется MSB-first...

Там тоже был нолик но в процессе эксперимента записался 1 )

Just now, Arlleex said:

Судя по RM, это относится только к приему - читать кратно FIFO Rx Threshold.
При передаче лишние биты обрезаются, опять же, как пишет мануал в описании DR

 

У меня обрезаются на передачу только если как adnega 

сделать иначе шурует по 16 тактов

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

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


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

Я бы тогда саму структуру SPI_TypeDef переделал на

typedef struct
{
  __IO uint32_t CR1;
  __IO uint32_t CR2;
  __IO uint32_t SR;
  __IO union
  {
    uint8_t  b; // byte      access
    uint16_t h; // half-word access
    uint32_t : 32;
  }DR;
  __IO uint32_t CRCPR;
  __IO uint32_t RXCRCR;
  __IO uint32_t TXCRCR;
  __IO uint32_t I2SCFGR;
  __IO uint32_t I2SPR;
}SPI_TypeDef;

и к DR обращался ситуативно-правильно.

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


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

Я с структурами не дружу, мне асемблер ближе )

Всем спасибо, все заработало, вдруг кому еще пригодиться.

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


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

32 минуты назад, whale сказал:

Я с структурами не дружу, мне асемблер ближе )

А исходинк-то у вас на Си...

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


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

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

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

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

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

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

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

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

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

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