www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI1 beim STM32F103


Autor: Claudio H. (Firma: BLS-Electronics) (hedie)
Datum:

Bewertung
0 lesenswert
nicht 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
int main(void)
{
  
#ifdef DEBUG
  debug();
#endif

  /* System Clocks Configuration **********************************************/
  RCC_Configuration();   

  /* NVIC Configuration *******************************************************/
  NVIC_Configuration();

  /* SysTick end of count event each 1ms with input clock equal to 9MHz (HCLK/8, default) */
  SysTick_SetReload(9000);

  /* Enable SysTick interrupt */
  SysTick_ITConfig(ENABLE);

  /* Initial LED PB[8..15] */
  

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_LED, ENABLE);
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Pin = LED1_PIN |
                                LED2_PIN |
                                LED3_PIN |
                                LED4_PIN |
                                LED5_PIN |
                                LED6_PIN |
                                LED7_PIN |
                                LED8_PIN;


  GPIO_Init(LED_PORT, &GPIO_InitStructure);  

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  SPI1->CR1 = 0x0B7C;   //Konfigurieren 
  SPI1->CR2 = 0x0063;   //Konfigurieren

  while(1)                          
  {
    GPIOB->ODR = (SPI1->SR & 0x00FF) << 8; //Ausgabe des SR an den LED's
    SPI1->DR = 0xFF00; //Test Daten Schreiben
    SPI1->DR = 0x00FF; //Test Daten Schreiben
    
  }  
}

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.