Wie zu verwenden hardware-NSS (SPI) auf stm32f4?
So, ich habe versucht, die Nutzung von hardware-NSS-signal mit HAL-Bibliothek, aber ich finde keine Funktion, um NSS-pin low oder high Pegel. Ich habe auch versucht, die Antwort zu finden, die in HAL-Dokumentation, aber es gibt keine Informationen zu. Alle Beispiele im Internet enthalten, die nur software NSS.
Wie soll die Nutzung von hardware-NSS?
wenn Sie hardware-NSS, dann den pin-Zustand wird verwaltet von der Peripherie. Sie brauchen nicht zu explizit-Laufwerk in der software. Dazu müssen Sie nur konfigurieren Sie Ihre SPI_InitTypeDef.NSS entweder SPI_NSS_HARD_INPUT wenn Ihr Gerät ist ein slave, oder SPI_NSS_HARD_OUTPUT wenn Ihr Gerät ist ein master.
Ich habe noch zu finden, ein SPI-slave, der würde sicher erlauben das fahren NSS in der hardware. Die Anforderungen für CS sind in der Regel nur zufrieden mit der Fahrt dieser pin mit software GPIO.
Es funktioniert einfach nicht wie ein klassischer CS im SPI-master-Modus. Aus dem reference-manual: "Das NSS-signal angetrieben wird niedrig, wenn der master beginnt die Kommunikation und ist niedrig gehalten, bis der SPI ist deaktiviert."
Ich habe das gleiche Problem; mit STM32F417 als SPI-master, wenn Sie so konfiguriert wie HARD_OUTPUT die Ausgabe ist immer - niedrig (D. H. die Auswahl des slave). Funktioniert gut im SOFT-Modus, aber das ist nicht das, was ich bin nach. Keine Fehler durch die HAL noch von der hardware.
Ich habe noch zu finden, ein SPI-slave, der würde sicher erlauben das fahren NSS in der hardware. Die Anforderungen für CS sind in der Regel nur zufrieden mit der Fahrt dieser pin mit software GPIO.
Es funktioniert einfach nicht wie ein klassischer CS im SPI-master-Modus. Aus dem reference-manual: "Das NSS-signal angetrieben wird niedrig, wenn der master beginnt die Kommunikation und ist niedrig gehalten, bis der SPI ist deaktiviert."
Ich habe das gleiche Problem; mit STM32F417 als SPI-master, wenn Sie so konfiguriert wie HARD_OUTPUT die Ausgabe ist immer - niedrig (D. H. die Auswahl des slave). Funktioniert gut im SOFT-Modus, aber das ist nicht das, was ich bin nach. Keine Fehler durch die HAL noch von der hardware.
InformationsquelleAutor mkom | 2016-03-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Irgendwo habe ich gelesen, dass NSS Gefahren ist niedrig, solange der SPI-Master aktiviert ist und angetrieben wieder hoch, wenn der SPI-Master deaktiviert ist.
Ich versuchte es mit der HAL-Bibliothek (Cube/CubeMX) von ST mit einem STM32L476 und polling SPI1. Initialisierung vor und de-Initialisierung nach der übertragung NICHT die NSS-Pin -, aber nahm viel Zeit:
Init-Struktur:
Übertragen Reihenfolge:
Also habe ich beschlossen, die Einstellung der pin manuell über GPIO (mit SPI_NSS_SOFT in init):
Ich verwendet, die Blockierung der übertragung (kein DMA oder Interrupt), da war es schnell genug ist und keine anderen Aufgaben warten. DMA setup erwies sich als zu nehmen unannehmbar mehr Zeit zu senden nur 24 bytes, die bei 20 MHz. ES wäre eine akzeptable alternative.
Soweit ich sehen kann, in der STM32L4xx Handbuch Kapitel 38.4.12/13 die automatische NSS geht hoch nach jeder byte - /Wort-übertragung und ist daher nicht gut geeignet für längere streams holding NSS niedrig für die gesamte übertragung.
InformationsquelleAutor peets
Können Sie die NSS pin als standard-GPIO und fahren Sie mit einer interrupt-routine.Sie sollten tun, dass ein Teil durch software.Legen Sie zuerst die Nss gering, und senden Sie dann den Rahmen (HAL_SPI_Transmit)
Nachdem die Sklavin bekommt alle Frames, verwenden Sie die HAL_SPI_RxCpltCallback und legte die Nss hoch, die zu unterbrechen.
Vergessen Sie nicht, eine Verbindung GPIO-pin-zu-Nss-pin am slave.
InformationsquelleAutor B. Canturk