Hallo, auf meiner SPI kann ich im Oszilloskop sehen, dass immer 9 Takte kommen auf SCK. Ist das so korrekt? Auf einer funktionieren Hardware (µC getauscht) sind es 8 Takte (zur Ansteuerung eines Displays). Ich denke deswegen sehe ich nichts auf meinem Display. Habe ich evtl. etwas bei der Konfiguration übersehen? Ich mache immer CPOL und CPHA = 1, MSB first. Es handelt sich um einen STM32F413 Danke für eure Hilfe.
1 | #define T_ALTERNATE 0x02
|
2 | #define MODE(a, b, c) (a)->MODER |= ((c)<<(2*b))
|
3 | #define AFUNC(a,b,c) (a)->AFR[(b)/8] |= ((c)<<(4*((b)%8)))
|
4 | |
5 | RCC->APB1ENR |= RCC_APB1ENR_SPI3EN; |
6 | RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; |
7 | |
8 | MODE(GPIOC, 10,T_ALTERNATE); |
9 | MODE(GPIOC, 12,T_ALTERNATE); |
10 | AFUNC(GPIOC, 10, 5); |
11 | AFUNC(GPIOC, 12, 5); |
12 | |
13 | void SPI_Init(SPI_TypeDef * oSPI, uint8_t ucPrescaler){ |
14 | oSPI->CR1 |= SPI_CR1_CPHA; |
15 | oSPI->CR1 |= SPI_CR1_CPOL; |
16 | oSPI->CR1 |= SPI_CR1_MSTR; |
17 | oSPI->CR1 |= (ucPrescaler<<3); |
18 | oSPI->CR2 |= SPI_CR2_FRF; |
19 | oSPI->CR1 |= SPI_CR1_SPE; |
20 | }
|
21 | |
22 | uint8_t SPI_Send(SPI_TypeDef * oSPI, uint8_t cVal){ |
23 | while(oSPI->SR & SPI_SR_BSY); |
24 | oSPI->DR = cVal; |
25 | while(oSPI->SR & SPI_SR_BSY); |
26 | |
27 | return oSPI->DR; |
28 | }
|