8x8 g click mit STM32

Gast #6910475
Lesenswert?

Wo werden denn die Pins für CLK und MOSI konfiguriert?
Die müsste man wohl als PP-Ausgänge konfigurieren (oder bei Benutzung 
des SPI-Interfaces als "Alternate Function"). Sonst kommt von den 
internen Signalen an der Außenwelt nix an ...
Gast #6910600
Lesenswert?

Bei meinem STM Muss ich die SPI-Pins noch konfigurieren. Aber das ist 
auch ein anderer STM-Typ mit wesentlich mehr Pins.

int Pin::SetToSpi (uint8_t ui_AlternateFunction)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  GPIO_InitStruct.Pin       = m_ui_PinBitmask;
  GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull      = GPIO_NOPULL;
  GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.Alternate = ui_AlternateFunction;
  HAL_GPIO_Init(m_p_Port, &GPIO_InitStruct);

  return 0;
}
OP #6911203
Lesenswert?

Wie konfiguriere ich die Pins damit sie rausgeschickt werden? Das Modul 
ist an und für sich an der STM draufgesteckt, also sind CLK, MOSI usw. 
mit dem Modul verbunden, jedoch krieg ich die Signale nicht an den 
MAX7219 geschickt, der ja für das Leuchten der LEDs verantwortlich ist.

Danke übrigens für die Tipps, von dir und von euch anderen :)
Gast #6911225
Lesenswert?

Ja schrieb:
> Du schreibst keine Daten.

Solange du die Schnittstelle nur initialisierst ohne die LED konkret 
anzusteuern wird keine leuchten.

Srdjan S. schrieb:
> Wie konfiguriere ich die Pins damit sie rausgeschickt werden?

Meinst du damit, sie als Ausgang zu konfigurieren? Den Code sollte Cube 
MX generieren, ich sehe ihn aber nicht.

PittyJ schrieb:
> Bei meinem STM Muss ich die SPI-Pins noch konfigurieren.

Irgendwo muss auf AFSEL auftauchen, um die Pins mit dem SPI Port zu 
verbinden.

Zeige doch mal die *.ioc Datei, dammit wir nachvollziehen können, was du 
konfiguriert hast. Das Bildchen ganz oben reicht nicht.
Gast #6911344
Lesenswert?

Srdjan S. schrieb:
> Wäre das eine Hilfe?

Nein. Eigentlich versuche ich herauszufinden, ob die IO Pins richtig 
konfiguriert werden. Dazu muss ich auch in den generierten Quelltext und 
den Quelltext der HAL schauen und das mit dem Reference Manual 
vergleichen. Daran scheitere ich gerade.
Gast #6911361
Lesenswert?

Ich habe das Repository Verzeichnis gelöscht so dass er die HAL neu 
herunterladen musste. Jetzt kann ich es öffnen.

Zuerst mal muss ich dir sagen, dass ich den STM32L432 noch nicht benutzt 
habe. Ich könnte mich also irren.

In der main.c wird MX_SPI1_Init() aufgerufen, welche wiederum 
HSL_SPI_Init() aufruft.

