Tribulations autour d'une pile RTC en SPI (MCP7951x) et d'un STM32
Hello,
Voilà quelques jours que je galère autour d'une pile RTC (un MCP79510 monté sur une carte RTC5 click de chez Mikro) qui fonctionne en SPI avec ma carte Nucleo-L152RE. Pour l'instant, ça ne fonctionne pas, mais voici ce que j'ai fait et les idées que j'ai.
Paramètrage de la carte Nucleo STM32
J'utilise STM32CubeMX pour générer mon code. Je suis sous Mac, et j'ai utilisé ce guide pour monter ma stack de dév.
En me basant sur les conseils du livre A la découverte des cartes Nucleo au chapitre 8, j'ai paramétré ma carte avec une liaison SPI et une liaison UART pour le debug. Puis je génère mon code en mode Makefile pour coder avec Visual Studio Code.
Informations sur le MCP79510
On trouve évidemment le datasheet facilement et en plus, on trouve chez MikroElektronika des exemples de code en C (mais pour microcontrôleur PIC). Donc, on a de quoi lire, et en plus venant du constructeur, on peut se dire que ça va rouler. Bon, je précise quand même que je suis un newbie autodidacte, donc pas un professionnel du domaine. Ah, je n'ai pas trouvé en googlant de code tout fait.
Démarche
Je suis donc parti du code existant pour les PIC en adaptant au framework HAL utilisé par STM et généré par CubeMX. Ma liaison UART fonctionne, et j'ai vérifié 15 fois au moins mes connections pour le SPI.
J'ai recodé les fonctions ClearRtc, ReadTime, SetTime et Start_RTC que j'appelle dans cet ordre :
- ReadTime,
- ClearRtc,
- SetTime,
- StartRtc.
Puis j'appelle ReadTime dans la boucle while afin de voir si le temps change.
Problèmes rencontrés
Et là, c'est le drame, ça ne marche pas... 🤯 Ma variable reste à 0x00000000
, parfois elle change pour quelques secondes (il y a 2 autres valeurs que la variable prend, mais je ne les ai pas noté...)
Idées de remédiation
Bien que je me sois basé sur le code source du constructeur, j'ai peut être fait des erreurs, je dois vérifier ça.
L'ordre dans lequel j'appelle les fonctions n'est peut être pas le bon, j'avais noté quelque chose dans le datasheet à propos du changement de date, il y les cristaux à gérer, pas sûr que mon code le fasse.
Conclusion (provisoire)
J'ai pas mal de souci, je suis pas une star en C (pas mal d'erreur sur les types dans l'appel des fonctions) mais j'apprends beaucoup 😋.
La suite dans un prochain épisode 😎
Commentaires
Enregistrer un commentaire