Comment utiliser le matériel NSS (SPI) sur stm32f4?
J'ai donc essayé d'utiliser du matériel NSS signal avec HAL bibliothèque, mais je ne trouve pas de fonction pour faire NSS nip de bas ou de haut niveau. J'ai aussi essayé de trouver la réponse dans HAL, de la documentation, mais il n'y a pas d'information trop. Tous les exemples dans l'Internet contient uniquement le logiciel NSS.
Comment on est censé utiliser le matériel NSS?
si vous utilisez du matériel NSS, puis le code pin de l'état est géré par le périphérique. Vous ne devez pas explicitement de le conduire en logiciel. Pour ce faire, vous venez de configurer votre SPI_InitTypeDef.NSS soit avec SPI_NSS_HARD_INPUT si votre appareil est un esclave, ou SPI_NSS_HARD_OUTPUT si votre appareil est un maître.
Je n'ai pas encore trouver un SPI slave qui serait le permet en toute sécurité de conduite NSS dans le matériel. Les exigences pour les CS sont généralement satisfaits par la conduite de cette broche avec le logiciel GPIO.
Il ne fonctionne tout simplement pas comme CS classique en SPI master mode. De manuel de référence: "Le NSS signal est mis à l'état bas lorsque le maître commence la communication, et est maintenu le plus bas jusqu'à ce que le SPI est désactivé."
J'ai eu le même problème; à l'aide de STM32F417 comme un SPI maître; lorsqu'il est configuré comme HARD_OUTPUT la sortie est toujours faible (c'est à dire la sélection de l'esclave). Fonctionne très bien en mode SOFT, mais ce n'est pas ce que je suis après. Pas d'erreurs signalées par le HAL, ni par le matériel.
Je n'ai pas encore trouver un SPI slave qui serait le permet en toute sécurité de conduite NSS dans le matériel. Les exigences pour les CS sont généralement satisfaits par la conduite de cette broche avec le logiciel GPIO.
Il ne fonctionne tout simplement pas comme CS classique en SPI master mode. De manuel de référence: "Le NSS signal est mis à l'état bas lorsque le maître commence la communication, et est maintenu le plus bas jusqu'à ce que le SPI est désactivé."
J'ai eu le même problème; à l'aide de STM32F417 comme un SPI maître; lorsqu'il est configuré comme HARD_OUTPUT la sortie est toujours faible (c'est à dire la sélection de l'esclave). Fonctionne très bien en mode SOFT, mais ce n'est pas ce que je suis après. Pas d'erreurs signalées par le HAL, ni par le matériel.
OriginalL'auteur mkom | 2016-03-03
Vous devez vous connecter pour publier un commentaire.
J'ai lu quelque part que NSS est mis à l'état bas aussi longtemps que le SPI Maître est activé et conduit à des niveaux élevés si le SPI Master est désactivé.
Je l'ai essayé à l'aide de la couche d'abstraction matérielle (bibliothèque de Cube/CubeMX) de ST avec un STM32L476 et d'interrogation SPI1. Initialisation de l'avant et de l'initialisation de la transmission n'a PAS fixé le NSS Pin - mais a pris beaucoup de temps:
Initialisation de la structure:
Transmettre la séquence:
J'ai donc décidé de la définition du mot manuellement à l'aide de GPIO (à l'aide de SPI_NSS_SOFT dans l'init):
J'ai utilisé le blocage de la transmission (pas de DMA ou d'Interruption), car il était assez rapide et pas d'autres tâches en attente. DMA setup prouvé à prendre inacceptables plus de temps pour envoyer seulement 24 octets à 20MHz. CE serait une solution de rechange acceptable.
Aussi loin que je peux voir dans le STM32L4xx manuel Chapitre 38.4.12/13 automatique NSS passe au niveau haut après chaque octet/mot de transmission et n'est donc pas bien utilisable pour de longs ruisseaux de la tenue de NSS faible pour l'ensemble de la transmission.
OriginalL'auteur peets
Vous pouvez utiliser le NSS broches standard GPIO et d'entraînement avec une routine d'interruption.Vous devriez faire partie d'un logiciel.Mettez d'abord le Nss bas et ensuite envoyer votre image (HAL_SPI_Transmit)
Après l'esclave devient tout image, utilisez le HAL_SPI_RxCpltCallback et de mettre le Nss élevé dans cette interruption.
N'oubliez pas de connecter les broches GPIO pour Nss sur la broche esclave.
OriginalL'auteur B. Canturk