HAL_SPI_MspInit() is eine schwache Funktion, die durch 
stm32l4xx_hal_msp.c überschrieben wird. In dieser Funktion finde ich den 
Code, welcher die SPI Pins inklusive der alternate Funktion 
konfiguriert:
1
/**
2
* @brief SPI MSP Initialization
3
* This function configures the hardware resources used in this example
4
* @param hspi: SPI handle pointer
5
* @retval None
6
*/
7
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
8
{
9
  GPIO_InitTypeDef GPIO_InitStruct = {0};
10
  if(hspi->Instance==SPI1)
11
  {
12
  /* USER CODE BEGIN SPI1_MspInit 0 */
13

14
  /* USER CODE END SPI1_MspInit 0 */
15
    /* Peripheral clock enable */
16
    __HAL_RCC_SPI1_CLK_ENABLE();
17

18
    __HAL_RCC_GPIOA_CLK_ENABLE();
19
    __HAL_RCC_GPIOB_CLK_ENABLE();
20
    /**SPI1 GPIO Configuration
21
    PA5     ------> SPI1_SCK
22
    PA6     ------> SPI1_MISO
23
    PA7     ------> SPI1_MOSI
24
    PB0     ------> SPI1_NSS
25
    */
26
    GPIO_InitStruct.Pin = SCK_Pin|MISO_Pin|MOSI_Pin;
27
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
28
    GPIO_InitStruct.Pull = GPIO_NOPULL;
29
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
30
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
31
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
32

33
    GPIO_InitStruct.Pin = NSS_Pin;
34
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
35
    GPIO_InitStruct.Pull = GPIO_NOPULL;
36
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
37
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
38
    HAL_GPIO_Init(NSS_GPIO_Port, &GPIO_InitStruct);
39

40
    /* SPI1 interrupt Init */
41
    HAL_NVIC_SetPriority(SPI1_IRQn, 0, 0);
42
    HAL_NVIC_EnableIRQ(SPI1_IRQn);
43
  /* USER CODE BEGIN SPI1_MspInit 1 */
44

45
  /* USER CODE END SPI1_MspInit 1 */
46
  }
47

48
}

Weiterhin enthält main.c einen Aufruf von HAL_GPIO_Init() wo der 
verbleibende CS Pin konfiguriert wird.

Also würde ich sagen, dass die Konfiguration der Pins in Ordnung ist.

Dein Problem ist wohl eher die konkrete Kommunikation. Dazu habe ich 
deinem Code lediglich max_init() gefunden, welche offenbar den MAX Chip 
konfiguriert. Ich sehe aber keine Zeile, die dazu dienen könnte, 
bestimmte LEDs zum Leuchten zu bringen.

Ich würde dir auch empfehlen, die Kommunikation mit einem Logic Analyzer 
zu überprüfen. Womöglich kommt dabei heraus, dass die 5 
Konfigurationsparameter korrekt an den MAX übertragen werden. Oder auch 
nicht. jedenfalls weißt du dann, worauf du dich konzentrieren musst.
Gast #6911375
Lesenswert?

Srdjan S. schrieb:
> mit dem maxinit() sollte ja aber wenigstens der
> Testmodus aktiviert werden,

Der Kommentar sagt das Gegenteil:
> //  no test display

Wie gesagt, kontrolliere die Kommunikation mit einem Logic Analyzer.

Das kann übrigens nicht gehen:
1
void write_byte (uint8_t byte) {
2
  for(int i = 0; i < 8; i++) {
3
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 0);  // Pull the CLK LOW
4
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, byte&0x80);// Write one BIT data MSB first
5
    byte = byte<<1;  // shift the data to the left
6
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 1);  // Pull the CLK HIGH
7
  }
8
}

Weil die I/O Pins mit der alternativen Funktion SPI1 verbunden sind. Du 
müsstest sie vom SPI trennen um sie derartig "zu Fuß" anzusteuern.
Gast #6911391
Lesenswert?

Srdjan S. schrieb:
> Er läuft laut dem Reference Manual glaub ich eh auf 5V

Aber dein STM32 liefert nur 3,3 Volt Signale.

Ich mal mal gelesen, dass man die 5V toleranten Ausgänge auf Open-Drain 
umkonfigurieren kann und dann mit einem Widerstand über 3,3V hinaus auf 
5V ziehen kann.

Aber ob das auch in Kombination mit SPI funktioniert, weiß ich nicht. 
Dabei hat man dann bestimmt auch Einschränkungen bezüglich der 
Übertragungsrate.

Nachtrag: Ich sehe gerade dass Harry schon darauf hinwies.
OP #6950350
Lesenswert?

Das 8x8 Click funktioniert noch immer nicht, habe mit meinem Lektor die 
Config durchgeschaut (sowohl Pin als auch Clock und SPI), da hat alles 
gepasst. Ich finde den Fehler im Code einfach nicht.

Ich habe den Testmode einmal zum Laufen gebracht und dann hat sich 
nichts mehr getan, der Testmode funktioniert auch nicht mehr, obwohl 
nichts am Code geändert wurde.

Bitte um Hilfe.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren