SPI1 beim STM32F103

OP #1408944
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
}
#1408963
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.
#1408967
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.