Forum: Mikrocontroller und Digitale Elektronik Nucleo STM32 mit MAX7219


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Kristofer W. (kristofer_w)


Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich muss mit dem Nucleo STM32 Board die MAX7219 LED-Matrix über SPI zum 
Laufen bringen, aber ich sitze seit Stunden drann und komm einfach nicht 
drauf, was ich falsch mache. Laut Logic Analyser sende ich nichts, aber 
warum?
Das einzige was ich weiß is, dass ich im Debugmodus ständig in die 
Interruptroutine reinspringe.

Bitte um Hilfe!!!

Gruß
Kris



Mein Code:

#include "stm32f30x_conf.h"
#include "stm32f30x_spi.h"
#include "stm32f30x_misc.h"

//Hilfsflag für die SPI
char spi_ready = 0;

//Eine Funktion zum Senden von Daten
void spi_send(uint16_t data)
{
  while(!spi_ready);
  spi_ready = 0;
  GPIOA->ODR &=~ GPIO_Pin_4;
  SPI_I2S_SendData16(SPI1,data);
}

//Main
int main(void)
{
  //Clock für Port A aktivieren
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  //Clock für SPI aktivieren
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

  //GPIO Konfig.
  GPIO_InitTypeDef SPI_PINS;
  SPI_PINS.GPIO_Mode = GPIO_Mode_AF;
  SPI_PINS.GPIO_OType = GPIO_OType_OD;
  //PA5 ist CLK, PA7 ist MOSI
  SPI_PINS.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
  SPI_PINS.GPIO_PuPd = GPIO_PuPd_NOPULL;
  SPI_PINS.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &SPI_PINS);
  //Chipselect einstellung , CS auf Pin PA4
  SPI_PINS.GPIO_Mode = GPIO_Mode_OUT;
  SPI_PINS.GPIO_Pin = GPIO_Pin_4;

  GPIO_Init(GPIOA, &SPI_PINS);

  //Alternative Funktion füt GPIOA einstellen
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_4);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_5);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_7);


  //SPI Konfig.
  SPI_InitTypeDef spi;
  NVIC_InitTypeDef NVIC_InitStructure;
  SPI_StructInit(&spi);
  spi.SPI_CPHA = SPI_CPHA_1Edge;
  spi.SPI_CPOL = SPI_CPOL_Low;
  spi.SPI_DataSize = SPI_DataSize_16b;
  spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
  spi.SPI_FirstBit = SPI_FirstBit_MSB;
  spi.SPI_Mode = SPI_Mode_Master;
  spi.SPI_NSS = SPI_NSS_Soft;

  SPI_Init(SPI1, &spi);

  SPI_NSSInternalSoftwareConfig(SPI1,SPI_NSSInternalSoft_Set);

  SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_TXE, ENABLE);

  //SPI Interrupt KOnfiguration
  NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_Init(&NVIC_InitStructure);

  SPI_Cmd(SPI1,ENABLE);

  spi_send(0x0C00); // Shutdown-Mode deaktivieren
  spi_send(0x0900); // keine Decodierung
  spi_send(0x0F00); // normaler Display-Mode
  spi_send(0x0B00); // Scan-Limit auf 7 setzen

  GPIOA->ODR |= GPIO_Pin_4;



  //Endlosschleife
  while(1)
  {
    spi_send(0x0FFF);
  }
}

//SPI Interrut Handler
void SPI1_IRQHandler()
{
  GPIOA->ODR |= GPIO_Pin_4;
  spi_ready=1;
  SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_TXE);
}

: Verschoben durch Moderator

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]
  • [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.