Forum: Mikrocontroller und Digitale Elektronik SPI1 beim STM32F103


von C. H. (hedie)


Lesenswert?

Hallo

ich bin neu was das Programmieren der STM32 anbelangt...

Da ich gerne alles von grundauf verstehe habe ich die Angewohnheit bei 
einem Mikrocontroller nicht auf vorgefertigte Funktionen zurückzugreifen 
sondern selbst direkt ind die Register zu schreiben...

Ich möchte gerne das SPI1 welches am APB2 hängt in betrieb nehmen...
Dazu habe ich folgendes Programm gerüst geschrieben
doch leider klappt es nicht...
Ich habe auch schon einmal einen Code welchen ich hier im Forum gefunden 
habe zum SPI1 ausprobiert jedoch auch ohne erfolg, deshalb bin ich 
wieder zum ursprünglichen code zurückgekehrt...

Ich hoffe ihr sieht meinen Fehler...

Besten Dank schonmal
1
int main(void)
2
{
3
  
4
#ifdef DEBUG
5
  debug();
6
#endif
7
8
  /* System Clocks Configuration **********************************************/
9
  RCC_Configuration();   
10
11
  /* NVIC Configuration *******************************************************/
12
  NVIC_Configuration();
13
14
  /* SysTick end of count event each 1ms with input clock equal to 9MHz (HCLK/8, default) */
15
  SysTick_SetReload(9000);
16
17
  /* Enable SysTick interrupt */
18
  SysTick_ITConfig(ENABLE);
19
20
  /* Initial LED PB[8..15] */
21
  
22
23
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_LED, ENABLE);
24
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
25
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
26
  GPIO_InitStructure.GPIO_Pin = LED1_PIN |
27
                                LED2_PIN |
28
                                LED3_PIN |
29
                                LED4_PIN |
30
                                LED5_PIN |
31
                                LED6_PIN |
32
                                LED7_PIN |
33
                                LED8_PIN;
34
35
36
  GPIO_Init(LED_PORT, &GPIO_InitStructure);  
37
38
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
39
  SPI1->CR1 = 0x0B7C;   //Konfigurieren 
40
  SPI1->CR2 = 0x0063;   //Konfigurieren
41
42
  while(1)                          
43
  {
44
    GPIOB->ODR = (SPI1->SR & 0x00FF) << 8; //Ausgabe des SR an den LED's
45
    SPI1->DR = 0xFF00; //Test Daten Schreiben
46
    SPI1->DR = 0x00FF; //Test Daten Schreiben
47
    
48
  }  
49
}

von (prx) A. K. (prx)


Lesenswert?

Ich bin ebenfalls ein Freund von direkten Registern. Aber ich bin kein 
Freund von Hexwerten in Steuerregistern mit vielen kleinen Bits, die ich 
als Leser jetzt erst einmal auseinander nehmen müsste um das zu 
verstehen. So hatte STM zu diesem Behufe den Bits doch extra Namen 
verpasst und die sogar ins *.h File reingeschrieben.

von (prx) A. K. (prx)


Lesenswert?

Aber allem Hex zu trotz, eines sehe ich: Ohne Pins wird das nix. Dein 
SPI mag zwar einen Takt haben, aber Pins hat es keine. So wie man die 
LED Pins erst einmal als Ausgänge definieren muss, muss man die SPI 
Anschlüsse als Alternate Funktion Pins definieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.