SPI control register 1 (SPI_CR1)
Первый регистр управления SPI
Смещение (Address offset): 0x00
Reset value: 0x0000
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| BIDIMODE | BIDIOE | CRCEN | CRCNEXT | DFF | RXONLY | SSM | SSI |
| rw | rw | rw | rw | rw | rw | rw | rw |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| LSBFIRST | SPE | BR[2:0] | MSTR | CPOL | CPHA | ||
| rw | rw | rw | rw | rw | rw | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 : режим однонаправленной передачи данных по двум линиям
1 : режим двунаправленной передачи данных по одной линии (Bidirectional data mode)
Бит недоступен в режиме I2S
Этот бит в сочетании с битом BIDImode определяет направление передачи в двунаправленном режиме.
0 : вывод данных запрещён, режим приёма (receive-only mode)
1 : вывод данных разрешён, режим передачи (transmit-only mode)
В режиме ведущего (master) используется вывод MOSI, в режиме ведомого (slave) используется вывод MISO.
Бит недоступен в режиме I2S.
0 : расчет CRC отключен.
1 : расчет CRC включен.
Устанавливается только при отключенном контроллере: SPE = "0" в этом регистре.
Бит недоступен в режиме I2S.
0 : следующий символ - данные
1 : следующий символ - CRC
В полнодуплексном режиме, или при передаче в однонаправленном режиме этот бит должен быть установлен сразу после записи последних данных в регистр SPI_DR.
При приёме в однонаправленном режиме этот бит должен быть установлен сразу после приёма предпоследних данных.
Бит должен быть сброшен в режиме передачи DMA.
Бит недоступен в режиме I2S.
0 : 8-битные данные
1 : 16-битные данные
Устанавливается только при отключенном контроллере: SPE = "0" в этом регистре.
Бит недоступен в режиме I2S.
0 : полнодуплексный обмен
1 : только приём данных, передача запрещена
---
Бит недоступен в режиме I2S.
0 : программное управление slave-устройствами отключено
1 : программное управление slave-устройствами включено
Когда бит установлен - на вывод NSS подаётся значение бита SSI.
Бит недоступен в режиме I2S.
Этот бит действует только при установленном бите SSM.
Значение этого бита принудительно записывается на вывод NSS, а другие возможности управления выводом NSS игнорируется.
Бит недоступен в режиме I2S.
0 : первым передаётся старший значащий бит (MSb - Most Significant Bit)
1 : первым передаётся младший значащий бит (LSb - Least Significant Bit)
Бит нельзя изменять во время обмена данными.
Бит недоступен в режиме I2S.
0 : контроллер SPI отключен
1 : контроллер SPI включен
Отключение SPI-контроллера должно выполняться по процедуре, описанной в Reference manual.
Бит недоступен в режиме I2S.
000 : fPCLK/2
001 : fPCLK/4
010 : fPCLK/8
011 : fPCLK/16
100 : fPCLK/32
101 : fPCLK/64
110 : fPCLK/128
111 : fPCLK/256
Бит нельзя изменять во время обмена данными.
Бит недоступен в режиме I2S.
0 : slave-режим
1 : master-режим
Бит нельзя изменять во время обмена данными.
Бит недоступен в режиме I2S.
0 : при отсутствии передачи (IDLE) уровень линии CK - "0"
1 : при отсутствии передачи (IDLE) уровень линии CK - "1"
Бит нельзя изменять во время обмена данными.
Бит недоступен в режиме I2S.
0 : захват данных по первому фронту тактовых импульсов
1 : захват данных по второму фронту тактовых импульсов
Бит нельзя изменять во время обмена данными.
Бит недоступен в режиме I2S.
/******************* Bit definition for SPI_CR1 register ********************/
#define SPI_CR1_CPHA ((uint16_t)0x0001) /* Clock Phase */
#define SPI_CR1_CPOL ((uint16_t)0x0002) /* Clock Polarity */
#define SPI_CR1_MSTR ((uint16_t)0x0004) /* Master Selection */
#define SPI_CR1_BR ((uint16_t)0x0038) /* BR[2:0] bits (Baud Rate Control) */
#define SPI_CR1_BR_0 ((uint16_t)0x0008) /* Bit 0 */
#define SPI_CR1_BR_1 ((uint16_t)0x0010) /* Bit 1 */
#define SPI_CR1_BR_2 ((uint16_t)0x0020) /* Bit 2 */
#define SPI_CR1_SPE ((uint16_t)0x0040) /* SPI Enable */
#define SPI_CR1_LSBFIRST ((uint16_t)0x0080) /* Frame Format */
#define SPI_CR1_SSI ((uint16_t)0x0100) /* Internal slave select */
#define SPI_CR1_SSM ((uint16_t)0x0200) /* Software slave management */
#define SPI_CR1_RXONLY ((uint16_t)0x0400) /* Receive only */
#define SPI_CR1_DFF ((uint16_t)0x0800) /* Data Frame Format */
#define SPI_CR1_CRCNEXT ((uint16_t)0x1000) /* Transmit CRC next */
#define SPI_CR1_CRCEN ((uint16_t)0x2000) /* Hardware CRC calculation enable */
#define SPI_CR1_BIDIOE ((uint16_t)0x4000) /* Output enable in bidirectional mode */
#define SPI_CR1_BIDIMODE ((uint16_t)0x8000) /* Bidirectional data mode enable */