www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 103RB und Probleme mit SPI1


Autor: Jean Player (fubu1000)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Ich bin gerade dabei mich mit den neuen ARM-Cortex anzufreunden. Klappt 
auch alles sehr schön.
Mein Problem ist zur Zeit die SPI1-Schnittstelle zu implementieren. Die 
SPI2-Schnittstelle läuft mit meinem produzierten Code ohne Probleme. Muß 
ich irgendwelche Besonderheiten bei SPI1 beachten, die ich übersehen 
habe ???

Mein Controller ist ein STM32F103RB, arbeiten tue ich mit IAR ARM v. 
5.11 , derzeit noch mit der 32K Kickstart Edition.

Wie gesagt funzt SPI2, nur SPI1 nicht. In der Schleife zum abfragen, ob 
das SPI-Schieberegister leer ist, bleibt das Proggi hängen.
--> while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);


Hier mal meine Init:
SPI_InitTypeDef SPI_struct;

  //deInit
  SPI_I2S_DeInit(SPI1);
  //GPIO_PinRemapConfig(GPIO_Remap_SPI1,DISABLE);

    /*Initialize Pins*/
         //SS Pin
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
   
   //CD Pin
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
   GPIO_Init(GPIOA, &GPIO_InitStructure);

  //WP Pin
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
   GPIO_Init(GPIOC, &GPIO_InitStructure);

  //SCK / MISO / MOSI Pins
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 |GPIO_Pin_7;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
  
    /* Enable GPIOA clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC , ENABLE);

    /* SPI1 Periph clock enable */
    RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);


//SPI_struct.
  SPI_struct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_struct.SPI_Mode = SPI_Mode_Master;
  SPI_struct.SPI_DataSize = SPI_DataSize_8b;
  SPI_struct.SPI_CPOL = SPI_CPOL_Low;
  SPI_struct.SPI_CPHA = SPI_CPHA_1Edge;
  SPI_struct.SPI_NSS = SPI_NSS_Soft;
  SPI_struct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
  SPI_struct.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_struct.SPI_CRCPolynomial = 7;

  //SPI init
  SPI_Init(SPI1,  &SPI_struct);

  //Enable SPI
  SPI_Cmd(SPI1 , ENABLE);

Und hier der Sende Versuch:
u8 MmcTransferByte (SPI_TypeDef* SPIx , u8 ch)
{
  SPI_I2S_SendData(SPIx, ch);
  while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);

  return 0;
}

Vielleicht hat ja einer ne Idee woran es liegt. Ich stehe gerade aufm 
Schlauch. Im Anhang mal meine gesamte Test Main.c.

Dank schon mal, Fabian.

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
push ;-)

Achso und ich nutze die EWARM-libs.

Thx und gruß.

Autor: Michael B. (bubi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Bin auch gerade dabei den SPI1 mit dem S65 Display zu verbinden, dabei 
bin ich über deinen Code gestoßen. Bei mir gehts nämlich auch nicht ;)

RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

Müsste eigentlich einen assert_param Fehler geben wenn du mit DEBUG 
kompelierst. (also das define in der conf.h)

SPI1 hängt am APB2.

Wahrscheinlich wirds dir nichtmehr nützen, aber das Web speichert ja 
lange, dann findet vielleicht ein anderer eine Lösung damit ;)

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.