Staram się uruchomić SPI na mikrokontrolerze STM32L432. Wszystko działa jednak SPI wysyła 16 bitowe ramki, a nie 8 bitowe tak jakbym sobie ja życzył. Czy może ktoś mi podpowiedzieć co robię źle ? Podglądając rejestry przy użyciu debugera w rejestrze CR2 jest ustawiona długość na 8 bitów.
Kod: Zaznacz cały
#include <stm32l432xx.h>
#include <stdbool.h>
#include <stdlib.h>
#define CS_HIGH (GPIOB -> BSRR = GPIO_BSRR_BS0)
#define CS_LOW (GPIOB -> BSRR = GPIO_BSRR_BR0)
int main(void)
{
RCC -> AHB2ENR |= RCC_AHB2ENR_GPIOBEN | RCC_AHB2ENR_GPIOAEN;
RCC -> APB2ENR |= RCC_APB2ENR_SPI1EN;
__DSB();
GPIOB -> MODER &= ~GPIO_MODER_MODE0_1; // CS
CS_HIGH;
// MOSI SCK
GPIOA -> MODER &= ~(GPIO_MODER_MODE1_0 | GPIO_MODER_MODE7_0);
GPIOA -> AFR[0] |= GPIO_AFRL_AFSEL7_0 | GPIO_AFRL_AFSEL7_2;
GPIOA -> AFR[0] |= GPIO_AFRL_AFSEL1_0 | GPIO_AFRL_AFSEL1_2;
SPI1 -> CR1 = SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_SPE | SPI_CR1_BR_1 | SPI_CR1_MSTR |SPI_CR1_CPOL | SPI_CR1_CPHA;
SPI1 -> CR2 = SPI_CR2_DS_0 | SPI_CR2_DS_1 | SPI_CR2_DS_2;
while(true)
{
CS_LOW;
SPI1->DR = 0x0F;
while(!(SPI1->SR & SPI_SR_TXE));
while(SPI1->SR & SPI_SR_BSY);
CS_HIGH;
}
return EXIT_SUCCESS;
}
Pozdrawiam i dzięki za każdą podpowiedź