0% ont trouvé ce document utile (0 vote)
6 vues108 pages

SAM2 Repro

Ce document présente un cours sur le microcontrôleur STM32L476RG, abordant divers aspects tels que le contrôle de l'alimentation, les périphériques, et la programmation en C embarqué. Il décrit le déroulement des séances, les objectifs d'apprentissage, et les ressources bibliographiques nécessaires. Les étudiants sont encouragés à travailler sur des travaux pratiques pour se préparer à un test final sur la programmation et le débogage des périphériques du microcontrôleur.

Transféré par

gb7jh9c6qr
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues108 pages

SAM2 Repro

Ce document présente un cours sur le microcontrôleur STM32L476RG, abordant divers aspects tels que le contrôle de l'alimentation, les périphériques, et la programmation en C embarqué. Il décrit le déroulement des séances, les objectifs d'apprentissage, et les ressources bibliographiques nécessaires. Les étudiants sont encouragés à travailler sur des travaux pratiques pour se préparer à un test final sur la programmation et le débogage des périphériques du microcontrôleur.

Transféré par

gb7jh9c6qr
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Campus G.

Charpak Provence
ISMIN

Système A Microcontrôleur 2

Rédacteur : MARQUES Acacio

Version : VP2024 – V2

© Reproduction interdite sans accord préalable, quel que soit le support


SOMMAIRE
INTRODUCTION : objectifs – biblio - cible

D03 Introduction : objectifs - biblio - cible

D06 Power Control : supply – low power – application

D20 Watchdog : principe – STM32 – application


D32 DMA : principe – STM32 – application
D42 I²C : principe – STM32 – application
D55 SPI : principe – STM32 – application
D70 CAN : intérêt - protocole – erreurs – timing – STM32
– application

3
Pr. Acacio MARQUES - ISMIN 2023 3 Principe

Durant 8 séances nous allons approfondir notre connaissance du microcontrôleur STM32L476RG de


STMicroelectronics.
Le cours SAM1 de première année est un prérequis, on ne reviendra pas sur le fonctionnement de l’outil de
développement ni sur l’architecture du STM32.

Déroulé du cours (séances de 3 heures) :

Séance 1 : Power Control


Séance 2 : Watchdog
Séance 3 : DMA
Séance 4 : DMA
Séance 5 : I²C
Séance 6 : SPI
Séance 7 : CAN
Séance 8 : CAN

3
OBJECTIFS
INTRODUCTION : objectifs – biblio - cible

 Se familiariser avec
 Architecture ARM 32 bits et STM32

 Les périphériques et leurs drivers

 Le C embarqué

 Le Debug

 Métriques

 Test individuel sur machine de 3 H.

 Rattrapage sur machine

4
Pr. Acacio MARQUES - ISMIN 2023 4 La doc

Le cours sera orienté programmation en langage C notamment écriture des drivers des différents périphériques.
Le test se fera en salle informatique sur PC fixes équipés des outils et de la documentation nécessaires. Le
logiciel réalisé durant le test devra être débuggé via la carte cible Platform STM32. Le test sera constitué de mini
TP à réaliser de difficultés croissantes. Je ne peux que vous encourager à travailler sérieusement les TP durant
les cours pour être prêt pour le test. Le rattrapage sera de même nature et de même difficulté que le test avec
une note maximum écrêtée à 10.

4
BIBLIO
INTRODUCTION : objectifs – biblio - cible

 Cours SAM1
The definitive Guide to ISMIN 1A

 Architecture ARM
The definitive Guide to the ARM Cortex de Joseph Yiu

Users’manual
 Microcontrôleur STM32L476RG Data Sheet

 MOOC & Online training


[Link]

 LIVRE

5
Pr. Acacio MARQUES - ISMIN 2023 5 Le kit

Le site ST est incontournable pour les datasheets du microcontrôleur ainsi que les outils de développement, il
faut pour cela créer un compte sur le site.
Pour information vous trouverez « The definitive guide to the ARM Cortex » gratuitement sur internet en anglais
ou à la bibliothèque.
Le cours SAM1 est un prérequis indispensable, on ne reviendra pas sur les périphériques et leur programmation
vus en première année.

5
MA CIBLE
INTRODUCTION : objectifs – biblio - cible
3.3V

DAC_OUT_ADC_IN
PWM_LED

LDR_ADC1_13

POT
PB1 PC4 PA6 PA4 PB12 PB13 PB14 PC6 PC7
BUZZER

TIM8 ADC1 DAC 1


TIM3 PB4 PB0 TSC
Buzzer
PC9
SW2
PB11
AOP2
SW1
PA15
ENCA
PA0 LED5
PB2

TIM5 PC5 LED4

GPIO
ENCB COMP2 LED3
PA1 PA10
LED2
PA7
PWM
PA5 INTOF1
USER RESET LD2 PC11
TIM2 PH0
SHUT1
DIR
PA9
INTOF2
DIS PC10
PB5
PH1
SHUT2

CSN
PB9 SPI2 SDMMC CAN1 LPUART1 I2C1
PB8 PC2 PC3 PB10 PC8 PD2 PC8 PC12 PA12 PA11 PC1 PC0 PB7 PB6

CE SDO SDI SCK DO CMD DETECT CK CAN1_TX CAN1_RX TX RX SDA SCL

CO²

6
Pr. Acacio MARQUES - ISMIN 2023 6 C’est parti

6
SOMMAIRE
INTRODUCTION : objectifs – biblio - cible

D03 Introduction : objectifs - biblio - cible

D06 Power Control : supply – low power – application

D20 Watchdog : principe – STM32 – application


D32 DMA : principe – STM32 – application
D42 I²C : principe – STM32 – application
D55 SPI : principe – STM32 – application
D70 CAN : intérêt - protocole – erreurs – timing – STM32
– application

7
Pr. Acacio MARQUES - ISMIN 2023 7 Principe

Durant 8 séances nous allons approfondir notre connaissance du microcontrôleur STM32L476RG de


STMicroelectronics.
Le cours SAM1 de première année est un prérequis, on ne reviendra pas sur le fonctionnement de l’outil de
développement ni sur l’architecture du STM32.

Déroulé du cours (séances de 3 heures) :

Séance 1 : Power Control


Séance 2 : Watchdog
Séance 3 : DMA
Séance 4 : DMA
Séance 5 : I²C
Séance 6 : SPI
Séance 7 : Bus CAN
Séance 8 : Bus CAN

7
BENCHMARK
POWER CONTROL : supply - low power – application

Numerous low-power modes

8
Pr. Acacio MARQUES - ISMIN 2023 8 Surveillance alimentation

Comme il existe des benchmarks pour comparer les performances (CoreMark, Drystone) , il en existe aussi
pour comparer l’efficacité énergétique comme le EEMBC ULPBench.
Parmi la famille des microcontrôleurs Low-power le STM32L4 à la meilleure efficacité énergétique comme
l’illustre les benchmarks.
Une grande performance avec un cout énergétique faible grâce aux nombreux modes basse consommation.

8
SUPERVISEURS
POWER CONTROL : supply - low power - application

 PROBLEME  PVM

normal

non fiable

stop

 BOR  PVD

20 mv

1,6 v .. 2,86 v
2 v .. 2,96 v

EXTI_16

9
Pr. Acacio MARQUES - ISMIN 2023 9 Alimentation

Entre V2 et V3 (voir datasheet) le fonctionnement du microcontrôleur n’est plus garanti. Le périphérique Brown
Out Reset évite ce piège. Le seuil VBOR doit être fixé juste au-dessus de V2 pour remplacer le fonctionnement
erratique du micro par un reset. Attention le design du reset doit avoir été pensé comme un état sûr pour le
système. 5 valeurs de seuil VBORx sont possibles de 1,7 v à 2,95 v. Remarque : la temporisation n’existe que
pour le seuil VBOR0. La fonction BOR est active pour tous les power modes sauf en shutdown mode et ne peut
pas être désactivée.

En cas de défaillance de l’alimentation un reset intempestif peut faire perdre des données importantes, c’est
pourquoi couplé au module BOR on peut activer le périphérique PVD (Programmable Voltage Detector). C’est
également un comparateur mais avec un seuil légèrement au-dessus de VBORx (7 valeurs programmables de 2
v à 2,9 v), il se déclenche donc avant et génère une interruption (EXTI_16) plutôt qu’un reset ce qui permet des
sauvegardes avant le reset.

Les alimentations indépendantes (VDDA, VDDIO2, VDDusb) sont de leur côté surveillées par le périphérique
PVM (Peripheral Voltage Monitoring).

9
DOMAINE
POWER CONTROL : supply - low power - application

1,62 v .. 3,6 v

2,50 v .. 3,6 v PC3

3,00 v .. 3,6 v

1,08 v .. 3,6 v

1,70 v .. 3,6 v

1,55 v .. 3,6 v

10
Pr. Acacio MARQUES - ISMIN 2023 10 Zoom

Les alimentations VDDA, VLCD, VDDUSB, VDDIO2, VBAT sont indépendantes de l’alimentation principal VDD
mais doivent être reliée de préférence à VDD lorsque les périphériques ne sont pas utilisés.

Pour l’alimentation principale on peut utiliser un régulateur 1.8 v ± 5 %, le fonctionnement du microcontrôleur est
garanti jusqu’à 1,6 v. Le seuil du BOR doit donc être fixé à 1.7 v.

10
2 REGULATEURS
POWER CONTROL : supply – low power - application

Range1/2
Run
Sleep
Stop0
VDD Main
Regulator Core Logic

Low-Power LPRun SRAM2 in stanby mode


Regulator LPSleep Retention
Stop1/2
VDD
monitoring

RTC
VBAT Backup
Domain

11
Pr. Acacio MARQUES - ISMIN 2023 11 Application typique

2 régulateurs linéaire alimentent la plupart des périphériques : le Main regulator (MR) et le Low_Power regulator
(LPR)
Le MR est utilisé dans le run, sleep et stop0 mode.
Le LPR est utilisé dans le Low-Power Run, le Low-power sleep et le stop1 ou 2 mode. Il est également utilisé
pour alimenter la SRAM2 en mode Standy avec SRAM2 retention.
Les 2 régulateurs sont désactivés en standby et shutdown modes, leurs sorties est en haute impédance, ils ne
consomment donc rien dans ces modes.
Le régulateur principal (MR) possède un high performance range 1 (1,2 v avec clock < 80 Mhz) et un low-power
range 2 (1,0 v avec clock < 26 Mhz ).

Pour minimiser la consommation on joue à la fois sur les tensions d’alimentation et les fréquences d’horloge.

11
PROFILE
POWER CONTROL : supply – low power - application

 Application  Process
• RUN range 1 : 100 DMIPS à 80 Mhz
• RUN range 2 : 32,5 DMIPS à 26 Mhz
• LPRUN : 2,5 DMIPS à 2 Mhz

 Inactive
• Data RAM retention
• Capacités de wakeup
• Temps de wakeup
• Consommation la plus faible possible
• 8 modes pour y arriver

12
Pr. Acacio MARQUES - ISMIN 2023 12 Performance

Process phase : gestion de capteurs ou envoie radio traité de façon périodique (RTC) ou via des événements
externes.
3 modes de fonctionnement possible durant cette phase suivant le compromis efficacité
énergétique/performance recherché.
Inactive phase : Le système est en low-power et attend un réveil par le RTC ou un événement.

12
EFFICACITE
POWER CONTROL : supply – low power - application

 Meilleure efficacité

 Meilleure performance

System clock = 80 Mhz

13
Pr. Acacio MARQUES - ISMIN 2023 13 Synthèse

Ce microcontrôleur permet l’exécution du code en SRAM1 ou 2. On obtient les meilleures performances avec le
code en SRAM1 et les données en SRAM2. On aurait pu s’en douter, mais avec la mémoire cache associée à la
flash on se rapproche très prêt de ces performances. Cependant on obtient la meilleure efficacité énergétique
avec le code dans la flash sans la mémoire cache mais ce n’est vrai qu’à 80 Mhz. En fait comme vu
précédemment la meilleure efficacité énergétique est obtenue en range 2 à 26 Mhz avec Flash ART on (mémoire
cache).

13
VUE GENERALE
POWER CONTROL : supply – low power - application

RUN (Range1) at 80 MHz 120 µA / MHz**


* : with RTC
** : from SRAM1
RUN (Range2) at 26 MHz 100 µA / MHz**
Wake-up
time
LPRUN at 2 MHz 112 µA / MHz**

6 cycles SLEEP at 26 MHz 35 µA / MHz Core off

6 cycles LPSLEEP at 2 MHz 48 µA / MHz Core off

0.7µs STOP 0 (full retention) 110 µA Core + peripherals off

4 µs STOP 1 (full retention) 6.6 µA / 6.9 µA* Core + peripherals off

5 µs STOP 2 (full retention) 1.1 µA / 1.4 µA* Core + peripherals off


14 µs STANDBY + 32 KB RAM 350 nA / 650 nA* Core + all peripherals off

14 µs STANDBY 115 nA / 415 nA* Core + all peripherals off + SRAM off
256 µs SHUTDOWN 30 nA / 330 nA* Core + all peripherals off + BOR off

VBAT 4 nA / 300 nA* Typ @ VDD =1.8 V @ 25 °C


14
Pr. Acacio MARQUES - ISMIN 2023 14 Diagramme de transition

Grande flexibilité avec 8 modes low power pour gérer la phase inactive et 3 modes pour la phase process.
Sleep ou LP Sleep : si la réactivité est primordiale (seulement 6 cycles de temps de réveil). Dans ce mode seul le
cœur CPU est arrêté, les autres périphériques fonctionnent normalement et peuvent donc réveiller le CPU lors d’un
événement. La différence entre le mode Sleep et LP Sleep c’est que ce dernier fonctionne avec le Low-Power run
mode. Le LP Sleep n’est accessible qu’à partir du LP Run (voir diagramme de transition).
Stopx : modes de veille permettant d'atteindre la consommation la plus basse lorsqu’on veut conserver le contenu de
la SRAM et des registres. Toutes les horloges dans le domaine VCORE sont arrêtées, le PLL, le MSI RC, le HSI16 RC
et les oscillateurs à cristal HSE sont désactivés. La LSE ou la LSI peuvent être maintenues en fonctionnement.
Stop0/1 : si un nombre important de périphériques doit rester activés, si le system à plusieurs sources de réveil
incluant l’USB. Stop1 mode est très similaire à Stop0 mode seule le régulateur change LPR et MR respectivement.
Stop1 mode consomme donc moins au prix d’un réveil plus long.
Stop2 : si quelques périphériques doivent rester activés et générer des réveils (event ou interruptions) comme
LPUART, LPTIM1ou I²C.
Standby : ce mode veille est utilisé pour atteindre la consommation d'énergie la plus basse avec le périphérique BOR
actif. Les 2 régulateurs internes sont désactivés de sorte que le domaine VCORE est éteint. Seule l'horloge RTC peut
rester active (standby mode avec ou sans RTC). Le système peut être réveillé en utilisant une broche SYS_WKUP, un
événement RTC, le WDG indépendant (IWDG) ou un reset. Après le réveil, l'exécution du programme redémarre
comme suite à un reset. A utiliser si aucun périphériques autres que le RTC à besoin de rester actif. Possibilité de
garder la SRAM2 sauvegardée si nécessaire via le LP régulateur.
Shutdown : permet d'atteindre la consommation d'énergie la plus basse, pas de périphérique BOR et Watchdog, pas
de vbatt, programme moins sécuritaire. Le système peut être réveillé du mode d'arrêt en utilisant une broche
SYS_WKUP, un événement RTC, ou un reset. Après le réveil, l'exécution du programme redémarre comme suite à un
reset.
Vbat : permet de conserver le fonctionnement du RTC et des backup registers en cas de panne de l’alimentation VDD.
Bien sûr il faut brancher une batterie sur la broche Vbatt, une commutation automatique s’opère en cas de défaillance
du Vdd.

14
TRANSITIONS
POWER CONTROL : supply – low power - application

Reset LPSleep

Sleep LPRun Shutdown


• Sleep now
• Sleep On Exit

Stop1 Run Standby

Stop0 Stop2
15
Pr. Acacio MARQUES - ISMIN 2023 15 Bilan

Le LPSleep n’est possible qu’en mode LPRun.


Au démarrage le microcontrôleur est configuré en mode run range 1.
2 mécanismes existent pour entrer en mode Sleep ou LPSleep :
• Sleep now : les instructions WFI ou WFE (ou fonctions HAL associées) font entrer le MCU
directement en mode Sleep.
• Sleep on exit : le MCU entre en mode sleep automatiquement à la sortie des sous-programmes
d’interruption. Les temps de commutations sont plus rapides (et donc consommation moindre) car le
contexte n’a pas besoin d’être sauvegardé dans la pile.

15
SYNTHESE
POWER CONTROL : supply – low power - application

sources de réveil

1 : peut être éteinte et son horloge désactivée


2 : SRAM1 et SRAM2 peuvent être éteinte indépendamment
16Cas particulier
Pr. Acacio MARQUES - ISMIN 2023 16
OTG: L'USB OTG (On-The-Go) est une fonctionnalité qui permet à un appareil de basculer entre les
rôles de périphérique USB (Device) et d'hôte USB (Host) sans nécessiter un hub USB externe. Cela
signifie que le microcontrôleur STM32 peut non seulement se connecter en tant que périphérique USB
à un ordinateur, mais aussi agir comme un hôte pour piloter d'autres périphériques USB, tels qu'une clé
USB, un clavier ou une souris.

RNG se réfère à un générateur de nombres aléatoires (Random Number Generator). Dans les
STM32, ce module matériel est capable de produire des nombres aléatoires vrais (True Random
Numbers), ce qui est utile pour des applications de cryptographie, des systèmes de sécurité, des jeux, et
d'autres applications nécessitant une certaine forme d'aléatoire.

16
BATCH ACQUISITION MODE
POWER CONTROL : supply – low power - application

17
Pr. Acacio MARQUES - ISMIN 2023 17 Outil

L’utilisation typique est l’optimisation du transfert par lot de data. Plutôt que de collecter les informations
capteurs par capteurs, on peut les regrouper et placer le MCU en Batch Acquisition Mode.
Ce mode laisse uniquement actif les périphériques nécessaires à la collecte de donnée (SRAM, DMA,
périphérique de communication, I²C par exemple).
Ainsi le MCU reste plus longtemps en low power et on gagne en consommation.

17
CONCLUSION
INTRODUCTION : organisation – concept de base

18
Pr. Acacio MARQUES - ISMIN 2023 18 Quiz

La série STM32L4 offre un large choix d'options pour optimiser à la fois les performances et la consommation d'énergie,
quelle que soit l'application.
Dans le cas du benchmark ULPBench , avec une période de réveil de 1 seconde et une charge de traitement d'environ 10
Kcycles par période, le choix optimal est d'utiliser le mode basse consommation Standby pour la phase INACTIVE
associée au mode Run Range 2 à 26 MHz (à partir du MSI) pour la phase PROCESS.
En affinant suivant la période de réveil:
•Si le temps de réveil est supérieur à quelques dizaines de millisecondes, une implémentation utilisant le mode
Standby offre une meilleure consommation.
•Si la période de réveil est plus courte, une implémentation avec Stop 2 donnera de meilleurs résultats.
•Si la température est élevée, le mode Standby doit être privilégié.
Le choix des modes basse consommation dépend non seulement de la consommation d'énergie, mais également de
l'exigence de temps de réveil (réactivité du système) et de l'exigence de rétention des données. Pour la série STM32L4, si
le traitement peut accepter une fréquence inférieure à 26 MHz, les points optimaux sont (dans l'ordre décroissant
d'efficacité énergétique) :
•Mode Standby : si le temps de transition de réveil peut être supérieur à 20 μs et la zone de rétention peut être
aussi petite que 32 Koctets.
•Stop 2 : si le temps de transition de réveil peut être supérieur à 8 μs et si l'application nécessite plus de 32 Koctets
de rétention.
En fin de compte, si la période de réveil est plus longue que quelques secondes et que la mémoire de rétention n'est pas
nécessaire, le mode Shutdown offre les meilleures performances énergétiques. Dans ce cas, le temps de réveil est
généralement de 256 μs.

Pour aider le client à ajuster finement son application et à faire son propre choix, STMicroelectronics fournit un module
calculateur de consommation électrique (PCC) dans le STM32CubeMX.

18
QUIZZ
POWER CONTROL : supply – low power - application

1. Quel mode low power consomme le moins de courant ?

2. Quel mode low power permet de conserver le contenu de la SRAM2 ?

3. Quel mode low power permet de conserver plus de 32Ko de SRAM ?

4. Quel mode low power est le plus adapté pour une application nécessitant une
réactivité rapide à des événements externes ?

5. Dans quel mode faut-il mettre les GPIO non utilisés pour limiter les fuites de courant ?

6. Quel mode low power est le plus efficace énergétiquement en phase process ?

7. Quel mode low power est adapté à une application interrupt driven ?

8. Quel mode low-power est adapté à l’IOT ?

19
Pr. Acacio MARQUES - ISMIN 2023 19 Quizz

19
TP0
POWER CONTROL : supply – low power - application
*-----------------------------------------------------------------------------------------------------------------
* FONCTION : Phase process en mode Run 2, MSI 24 Mhz : allumer LED2 pendant 1 s.
* Phase inactive : en mode standby pendant 10 s.
* Utilisation du wakeup timer du RTC pour le réveil.
*----------------------------------------------------------------------------------------------------------------

Run 1, 80 Mhz
*-----------------------------------------------------
* Courant phase moy :
*-----------------------------------------------------

Run 2, MSI 24 Mhz, Standby


*------------------------------------------------------
* Courant phase process :
* Courant phase inactive :
* Courant moyen : STATS (ALL)
*-------------------------------------------------------

20adopte un chien
Pr. Acacio MARQUES - ISMIN 2023 20
Pour vérifier le gain en autonomie, la première mesure peut être faite en condition haute performance sans
phase inactive : remplacée par un HAL_Delay (10000).
Ensuite on met en place la phase inactive en mode standby et enfin on améliore la phase process en passant au
range 2 (attention utiliser l’horloge low power MSI).

Pensez à valider le RTC avec internal WakeUp réglé à 10 s.

Le régulateur range est accessible dans le RCC power parameters.

La fonction HAL_RTCEx_SetWakeUpTimer_IT permet de régler la période de réveil du wakeup timer

La fonction HAL_PWR_EnterSTANDBYMode() permet d’entrer en mode low power standby. Attention dans ce
mode le réveil entraine l'exécution du programme comme pour donner suite à un reset, il faut donc tout
réinitialiser.

20
TP1
POWER CONTROL : supply – low power - application
*-----------------------------------------------------------------------------------------------------------------
* FONCTION : Incrémenter un compteur à chaque réveil et affichez le sur le terminal
* série
*
*----------------------------------------------------------------------------------------------------------------

21adopte un chien
Pr. Acacio MARQUES - ISMIN 2023 21

21
SOMMAIRE
INTRODUCTION : objectifs – biblio - cible

D03 Introduction : objectifs - biblio - cible

D06 Power Control : supply – low power – application

D20 Watchdog : principe – STM32 – application


D32 DMA : principe – STM32 – application
D42 I²C : principe – STM32 – application
D55 SPI : principe – STM32 – application
D70 CAN : intérêt - protocole – erreurs – timing – STM32
– application

22
Pr. Acacio MARQUES - ISMIN 2023 22 Principe

Durant 8 séances nous allons approfondir notre connaissance du microcontrôleur STM32L476RG de


STMicroelectronics.
Le cours SAM1 de première année est un prérequis, on ne reviendra pas sur le fonctionnement de l’outil de
développement ni sur l’architecture du STM32.

Déroulé du cours (séances de 3 heures) :

Séance 1 : Power Control


Séance 2 : Watchdog
Séance 3 : DMA
Séance 4 : DMA
Séance 5 : I²C
Séance 6 : SPI
Séance 7 : CAN
Séance 8 : CAN

22
WATCHDOG
WATCHDOG : principe – STM32 – application

 BUT
Surveiller le bon déroulement du programme. - logicielle
Les causes des perturbations peuvent être d ’origine : - électrique
- mécanique

 Principe

µP décompteur
Watchdog
Horloge ERROR
UNDERFLOW

RELOAD

Programme

Watchdog
Programme
Temps
< Programme
Timeout Programme
Programme
RESET
Watchdog
Programme
Programme
Programme
Programme
Watchdog
t

23
Pr. Acacio MARQUES - ISMIN 2023 23 Domaine d’étude

Le logiciel embarqué est sujet aux bugs et aux problèmes techniques. Les watchdogs agissent comme un filet de
sécurité, permettant au système de récupérer des défaillances logicielles, assurant un fonctionnement
ininterrompu et réduisant le risque de crash système.

Le choix du timeout est critique. Il doit être suffisamment long pour éviter les réinitialisations inutiles dues à des
problèmes transitoires, mais assez courte pour empêcher le système de rester bloqué indéfiniment en cas de
panne grave.

Avec des milliards d'appareils IoT déployés sur le terrain, il serait impossible pour un technicien de les entretenir
en temps voulu en cas de problème. Par conséquent, les systèmes IoT doivent être capables de détecter et de
récupérer eux-mêmes des défaillances sans intervention humaine.

23
SCENARIO
WATCHDOG : principe – STM32 – application

24
Pr. Acacio MARQUES - ISMIN 2023 24 Watchdog indépendant

24
IWDG
WATCHDOG : principe – STM32 – application

4 .. 256

 Principe  Option window


downcounter
Reload Value
Reload value

Window value

kick = RESET kick RESET t


t
KR = 0xAAAA
25
Pr. Acacio MARQUES - ISMIN 2023 25 Window watchdog

Ce watchdog est dit indépendant car l’horloge est indépendante de l’horloge système, il utilise l’horloge LSI de 32
Khz. Attention une fois activé seul un reset peut le désactiver. La valeur de rechargement est programmable , par
défaut 0xFFF. La valeur du timeout est donc configurable via le prescaleur sur l’horloge LSI et surtout la valeur
de reload (timeout = 125 µs à 32,8 s). Un rechargement sera provoqué par l’écriture de la valeur 0XAAAA dans
le Key Register.

Les registres du IWDG sont dans le Core domain tandis que les blocs fonctionnels sont dans le VDD domain,
cela permet au IWDG de continuer à fonctionner en mode low Power STOP et Standby.

Possibilité d’une windows option mais le watchdog WWDG peut être utilisé dans ce cas.

On utilisera le IWDG si l’horloge principale est incluse dans la surveillance. L’option window est utile dans les cas
ou on veut vérifier que des opérations sont effectué dans une fenêtre temporelle précise. Par exemple des
communications qui ne doivent pas prendre trop de temps.

25
WWDG
WATCHDOG : principe – STM32 – application

1/2/4/8

T[6:0]
Timeout (@ 80 MHz)
51,2 µs W[6:0]

To EWI interrupt
0x40
0x3F
26,2 ms
Reload = RESET Reload RESET t
Domaine d’étude
26
Pr. Acacio MARQUES - ISMIN 2023 26 Application

Ce watchdog n’est pas indépendant : horloge sur APB1. Cette horloge peut monter à 80 Mhz max

Si le logiciel reload T lorsque T > W alors un reset est généré, cela arrive lorsque l’application à surveiller
survient trop tôt. Si le décompteur passe de 0x40 à 0x3F un reset survient, cela arrive lorsque l’application ne
réagit pas dans la fenêtre temporelle souhaitée.

Vous avez la possibilité de valider une interruption Early wakeup lorsque le décompteur arrive à 0x40. Elle peut
être utilisée pour faire des sauvegardes avant le reset et/ou pour annuler le reset en faisant un reload.

26
WWDG
WATCHDOG : principe – STM32 – application

(dé)compteur
tWWDG = T2
CNTmax
(paramètre, max 127)
4096 × 𝑃𝑆𝐶
CNTwind 𝑑𝑡 =
𝑓
(paramètre)

• 1 < PSC < 8
• fPCLK = 80 MHz (par défaut)
CNTmin Timeout
(imposé = 63) WWDG
RESET si Fenêtre du WWDG RESET !
refresh Refresh autorisé

T0 = 0 : Init et T1 : Ouverture T2 : Fermeture temps


démarrage fenêtre fenêtre
WWDG WWDG WWDG

Comment procéder ?
1. Fixer dt => Choix de PSC (« WWDG counter clock prescaler »)
2. Calculer T2 = dt (CNTmax – 63) => Choix de CNTmax (« WWDG free running counter value »)
3. Calculer T1 = dt (CNTmin – 63) => Choix de CNTmin (« WWDG window value »)

27
Pr. Acacio MARQUES - ISMIN 2023 27 QUIZZ

27
QUIZZ
POWER CONTROL : supply – low power - application

1. Quelle est la fréquence de l'oscillateur interne utilisé par l'IWDG ?

2. Quelle est la plage de timeout de l'IWDG ?

3. Quelle est la fréquence de l'horloge utilisée par le WWDG ?

4. Quels sont les modes de fonctionnement dans lesquels l'IWDG peut rester actif ?

5. Comment l'IWDG est-il initialisé par logiciel ?

6. Quelle est la taille du compteur du WWDG ?

7. le WWDG peut-il être utilisé en conjonction avec l'IWDG ?

28
Pr. Acacio MARQUES - ISMIN 2023 28 Quizz

28
TP0
WATCHDOG : principe – STM32 – application
*-----------------------------------------------------------------------------------------------------------------
* FONCTION : IWDG
• SW1 premier appui commande en vitesse le moteur (1 kHz, 25 %)
• SW1 deuxième appui : arrêt moteur
• LED 2 clignotante à 1 seconde simule une application dans le main
• BP1 simule une panne (écriture en Flash par exemple)
• Utiliser les interruptions
• Testez sans et avec watchdog (timeout 2 s)
• En cas de reset watchdog allumer LED5
*----------------------------------------------------------------------------------------------------------------
SW2
PB11

ENCA SW1
PA0 PA15
LED5
PB2
TIM5 LED4
PC5
ENCB
PA1
LED3
PA10
LED2
PWM PA7
PA5

TIM2
DIR
PA9
DIS
PB5

29
Pr. Acacio MARQUES - ISMIN 2023 29 Algo

29
RAPPEL TIMER
WATCHDOG : principe – STM32 – application
UEV
ARR
ARR
Clock Sources
Syst clk
Extern clk timer clock
CK
Pin 0
Timerx CNT
TR
Trigger sources
Timer x Enable, Reset, up/down
Pin x
Soft

CCRx

Capture Compare
Acquisition signaux Génération signaux

30
Pr. Acacio MARQUES - ISMIN 2023 30 Appli suite

30
RAPPEL
TIMERS : principe – STM32 – application

 Ouvrir l’IDE sans changer de workspace

 Renommez le main.c et enlevez-le du build : pour sauvegarder le TP précédent

 Ouvrir STM32Cube : Double Click > [Link]


 Initialisez les GPIO : pin DIR et DIS en sortie, par défaut à zéro. PA5 en TIM2_CH1

 Initialisez le Timer 2 : master clock interne, PWM generation CH1

Pr. Acacio MARQUES - ISMIN 2023 31 Générer le code

Attention le Timer 2 a une résolution de 32 bits.

𝐏𝐞𝐫𝐢𝐨𝐝𝐞 = 𝑨𝑹𝑹 ∗ 𝑷𝑺𝑪 ∗ 1/𝑻𝒊𝒎𝒆𝒓𝒄𝒍𝒌

𝑷𝒆𝒓𝒊𝒐𝒅𝒆∗
𝑷𝑺𝑪𝑶𝒑𝒕𝒊 ≥ ≥ 0,00001
𝟐

Soit PSC = 1

𝑷𝒆𝒓𝒊𝒐𝒅𝒆 ∗𝑻𝒊𝒎𝒆𝒓𝒄𝒍𝒌
𝐀𝐑𝐑 = = 80 000
𝑷𝑺𝑪

CCR1 = Pulse = ARR*0,25 = 20 000

La prudence élémentaire suppose de toujours initialiser le moteur avec une vitesse nulle au démarrage avec donc le
paramètre Pulse = 0 dans Cube.
La consigne peut ensuite être donnée dans le code avec la commande: TIM2->CCR1 = 20 000 ou
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1, 20000);

PWM mode: 1 channel active si Period < Pulse , 2 channel inactive si Period < Pulse
Internal Clock Division: concerne les filtres des inputs channels
Comme d’habitude il faudra démarrer le timer 2 via la fonction HAL appropriée
HAL_TIM_PWM_Start.

31
TP0
WATCHDOG : principe – STM32 – application

IWDG TIMEOUT HARD FAULT


RESET
EXCEPTION

Infinite loop
INITIALISATIONS

IWDG RST LED 5 ON


?

BP1 PRESS
EXTI13 IT

INVALID
TOGGLE LED 2 PWM on ACCES

Infinite SW1 PRESS


PWM off
DELAY loop

REFRESH IWDG

32
Pr. Acacio MARQUES - ISMIN 2023 32 Appli suite

Pour vérifier dans un premier temps le fonctionnement du IWDG vous pouvez configurer une période de 500 ms
et vérifier qu’il se produit bien un reset avec un point d’arrêt au début du main. En passant la période IWDG à 2
secondes les reset ne se produisent plus à condition de rafraichir correctement le watchdog. Le programme
devrait donc fonctionner normalement. Si vous simulez un plantage , le IWDG permet alors de reprendre le
contrôle du moteur évitant une catastrophe.

La fonction HAL_RCC_GetResetSource() permet de retrouver l’origine du reset et donc d’alerter en cas de reset
IWDG.

32
TP1
WATCHDOG: principe – STM32 – application
*-----------------------------------------------------------------------------------------------------------------
* FONCTION: WWDG
* LED 2 clignotante
* Transmission périodique 25 ms à 115200 baud du message « donnes
* importantes a transmettre » durée 2,2 ms
* BP1 simule une panne ( taille des data erronée )
* Tester sans et avec windows watchdog ( timeout 26 ms, fenêtre 2 ms )
* En cas de reset watchdog allumer LED4
*----------------------------------------------------------------------------------------------------------------

SW2
PB11

ENCA SW1
PA0 PA15
LED5
PB2
TIM5 LED4
PC5
ENCB
PA1
LED3
PA10
LED2
PWM PA7
PA5

TIM2
DIR
PA9
DIS
PB5

33
Pr. Acacio MARQUES - ISMIN 2023 33 Algo

33
TP1
WATCHDOG: principe – STM32 – application

WWDG TIMEOUT
RESET

INITIALISATION

WWDG ? LED 4 ON

EXTI13 IT

TOGGLE LED 2
BP1 PRESS
INVALID
DELAY( 25 ms ) TRANSMIT 26 ms

REFRESH WWDG 2 ms

TRANSMIT ( 2,2 ms )

REFRESH WWDG 2,2 ms

Infinite loop 25 ms
34
Pr. Acacio MARQUES - ISMIN 2023 34 DMA

Le windows watchdog est utile pour surveiller des contraintes de temps comme lors d’une transmission prioritaire
périodique. Tout disfonctionnement est détecté, perte de data, transmission trop longue, fluctuation de la période.

Testez en simulant une transmission abrégée ( Taille du message = 5 au lieu de 32 ) et une période trop longue.
La transmission trop longue peut être détecté par le timeout de la fonction HAL_Transmit.

Remarque: on peut utiliser dans une même application les 2 types de watchdog ( IWDG et WWDG ) puisqu’ils
ont des rôles différents.

34
TP2
WATCHDOG : principe – STM32 – application
*-----------------------------------------------------------------------------------------------------------------
* FONCTION : WWDG
• LED 2 clignotante, période 10 ms
• Transmission à 9600 bauds d’un message de 6, 12 ou 24 chars.
• Un appui sur SW1 simule une panne en envoyant le message trop long de 24 chars
• Surveiller avec le windows watchdog (fenêtre entre 17.2 ms et 26.2 ms)
• En cas de reset watchdog allumer LED4
*----------------------------------------------------------------------------------------------------------------

SW2
PB11

ENCA SW1
PA0 PA15
LED5
PB2
TIM5 LED4
PC5
ENCB
PA1
LED3
PA10
LED2
PWM PA7
PA5

TIM2
DIR
PA9
DIS
PB5

35
Pr. Acacio MARQUES - ISMIN 2023 35 Algo

35
TP2
WATCHDOG : principe – STM32 – application

RESET

INITIALISATIONS
(sauf WWDG)

WWDG RST LED 4 ON


?

INIT + START
WWDG

EXTI IT
TRANSMIT (10 ms)

SW1 PRESS
DELAY(10 ms) TOO SHORT WWDG EARLY
Infinite TRANSMIT (5 ms) REFRESH
loop
LED 2 TOGGLE SW2 PRESS
TOO LONG
WWDG
TRANSMIT (20 ms)
TIMEOUT
WWDG REFRESH

36
Pr. Acacio MARQUES - ISMIN 2023 36 Appli suite

Le WWDG est utile pour surveiller des contraintes de temps comme lors d’une transmission prioritaire
périodique.
Tout disfonctionnement est détecté, perte de data, transmission trop longue, fluctuation de la période.

Remarque : on peut utiliser dans une même application les 2 types de watchdogs (IWDG et WWDG) puisqu’ils
ont des rôles différents.

36
TP2
WATCHDOG : principe – STM32 – application

Refresh
LED 2 Toggle
Durée de
transmission TRANSMIT HAL_DELAY
souhaitée
Refresh
LED 2 Toggle

Transmission Early refresh


TRANSMIT HAL_DELAY
trop brève RESET !

Timeout WWDG
RESET !

Transmission
TRANSMIT HAL_DELAY
trop longue

Temps

T0 = 0 T1 T2
Initialisation & démarrage Ouverture fenêtre Fermeture fenêtre
WWDG WWDG WWDG

37
Pr. Acacio MARQUES - ISMIN 2023 37 DMA

37
SOMMAIRE
INTRODUCTION : objectifs – biblio - cible

D03 Introduction : objectifs - biblio - cible

D06 Power Control : supply – low power – application

D20 Watchdog : principe – STM32 – application


D32 DMA : principe – STM32 – application
D42 I²C : principe – STM32 – application
D55 SPI : principe – STM32 – application
D70 CAN : intérêt - protocole – erreurs – timing – STM32
– application

38
Pr. Acacio MARQUES - ISMIN 2023 38 Principe

Durant 8 séances nous allons approfondir notre connaissance du microcontrôleur STM32L476RG de


STMicroelectronics.
Le cours SAM1 de première année est un prérequis, on ne reviendra pas sur le fonctionnement de l’outil de
développement ni sur l’architecture du STM32.

Déroulé du cours (séances de 3 heures) :

Séance 1 : Power Control


Séance 2 : Watchdog
Séance 3 : DMA
Séance 4 : DMA
Séance 5 : I²C
Séance 6 : SPI
Séance 7 : CAN
Séance 8 : CAN

38
PRINCIPE
DMA : principe – STM32 – application

Demande de bus Adresse mémoire


DMA request Nombre de mots

µP Cession de bus
Adresse périphérique

Sens de transfert
Mémoire
Périphérique

Fin de transfert
Contrôleur DMA

TRANSFERT

BUS d'ADRESSE et de DONNEE


 Mémoire / Mémoire
 Mémoire / Périphérique
 Périphérique / Mémoire
 Périphérique / Périphérique

39
Pr. Acacio MARQUES - ISMIN 2023 39 Principe

Le DMA (Direct Memory Access) est un contrôleur piloté par le Cortex.


Une fois programmé, il permet des transferts de mémoire à mémoire, mémoire à périphérique, et périphérique à
périphérique sans intervention du Cortex qui pourra effectuer d’autres tâches pendant ces opérations.
La conclusion du transfert ou la disponibilité du périphérique peuvent être signalés par interruption.

Étapes de transfert DMA :


1) Configuration
• Port-adresse source
• Port-adresse destination
• Nombre d’éléments à transférer

2) Démarrage transfert
3) Fin du transfert, interruption CPU optionnelle
4) Redémarrage automatique ou attente d’un nouveau démarrage ordonné par le CPU

39
ARCHITECTURE
DMA : principe – STM32 – application

40
Pr. Acacio MARQUES - ISMIN 2023 40 Les 7 canaux capitaux

Le STM32L476 possède 2 DMA indépendant soit 14 voies au total.

Le circuit DMA du STM32 n’occupe que 40 % de la bande passante du bus même en fonctionnement continu ce
qui autorise les accès CPU en parallèle.

Le démarrage des transferts est possible via un événement issu des périphériques (hardware request : timeout
timer, fin de conversion ADC, réception UART etc…) mais il est aussi possible via un trigger logiciel.

40
REQUEST
DMA : principe – STM32 – application
1
2

41
Pr. Acacio MARQUES - ISMIN 2023 41 Quelques IT

Chaque DMA possède 7 voies indépendantes de demande de transfert.


Chaque voie possède 4 niveaux de priorité programmables (software priority) : very high, high, medium, low.
En cas de conflit entre des demandes ayant la même priorité, c’est le numéro de la voie qui les départage
(hardware priority)
Les périphériques peuvent déclencher (request) le DMA mais chacun à un channel qui lui est propre pour cela.
Les transferts en mode mémoire-à-mémoire (M2M) peuvent provenir, sans distinction, d’une des 7 voies
disponibles et n’ont pas besoin de request issu d’un périphérique (SW trigger)
La taille des transferts possibles est byte, half word, word et le nombre d’éléments maximum transférable est de
65 535.

Remarque : certains périphériques ne sont accessibles que sur le DMA2.

41
INTERRUPTIONS
DMA : principe – STM32 – application

 Register CallBack pour le M2M


Register Call Back
HAL_DMA_RegisterCallback(&hdma, HAL_DMA_XFER_HALFCPLT_CB_ID, toto_CB);

HAL_DMA_RegisterCallback(&hdma, HAL_DMA_XFER_CPLT_CB_ID, titi_CB);

HAL_DMA_RegisterCallback(&hdma, HAL_DMA_XFER_ERROR_CB_ID, tata_CB);

HAL_DMA_RegisterCallback(&hdma, HAL_DMA_XFER_ABORT_CB_ID, tutu_CB);

 Ping Pong

Remplissage
Buffer
ADC1 DR register
Half buffer
HT circulaire

Traitement

TC
42
Pr. Acacio MARQUES - ISMIN 2023 42 Quizz

Pour le transfert de mémoire à mémoire, vous aurez besoin de créer vos CallBack via la fonction
RegisterCallback voir le poster.
Pour les autres cas ou le request est initié par les périphériques les CallBack du DMA sont partagés avec les
CallBack du périphérique (exemple HAL_ADC_ConvHalfCpltCallback et HAL_ADC_ConvCpltCallback).

Les interruptions half et complete associées au mode circulaire permettent la technique du ping pong, optimisant
le traitement des données (travail en parallèle CPU et DMA).
Lorsque la moitié du buffer est rempli (Half Transfert IT), le CPU passe en phase de traitement pendant que le
DMA continue à remplir la seconde moitié.
Celle-ci sera signalée remplie par l’interruption Transfert Complete commandant la permutation du traitement
CPU sur l’autre buffer et ainsi de suite. C’est ce qu’on appelle la technique du ping-pong.

42
QUIZZ
DMA : principe – STM32 – application

1. Combien de voies DMA le STM32L476 possède-t-il ?

2. Donnez la liste des périphériques qui ont une interface DMA.

3. Quelles interruptions chaque voie peut-elle générer ?

4. Quelles sont les voies qui peuvent déclencher un transfert de mémoire à


mémoire ?

5. Quel est l’intérêt d’un circuit DMA ?

6. Pourquoi le DMA n’utilise-t-il que 40 % de la bande passante du bus ?

7. Quelle taille mémoire maximum le DMA peut-il transférer en mode Normal ?

8. Quel est l’intérêt du mode circulaire ?

9. Sur quel bus le DMA est-il connecté ?

10. A quoi sert le paramètre M2M ?

43
Pr. Acacio MARQUES - ISMIN 2023 43 Analyse performances

43
TP0
DMA : principe – STM32 – application

*-------------------------------------------------------------------------------------------------------------------------------------------------
* FONCTION : Transfert mémoire Flash vers mémoire SRAM sans et avec DMA du message suivant
* const char message1[10000]="Centre de microelectronique de provence - George Charpak";
* char message2[10000];
* Mesurer le temps de transfert DMA en utilisant l'interruption DMA fin transfert, comparer
*------------------------------------------------------------------------------------------------------------------------------------------------

 Mesure temporelle

44
Pr. Acacio MARQUES - ISMIN 2023 44 Attention aux yeux

Pour mesurer le temps utiliser une variable (ici debut) qui encadre le délai à mesurer.
Cette variable vous pouvez ensuite la représenter via l’outil SWV Data Trace Timeline et en déduire le temps écoulé.
Au préalable il faut valider l’outil SWV dans la configuration du debugger.

44
TP1
DMA : principe – STM32 – application
*-------------------------------------------------------------------------------------------------------------
* FONCTION : Piloter des LED RVB adressables
*------------------------------------------------------------------------------------------------------------
« Couleur » Freq = 800 khz
0xFF 0xFF 0x00
«1» 0,8 µs 0,45 µs
23 0 RC = 64 %

0x00 0x00 0xFF «0» 0,45 µs 0,8 µs


23 0 RC = 32 %

0xFF 0x00 0x00 « Ret »


0 50 x 1,25 µs (doit être > 50 µs)
23

0x00 0xFF 0x00 DMA request


23 0
ARR = 100
PWM_LED

PB1 80 Mhz TIM3


TIM3 PwmRC [k]
0
32 PWM_LED
64

CCR1
145
45
Pr. Acacio MARQUES - ISMIN 2023 45 Une partie de ping pong ?

Explications
La couleur d’une LED est codée sur 3 composantes codées en uint8_t : Green, Red et Blue (mélange de 3 couleurs
primaires)
Chacune de ces valeurs, entre 0 et 255, détermine l’intensité de la couleur primaire correspondante (0 : couleur éteinte,
255 : couleur au max d’intensité).
Considérons une de ces composantes. On écrit sa valeur en donnant une séquence de 8 valeurs de CCR, 1 par bit, avec :
- bit i = 1 encodé par CCR tel que rapport cyclique = 64% (pour i de 0 à 7)
- bit i = 0 encodé par CCR tel que rapport cyclique = 32% (pour i de 0 à 7)
(Voir : [Link]
Le remplissage du tableau PwmRC est donné ci-dessous.
Il peut être amélioré en parcourant chaque couleur bit à bit et non pas octet par octet.
uint8_t Couleur[12] = {0,255,0,255,0,0,0,0,255,0,255,255};
uint16_t PwmRC[96+50];
for (i=0; i<12; i++){
for (j=0; j<8; j++){
if(Couleur[i] == 0) PwmRC[k]= 32;
else PwmRC[k]= 64;
k++;
}}

for (i=0; i<50; i++){


PwmRC[k]= 0; // sert de return, fin de séquence.
k++;
}
45
TP2
DMA : principe – STM32 – application
*-------------------------------------------------------------------------------------------------------------
* FONCTION : Convertir la tension issue du potentiomètre et du LDR.
La période d’échantillonnage sera de 5 ms via le timer 6.
* Remplir un buffer de 128 échantillons de chaque via le DMA.
* Faire la moyenne (moy_pot, moy_lum) sur ces 128 échantillons.
* Pour accélérer le traitement on utilisera un buffer circulaire de
* 512 échantillons.
* Allumer la LED5 si la luminosité est basse, moy_pot servant de
* seuil
*------------------------------------------------------------------------------------------------------------
TRO6 TRO6 TRO6 TRO6

pot, lum pot, lum pot, lum pot, lum


46
Pr. Acacio MARQUES - ISMIN 2023 46 Ping

Pour trigger l’ADC1 utiliser la sortie TRGO du timer6 plutôt qu’un démarrage soft.

Le DMA fonctionnera en mode circulaire pour utiliser la technique « ping pong ».


Attention pour activer le mode circulaire il faut sélectionner circular pour le DMA mais également valider le paramètre
DMA_continuous requests dans l’ADC.

Pour implémenter le ping pong vous aurez besoin des interruptions « half transfert » et « complete transfert » du DMA
qui sont gérées avec les CallBack de l’ADC.

46
TP2
DMA : principe – STM32 – application

3.3V Buffer
pot 0
POT LDR_ADC1_13

lum
PA6 PC4 SW2
PB11
pot
ADC1 lum
SW1
PA15
LED5
PB2
LED4
255
PC5
HT
LED3
PA10
LED2
PA7

TC
511

TRO6 TRO6 TRO6

pot, lum pot, lum pot, lum


47
Pr. Acacio MARQUES - ISMIN 2023 47 Pong

Recette :
• Le timer 6 est configuré à une fréquence de 200 Hz avec un « trigger update selection : update event »
• Le DMA1 est « connecté » à l’ADC1 en mode « circular », « peripheral to memory »
• L’ADC1 utilise les « DMA continuous requests » et le « Scan conversion mode » avec un scan des canaux et une
fin de conversion pour chaque canal. On doit aussi préciser que c’est le timer 6 qui lance la séquence de captures.
Ne pas oublier d’activer ses interruptions pour gérer les callbacks de demi-transfert DMA (HT) et de transfert
complet DMA (TC).

Chaque trigger du timer (toutes les 5 ms), deux conversions ADC sont réalisées : canal 11 pot et canal 13 ldr.
Les résultats sont automatiquement transférés par le DMA dans le tableau Buffer.
Lorsque Buffer est à moitié remplis, une interruption HT survient et l’on peut calculer avec le CPU la moyenne de ces
256 premiers éléments (de 0 à 255).
En parallèle, simultanément, le DMA continuer de remplir Buffer au-delà de l’élément 255.
Lorsque Buffer est complètement remplis, une interruption TC survient et l’on peut calculer avec le CPU la moyenne
de ces 256 derniers éléments (de 256 à 511).
En parallèle, simultanément, le DMA continue de remplir Buffer à partir de l’élément 0.
Etc.

47
SOMMAIRE
INTRODUCTION : objectifs – biblio - cible

D03 Introduction : objectifs - biblio - cible

D06 Power Control : supply – low power – application

D20 Watchdog : principe – STM32 – application


D32 DMA : principe – STM32 – application
D42 I²C : principe – STM32 – application
D55 SPI : principe – STM32 – application
D70 CAN : intérêt - protocole – erreurs – timing – STM32
– application

48
Pr. Acacio MARQUES - ISMIN 2023 48 Principe

Durant 8 séances nous allons approfondir notre connaissance du microcontrôleur STM32L476RG de


STMicroelectronics.
Le cours SAM1 de première année est un prérequis, on ne reviendra pas sur le fonctionnement de l’outil de
développement ni sur l’architecture du STM32.

Déroulé du cours (séances de 3 heures) :

Séance 1 : Power Control


Séance 2 : Watchdog
Séance 3 : DMA
Séance 4 : DMA
Séance 5 : I²C
Séance 6 : SPI
Séance 7 : CAN
Séance 8 : CAN

48
CARACTERISTIQUES
I²C : principe – STM32 – application

 Bus série synchrone 8 bits, half-duplex


 3 fils : Signal DAta, Signal CLock, Masse
 Communication inter-circuits
 100 kb/s (standard) , 400 kb/s (fast) , 3.2 Mb/s (high-speed)
 Multi-points
 Multi-maîtres
 Sorties drains ouverts

49
Pr. Acacio MARQUES - ISMIN 2023 49 Attention conflits

Le bus I²C (Inter Integrated Circuit) fait partie des bus série : 3 fils pour faire tout passer.
Il a été développé au début des années 1980, par Phillips pour minimiser les liaisons entre les circuits intégrés
numériques de ses produits (Téléviseurs, éléments Hi-Fi, magnétoscopes ...).

Pour se connecter à un bus I²C il faut une masse et deux fils de communication.
Le premier fil, SDA (Signal DAta), est utilisé pour transmettre les données.
L'autre fil, SCL (Signal CLock) est utilisé pour transmettre un signal d'horloge synchrone (signal qui indique le
rythme d'évolution de la ligne SDA).

49
ARBITRAGE
I²C : principe – STM32 – application

 Niveau électrique  Niveau données

50
Pr. Acacio MARQUES - ISMIN 2023 50 Les différentes trames

Il reste maintenant un problème crucial. Comment permettre à plusieurs circuits logiques de connecter leurs sorties
ensemble (multipoints), sachant que certains circuits voudront imposer un niveau haut tandis que d'autres voudront
imposer un niveau bas ? La réponse est connue depuis longtemps. Il faut utiliser des sorties à collecteur ouvert (ou à drain
ouvert pour des circuits CMOS). Le niveau résultant sur la ligne est alors une fonction « ET » de toutes les sorties
connectées. Attention ne pas oublier les résistances de pull up sur les lignes SDA et SCL.

Au repos, tous les circuits connectés doivent imposer un niveau haut sur leurs sorties respectives. Avant de tenter de
prendre le contrôle du bus, un circuit doit vérifier que les lignes SDA et SCL sont au repos, c'est-à-dire à l'état haut. Si
c'est le cas, le circuit indique qu'il prend le contrôle du bus en mettant la ligne SDA à 0. À partir de ce moment-là, les
autres circuits savent que le bus est occupé et ils ne devraient pas tenter d'en prendre contrôle. Le circuit qui vient de
prendre le contrôle du bus en devient le maître (en anglais « master »). C'est lui qui génère le signal d'horloge, quel que
soit le sens du transfert.

Il existe la possibilité que deux maîtres prennent le contrôle du bus en même temps. Si cela ne pose pas de problème sur
le plan électrique grâce à l'utilisation de collecteurs ouverts, il faut pouvoir détecter cet état de fait pour éviter la corruption
des données transmises. Comment cela se passe-t-il ?
Si tous les maîtres qui ont pris le contrôle du bus placent le même état sur la ligne SDA, le conflit n'étant pas visible, la
transmission se poursuit normalement, comme si chacun était seul. En revanche, dès qu'un maître place un niveau
différent des autres sur la ligne SDA, il y aura forcément un état bas sur la ligne SDA, tandis qu'un ou plusieurs maîtres
souhaitaient imposer un niveau haut. Tous les maîtres qui ont demandé un niveau haut, tandis que la ligne SDA reste à 0,
vont perdre immédiatement le contrôle du bus.

50
TRAMES
I²C : principe – STM32 – application

 Adresse
7 bits

 Adresse
10 bits

 BURST
Mode

 COMBINED
Transaction

51
Pr. Acacio MARQUES - ISMIN 2023 51 Détails

Le mode burst permet de lire ou écrire plusieurs octets sans stopper à chaque fois la communication.
On monopolise la ligne tout le temps de la transaction.

Le mode combined permet d’enchainer en mode burst écriture et lecture en gardant la ligne.

51
PROTOCOLE
I²C : principe – STM32 – application

 Ecriture

 Lecture

52
Pr. Acacio MARQUES - ISMIN 2023 52 Cas STM32

Le nombre de composants qu'il est possible de connecter sur un bus I²C étant largement supérieur à deux, le
maître doit pouvoir choisir quel esclave est censé recevoir les données.
Dans ce but, le premier octet que transmet le maître n'est pas une donnée, mais une adresse.
Le format de l'octet d'adresse est un peu particulier puisque le bit D0 est réservé pour indiquer si le maître
demande une lecture à l'esclave ou bien au contraire si le maître impose une écriture à l'esclave.

Une fois les 8 bits transmis, le circuit esclave doit imposer un bit d'acquittement ACK sur la ligne SDA.
Pour cela, le maître place sa propre sortie au niveau haut, tandis que l'esclave place sa sortie au niveau bas.
Puisque les sorties sont à collecteur ouvert, la ligne SDA restera au niveau bas à cause de l'esclave.
Le maître relit ensuite la ligne SDA, si la valeur lue pour le bit ACK est 0, c'est que l'esclave s'est bien acquitté de
l'octet reçu, sinon c'est qu'il y a une erreur et le maître doit générer la condition arrêt.

52
PARAMETRES
I²C : principe – STM32 – application

 Horloges

 Timings

53
Pr. Acacio MARQUES - ISMIN 2023 53 Application

Comme pour l’UART, l’horloge du périphérique I²C peut-être indépendante du bus APB.

Des filtres analogiques et numériques sont présents sur les lignes SDA et SCL, l’ordre du filtre numérique est
programmable de 0 à 15 mais est désactivé en mode low-power a contrario du filtre analogique.

Les Timings Tsetup et hold time sont configurables via les registres SDADEL et SCLDEL. Le temps haut et bas de
l’horloge est également configurable via respectivement les registres SCLH et SCLL. Heureusement dans la plupart
des cas les timings par défaut conviennent.

Une ligne SMBus Alert peut être utilisé en mode SMBus (System Management Bus). Le SMBus est étroitement lié au
standard I²C, et dans de nombreux cas, les périphériques SMBus sont également compatibles avec le standard I²C.
Cependant, le SMBus a des spécifications supplémentaires et des fonctionnalités spécifiques qui le rendent adapté aux
applications de gestion système (surveillance batteries, les ventilateurs, les capteurs de température, contrôle de
tension …). Le SMBus fonctionne généralement à des vitesses plus lentes que le bus I²C, avec des vitesses typiques
allant jusqu'à 100 kbps.

53
QUIZZ
I²C : principe – STM32 – application

1. Quels sont les différentes vitesses disponibles pour le bus I2C du STM32L476 ?

2. Que se passe-t-il si deux maîtres essaient de communiquer simultanément sur le bus


I2C ?

3. Quelle est la différence entre une condition de START répétée et une condition de
STOP sur le bus I2C ?

4. Quelle est l'utilité de la fonction d'horloge étirable (clock stretching) sur le bus I2C ?

5. Quel est le rôle d'une résistance pull-up dans une configuration I2C ?

6. Quel est l'impact d'une résistance pull-up mal dimensionnée sur le bus I2C ?

54
Pr. Acacio MARQUES - ISMIN 2023 54 Quizz

54
TP0
I²C : principe – STM32 – application
*-----------------------------------------------------------------------------------
* FONCTION : Affichage
* Afficher « Hello word » sur l’afficheur OLED
* à 400 kb/s
*----------------------------------------------------------------------------------
SW2
PB11

SW1
PA15
LED5
PB2
LED4
PC5
Main()
GPIO

LED3
PA10

PA7
LED2 Init I2C1 400kb/s
INTOF1
PC11
SSD1306_Init();
PH0
SHUT1

PC10
INTOF2 SSD1306_GotoXY (0,0);
PH1
SSD1306_Puts ("Hello", &Font_11x18, 1);
SHUT2
SSD1306_GotoXY (0, 30);
I2C1 SSD1306_Puts ("word", &Font_11x18, 1);
PB7 PB6 SSD1306_UpdateScreen();
SDA SCL

CO²

55
Pr. Acacio MARQUES - ISMIN 2023 55 CubeMX

Remarque : compte tenu de la fréquence de balayage de l’afficheur OLED, il ne peut pas fonctionner en dessous
de 400 kbit/s de débit. Assurer-vous donc que le mode FAST est sélectionné à 400 kbit/s.

55
INIT
I²C : principe – STM32 – application

 Ouvrir l’IDE sans changer de workspace : Sauvegarder le TP précédent, Ouvrir STM32Cube


 Initialiser I2C1 :

Si Custom Timing Enabled


Bit 31 - 28 : SCLL (SCL Low Period)
Bit 27 - 20 : SCLH (SCL High Period)
Bit 19 - 16 : SDADEL (Data Delay)
Bit 15 - 8 : SCLDEL (Data Setup Time)
Bit 7 - 0 : Prescaler (Timing Prescaler)

56
Pr. Acacio MARQUES - ISMIN 2023 56 Installer la librairie de gestion de l’OLED

Laisser les valeurs Rise Time et Fall Time à 0 indique généralement au matériel de gérer automatiquement les
temps de montée et de descente en fonction de la configuration du bus et des spécifications électriques du
microcontrôleur STM32. Cela peut être suffisant pour de nombreuses applications.

Lorsqu'un esclave I²C n'est pas prêt à recevoir ou à envoyer des données, il peut "étirer" ou ralentir le signal
d'horloge SCL (clock stretch mode) pour indiquer au maître I²C qu'il doit attendre. Cela permet à l'esclave de
rattraper son retard et de se préparer à la communication. Le mécanisme d'étirement de l'horloge est une
fonctionnalité intégrée au protocole I²C pour éviter les collisions et les erreurs de données.

General Call Address Detection : L'appel général est une fonctionnalité du protocole I²C qui permet à un maître
d'envoyer une trame spéciale à tous les esclaves sur le bus plutôt qu'à un esclave spécifique (broadcast). Cela peut
être utilisé pour envoyer des commandes ou des instructions générales à tous les périphériques I²C connectés.

Dual Address Acknowledged : Les adresses doubles sont utilisées pour permettre à un esclave I²C de répondre à
deux adresses différentes. Cela peut être utile dans certaines situations où vous avez des périphériques avec des
adresses physiques différentes, mais qui sont gérés par le même esclave. Par exemple, vous pourriez avoir un
capteur avec deux plages de registres distinctes accessibles via deux adresses différentes.

Lorsque le STM32 fonctionne en tant qu'esclave I²C, il doit avoir une adresse unique pour être adressé par d'autres
maîtres sur le bus : Primary slave address. Si cette adresse est à 0 c’est sûrement qu’il n’y a aucun autre maître
dans les parages.

56
BIBLIOTHEQUE
I²C : principe – STM32 – application

 Installer via campus la librairie de l’OLED :


 Copier/coller les fichiers ssd1306.c, fonts.c dans Src du projet
 Copier/coller les fichiers ssd1306.h, fonts.h dans Inc du projet
 Inclure les .h
/* USER CODE BEGIN Includes */
#include "fonts.h"
#include "ssd1306.h"
/* USER CODE END Includes */

 Utiliser les fonctions GotoXY et Puts pour afficher votre message

3 fonts : 7*10 6 lignes de 18 caractères


11*18 3 lignes de 11 caractères
64 pixels
16*26 2 lignes de 8 caractères
NB : Vous pouvez créer votre propre font

128 pixels

57
Pr. Acacio MARQUES - ISMIN 2023 57 I²C suite

Pour gérer de tel afficheur il faut une bibliothèque, vous la trouverez dans le répertoire de travail STM32L4 sur
campus : ssd1306.h, fonts.h et ssd1306.c, fonts.c.
Dans le .c vous trouverez la fonction d’initialisation de l’afficheur SSD1306_Init et SSD1306_Puts pour écrire une
chaine de caractères. Dans le .h l’adresse de l’afficheur SSD1306_I2C_ADDR.

Remarque : Sur le web des exemples existent mettant en avant les fonctionnalités de l’afficheur.

57
TP1
I²C : principe – STM32 – application
*-----------------------------------------------------------------------------------
* FONCTION : Capteur de qualité d’air
* Tester le capteur, si OK
* Afficher la qualité de l’air (ticks) sur l’afficheur
* OLED toutes les secondes
SW2
PB11

PA15
SW1
*----------------------------------------------------------------------------------
LED5
PB2

PC5 LED4
*--------------------------------------------------------------------------
* FONCTION : Amélioration
GPIO

LED3
PA10

* Afficher le VOC_index toutes les secondes


LED2
PA7

PC11
INTOF1
*--------------------------------------------------------------------------
PH0
SHUT1

INTOF2
PC10
PH1
SHUT2

I2C1
PB7 PB6

SDA SCL

CO²

58
Pr. Acacio MARQUES - ISMIN 2023 58 Des explications

58
SGP40 DATA
I²C : principe – STM32 – application

 I²C Adresse = 0x59

320
 Self test Cmde = 0x28 , 0x0E ms
Result 0xD4 OK
0x4B NOK

 Mesure Cmde = 0x26 ,0x0F, 0x80, 0x00, 0xA2, 0x66, 0x66, 0x93

Cmde mesure Humidité 50 %, CRC Température 25°C, CRC


30
ms

Result = XX YY CC

SRAW_VOC Ticks + CRC

59
Pr. Acacio MARQUES - ISMIN 2023 59 C’est quoi l’index VOC ?

Le capteur SGP40 permet une compensation tenant compte de l’humidité et de la température, il suffit d’insérer
ces informations dans la trame de cmde transmise via I²C.
Attention, il faut également insérer un octet de CRC par data !
Par défaut nous enverrons une commande spécifiant 50 % d’humidité relative et 25 °C de température.

L’information brute (SRAW_VOC) entre 0 et 65535 ticks est proportionnelle au logarithme de la résistance Mox.
Elle varie donc comme la concentration en gaz, plus il y a de gaz, plus il y a d’électrons et donc plus la résistance
baisse.
La mesure est donc relative et difficilement exploitable telle quelle.

59
CAPTEUR DE GAZ – Index VOC ?
I²C : principe – STM32 – application

Résistance Mox
SRAW_VOC en tick [ 0..65535]

R = k . log (gaz)

Relative intensity

 Gas Index algorithm Sensirion : voir librairie SGP40

60
Pr. Acacio MARQUES - ISMIN 2023 60 Autre bus série

Good

Les capteurs à oxydes métalliques utilisent des matériaux semi-conducteurs qui présentent des variations de résistance électrique en
fonction de l’atmosphère gazeuse dans laquelle ils sont placés.
Mais ils souffrent d'une faible sensitivité lorsqu’ils fonctionnent à température ambiante et d’un manque de sélectivité.
Il faut donc les chauffer typiquement entre 300°C et 500°C.
L’humidité doit également être prise en compte pour une meilleure précision de la mesure.

Le signal brut peut être lu seul, mais pour obtenir les meilleurs résultats, l'algorithme gas index de Sensirion traite le signal pour produire des
données d'indice de VOC (Volatile Organic Compounds) ou COV en français pour « Composés Organiques Volatils ».
La valeur VOC index traité varie de 0 à 500 points d'indice.
Les données sont relatives à l'historique de la pièce surveillée, où 100 représente la lecture moyenne rapportée au cours des dernières 24
heures.
Les valeurs au-dessus de 100 indiquent un événement de COV ou une qualité de l'air inférieure à la moyenne, tandis que les valeurs
inférieures indiquent une qualité de l'air supérieure à la moyenne.
Le taux et l'intensité du changement aident à identifier la gravité de l'événement pour déclencher des actions telles que la mise en marche
des ventilateurs pour ventiler la zone jusqu'à ce que le signal se stabilise à nouveau.

Pour mettre en place l’algorithme copier la librairie SGP40 présente sur campus dans Driver du projet.
L’algorithme suppose une mesure toutes les secondes.

while (1){
voc1 = SGP40_MeasureRaw(25, 50);
voc2 = SGP40_MeasureVOC(25, 50);
HAL_Delay(500);
}

60
SOMMAIRE
INTRODUCTION : objectifs – biblio - cible

D03 Introduction : objectifs - biblio - cible

D06 Power Control : supply – low power – application

D20 Watchdog : principe – STM32 – application


D32 DMA : principe – STM32 – application
D42 I²C : principe – STM32 – application
D55 SPI : principe – STM32 – application
D70 CAN : intérêt - protocole – erreurs – timing – STM32
– application

61
Pr. Acacio MARQUES - ISMIN 2023 61 Principe

Durant 8 séances nous allons approfondir notre connaissance du microcontrôleur STM32L476RG de


STMicroelectronics.
Le cours SAM1 de première année est un prérequis, on ne reviendra pas sur le fonctionnement de l’outil de
développement ni sur l’architecture du STM32.

Déroulé du cours (séances de 3 heures) :

Séance 1 : Power Control


Séance 2 : Watchdog
Séance 3 : DMA
Séance 4 : DMA
Séance 5 : I²C
Séance 6 : SPI
Séance 7 : CAN
Séance 8 : CAN

61
CARACTERISTIQUES
SPI : principe – STM32 – application

 Motorola vers 1985


 Bus de communication entre circuits
 Mode série synchrone
 Fonctionnement en mode full duplex
 De type maître / esclave
 Pas de contrôle des données ni de contrôle de flux
 Débit Jusqu’à 50 Mhz

62
Pr. Acacio MARQUES - ISMIN 2023 62 Topo

Selon Wikipedia :

Une liaison SPI (pour Serial Peripheral Interface) est un bus de données série synchrone baptisé ainsi par Motorola,
au milieu des années 1980 qui opère en mode full-duplex. Les circuits communiquent selon un schéma maître-
esclave, où le maître contrôle la communication. Plusieurs esclaves peuvent coexister sur un même bus, dans ce
cas, la sélection du destinataire se fait par une ligne dédiée entre le maître et l'esclave appelée « Slave Select (SS)
».

Il faut autant de fils Slave Select que d’esclaves, donc c’est une liaison qui reste gourmande en fil comparez à la
liaison I²C par exemple. Son point fort c’est son débit.

62
TOPOLOGIE
SPI : principe – STM32 – application

 Direct Connection

 Daisy Chain

63
Pr. Acacio MARQUES - ISMIN 2023 63 Signaux

Alors que le SPI classique présente certaines limites en termes de gestion des périphériques et de complexité du
câblage, le principe du Daisy Chain SPI offre une solution élégante à ces défis.

63
MODE
SPI : principe – STM32 – application

Idle clock = Low, Échantillonnage front montant


Idle clock = Low, Échantillonnage front descendant
Idle clock = High, Échantillonnage front descendant

Idle clock = High, Échantillonnage front montant

64
Pr. Acacio MARQUES - ISMIN 2023 64 Diagramme

Une transmission SPI typique est une communication simultanée entre un maître et un esclave :

Le maître génère l'horloge et sélectionne l'esclave avec qui il veut communiquer par l'utilisation du signal SS.
L'esclave répond aux requêtes du maître
À chaque coup d'horloge le maître et l'esclave s'échangent un bit. Après huit coups d'horloges le maître a transmis
un octet à l'esclave et vice versa. La vitesse de l'horloge est réglée selon des caractéristiques propres aux
périphériques.

CPOL : fixe la polarité de l’horloge en mode idle


CPHA : fixe le front d’échantillonnage, 0 premier front, 1 deuxième front.

La plupart du temps c’est le mode 0 qui est utilisé mais vérifier toujours les data sheet.

64
BLOC DIAGRAMME
SPI : principe – STM32 – application

65
Pr. Acacio MARQUES - ISMIN 2023 65 Modes

Toutes les transactions de données SPI passent par les FIFOs (First-In-First-Out) intégrées de 32 bits.
Cela permet au SPI de fonctionner en flux continu et d'éviter les surcharges lorsque la taille de la trame de données
est courte.
Ces FIFOs sont utilisées dans tous les modes SPI, sauf en mode réception uniquement (esclave ou maître) avec
calcul de CRC activé.

Deux calculateurs CRC séparés sont implémentés pour vérifier la fiabilité des données transmises et reçues.
Le SPI offre un calcul CRC8 ou CRC16 indépendamment de la longueur de la trame de données, qui peut être fixée
à 8 bits ou 16 bits.
Pour toutes les autres longueurs de trame de données, aucun CRC n'est disponible.
La valeur CRC calculée est vérifiée automatiquement à la fin du bloc de données, que le transfert soit géré par le
CPU ou par le DMA.
Lorsque l'on détecte une discordance entre le CRC calculé en interne sur les données reçues et le CRC envoyé par
l'émetteur, un drapeau CRCERR est activé pour indiquer une erreur de corruption des données.

65
MODE
SPI : principe – STM32 – application

Hardware NSS output signal

Hardware NSS
signal disabled

1K

66
Pr. Acacio MARQUES - ISMIN 2023 66 Mode

Le mode le plus utilisé est le mode Master/Slave avec 1 ou plusieurs esclaves. La communication Full Duplex est
disponible par défaut.
Mais si nécessaire pour économiser du câblage on peut utiliser une communication simplex ou half duplex.

Remarque : En cas de multi-slave il faut utiliser des GPIO en output pour les sélectionner.
Un seul doit être sélectionné à la fois. Cela correspond au NSS software mode (Hardware NSS signal disabled).
L’autre mode NSS hardware output signal gère en interne la sortie NSS, elle passe automatiquement à zéro lorsque
le maître commence la communication.
Bien sûr cela n’est utile que lorsqu’on a un seul slave. Le mode NSS hardware input signal est lui utilisé en mode
multi maître.

66
MODE
SPI : principe – STM32 – application

Hardware NSS input Signal

67
Pr. Acacio MARQUES - ISMIN 2023 67 FIFO

Un mode multi-maîtres est possible même si le protocole SPI ne le propose pas, chaque maître pouvant accéder au bus
à tour de rôle.
Les stations sont en mode esclave par défaut lorsque le bus est au repos.
Au début d’une communication une station commute en mode maître pour prendre temporairement le contrôle du bus.
Dans cette configuration la broche NSS est configuré en input et permet de détecter les conflits : quand la station est
maître son entrée NSS doit être à 1.

Remarque : ce mode multi-maîtres est limité à 2 maîtres, 2 nodes.

67
FIFO ACCESS & IT
SPI : principe – STM32 – application

68
Pr. Acacio MARQUES - ISMIN 2023 68 NSS Pulse

Les requêtes DMA peuvent être déclenchées lorsque les seuils de remplissage de la FIFO sont atteints.
Ces seuils (FxLVL)sont programmables sur 4 niveaux (0, ¼, ½, >½).
Remarque : Actuellement STM32CubeIDE ne permet pas de configurer ces seuils (ils sont fixés à 00 au reset).

68
NSS PULSE
SPI : principe – STM32 – application

• Propre aux STM32

• Simplification de la Synchronisation
• Réduction du Risque de Conflits
• Compatibilité avec le Matériel TI

69
Pr. Acacio MARQUES - ISMIN 2023 69 Comparaison

Le mode NSSP (NSS Pulse) est une fonctionnalité du protocole SPI (Serial Peripheral Interface) dans les
microcontrôleurs STM32.
Ce mode permet de générer une brève impulsion NSS (Slave Select) au lieu de maintenir un niveau bas constant
pendant toute la durée de la communication SPI.

Simplification de la Synchronisation :
En générant une impulsion courte, le mode NSSP simplifie la synchronisation entre le maître et les esclaves,
surtout dans des environnements où plusieurs périphériques SPI partagent le même bus.
Réduction du Risque de Conflits :
L'utilisation d'impulsions NSS réduit le risque de conflits sur le bus SPI en minimisant la période pendant
laquelle plusieurs esclaves peuvent être activés simultanément.
Compatibilité avec le Matériel TI :
Le mode NSSP est compatible avec les périphériques TI, qui utilisent des impulsions NSS pour délimiter les
trames de données.

69
COMPARAISON
SPI : principe – STM32 – application

115200 hz 50 Mhz 1 Mhz

Distance D 15 Dm qqDcm qqDcm

ConsommationD D
moyenne D
faible élevée
D

Communication simple à Transferts rapides de Communication courte distance


Utilisation D D
longue distance
D D
avec plusieurs nœuds Quizz
données
70
Pr. Acacio MARQUES - ISMIN 2023 70 Quizz de ChatGPT

70
QUIZZ
SPI : principe – STM32 – application

1. Quel paramètre de configuration SPI détermine si les données sont échantillonnées sur
le front montant ou descendant du signal d'horloge ?

2. Quel est le rôle de la ligne NSS (Slave Select) dans une communication SPI ?

3. La ligne NSS peut-elle être utilisé en cas de mode muti-slaves ? Par quoi la remplacer ?

4. Le mode muti mâître fait-il partie du protocole SPI standart ?

5. Peut-on configurer un CRC pour toutes les communication inter-circuits ?

6. Quelle est la vitesse maximale de communication typique pour le SPI sur le STM32L4 ?

7. Quel est l'avantage principal de l'utilisation du DMA (Direct Memory Access) avec le
bus SPI sur le STM32L4 ?

71
Pr. Acacio MARQUES - ISMIN 2023 71 Il fait chaud non?

71
TP0
SPI : principe – STM32 – application
*----------------------------------------------------------------------------------------------------------------
* FONCTION : Affichage de la température sur l’écran OLED toutes les secondes
*
*----------------------------------------------------------------------------------------------------------------

ENCA
PA0
SW2
PB11
TIM5
SW1
ENCB
PA1 PA15
LED5
PB2
PWM LED4
PA5 PC5

GPIO
TIM2 PA10
LED3

DIR LED2
PA9 PA7
DIS
PB5 INTOF1
PC11

PH0
SPI2
CSN SHUT1
PB9
INTOF2
PB8 PC2 PC3 PB10 PC10
PH1
SHUT2
CE SDO SDI SCK

I2C1
PB7 PB6

SDA SCL

CSN actif à l’état bas


TC72
CE actif à l’état haut CO²

72Capteur TC72
Pr. Acacio MARQUES - ISMIN 2023 72

72
Capteur de température
SPI : principe – STM32 – application

 Registres

every 150 ms
Low-power
every 150 ms
150 ms after control write

Commande one shot + shutdown : 0b10101 = 0x15

73
Pr. Acacio MARQUES - ISMIN 2023 73 Le polling c’est plus facile

Bien que la dynamique du résultat de l’ADC en 10 bit signé en virgule fixe format Q2(10) permette une mesure de
température de -128 °C à +127,75 °C, la véritable plage de mesure est de -55°C to +125°C avec une résolution de
0,25 °C .

73
Process
SPI : principe – STM32 – application

 Control Write

= 15hex  One-shot mode


HAL_transmit

150 HAL_Delay
ms

 Temp Read

HAL_transmit

HAL_receive
74
Pr. Acacio MARQUES - ISMIN 2023 74 Les interruptions et le DMA c’est plus performant

Remarque : lors de la lecture à une adresse, le capteur répond en envoyant les octets d’adresses inférieures ou
égales.

74
TP1
SPI : principe – STM32 – application
*----------------------------------------------------------------------------------------------------------------
• FONCTION : Affichage de la température sur l’écran OLED toutes les secondes
* Améliorations : 1) Utiliser les timers pour le temps.
* 2) Transfert en DMA.
*-------------------------------------------------------------------------------------
SW2
ENCA
PA0 PB11

TIM5 PA15
SW1

ENCB LED5
PA1 PB2
LED4
PC5

GPIO
PWM
PA5 LED3
PA10

TIM2 PA7
LED2

DIR
PA9 INTOF1
PC11
DIS
PB5
PH0
SHUT1

INTOF2
SPI2
CSN
PB9 PC10

PB8 PC2 PC3 PB10 PH1


SHUT2

CE SDO SDI SCK I2C1


PB7 PB6

SDA SCL

CSN actif à l’état bas


TC72 CE actif à l’état haut CO²

75
Pr. Acacio MARQUES - ISMIN 2023 75 On passe au CAN

2 temporisations sont nécessaires : 1 s et 150 ms.


Les transferts avec DMA sont à privilégier pour de meilleure performance.
Remarque : les callBack DMA et IT sont les mêmes.

75
SOMMAIRE
INTRODUCTION : objectifs – biblio - cible

D03 Introduction : objectifs - biblio - cible

D06 Power Control : supply – low power – application

D20 Watchdog : principe – STM32 – application


D32 DMA : principe – STM32 – application
D42 I²C : principe – STM32 – application
D55 SPI : principe – STM32 – application
D70 CAN : intérêt - protocole – erreurs – timing – STM32
– application

76
Pr. Acacio MARQUES - ISMIN 2023 76 Principe

Durant 8 séances nous allons approfondir notre connaissance du microcontrôleur STM32L476RG de


STMicroelectronics.
Le cours SAM1 de première année est un prérequis, on ne reviendra pas sur le fonctionnement de l’outil de
développement ni sur l’architecture du STM32.

Déroulé du cours (séances de 3 heures) :

Séance 1 : Power Control


Séance 2 : Watchdog
Séance 3 : DMA
Séance 4 : DMA
Séance 5 : I²C
Séance 6 : SPI
Séance 7 : CAN
Séance 8 : CAN

76
AUTOMOBILE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

 BOSCH 1983 – normalisation ISO 1994


 Multiplexage des interconnections
 Haut niveau de sécurité
 Temps réel

Câblage traditionnel

CAN
Simple &
Léger

77
Pr. Acacio MARQUES - ISMIN 2023 77 S’est étendu à toute l’industrie

Le bus CAN, pour « Controller Area Network » est un bus d’abord développé par la société BOSCH dans le cadre
de la conception automobile.
Depuis 1960 le nombre de capteurs augmente sans cesse dans les véhicules et donc le câblage aussi, 2000 m
en 1995.
Pour parer à cela, la société BOSCH invente en 1983 un bus série, asynchrone, multiplexé, sur lequel des
messages circulent tous sur une même paire de fils.
Moins de fils implique moins de maintenance, coûts plus bas et plus grande fiabilité.
L’ampleur du marché automobile a fait baisser les coûts ce qui a permis la diffusion du bus CAN dans les autres
industries (médical, aéronautique, machines industrielles …).

Le fonctionnement de type multi-maîtres apporte redondance et robustesse : tous les nœuds du réseau ont les
mêmes droits et s’occupent de la détection et de la gestion des erreurs.
Les nœuds disposent chacun de leur propre horloge et le protocole est conçu pour qu’ils ajustent celle-ci
régulièrement de sorte à rester mutuellement synchrones.
Par conséquent, des nœuds peuvent être ajoutés au réseau sans qu'il n'y ait rien à modifier tant au niveau logiciel
que matériel et sans qu’il y ait besoin d’une unité centrale pour les coordonner.
Le protocole CAN supporte des débits allant jusqu’à 1 Mbit/s en mode synchrone (CAN classique) et environs 6
Mbit/s en mode asynchrone (FD-CAN) .

77
MARCHE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

Débit
(kbits)
CAN

10 000
Ethernet Réseau d ’ordinateurs

1 000
Automobile
application motorisation
100
I²C
Automobile
D²B
10
application confort
bus de terrain
1 Automobile
industriels
application éclairage

1 10 100 1 000 10 000 Distance (m)

78
Pr. Acacio MARQUES - ISMIN 2023 78 2 vitesses

Historique des bus multi-maîtres :

1) D²B : Domestic Digital Bus développé par Philips en 1970


2) I²C : Inter Integrated Circuit bus développé par Philips en 1980
3) CAN : Controller Area Network développé par Bosch en 1983

Ces 2 derniers bus sont complémentaires :

• Longueur maxi du bus I²C : quelques mètres


• Débit maxi du bus I2C : 100 kb/s
• Longueur maxi du bus CAN : 40 mètres
• Débit maxi du bus I2C : 1 Mb/s

78
NORMES
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

CAN Low speed


ISO-IS
11519-2

CAN High speed


ISO-IS
11898

Nœuds CAN high speed Nœuds CAN low speed


• Contrôle moteur • Climatisation
• ABS • Contrôle sièges
• Boite de vitesses • Plafonnier
• Suspension • …

79
Pr. Acacio MARQUES - ISMIN 2023 79 Type de réseau ?

Attention 2 normes existent : High speed CAN (< 1Mb/s) et Low speed CAN (< 125 kb / s) avec des circuits
différents.
Pour des raisons économiques, on trouve souvent les 2 types de réseaux au sein d’un même système.
Le CAN High speed est désormais complété par un protocole asynchrone introduit en 2012 appelé « Flexible
Datarate CAN ».
FD-CAN susceptible d’atteindre des débits de 6 Mb/s.

79
RESEAU MULTI-MAITRE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

Message

Message Filtrage

Nœud
Emetteur Récepteur
3

Nœud Nœud
2 4

80
Pr. Acacio MARQUES - ISMIN 2023 80 Comment sont géré les confit de bus ?

Le bus CAN est multipoints (ou nœud ou station) et multi-maîtres.


Dans un système multi-maîtres, tous les nœuds du réseau ont les mêmes droits. Ainsi en cas de panne d’un
nœud, le réseau continu à fonctionner.
Bien entendu cela entraine des collisions sur le bus. Les conflits sont levés grâce à la priorité des messages. Un
message prioritaire emporte le bus, les autres nœuds passeront tous en réception (voir « arbitrage » ci-après).
Une autre particularité : les nœuds n’adressent pas une cible particulière, ils se contentent de diffuser le
message, prenne qui veut, l’identificateur servant à décrire le contenu du message. Chaque nœud est équipé d’un
filtre en réception, seuls les identificateurs qui l’intéressent passeront ; ils ignorent simplement les autres.

Valeur du bus : codage NRZ ; bits dominants et récessifs.


La succession de bits transitant sur le bus est codé avec la méthode du NRZ(non return to zero) .
Pendant la durée totale du bit, le niveau de tension de la ligne est maintenu, c'est à dire que pendant toute la
durée durant laquelle un bit est généré, sa valeur reste constante.
On appelle "état dominant" l'état logique 0, et "état récessif" l'état logique 1.

La logique de fonctionnent du codage NRZ correspond à un modèle de collecteurs ouverts selon la figure 3.2. Les trois
nœuds du réseau A, B, C sont modélisés par 3 transistors NPN en configuration collecteur-ouvert (« Et-Câblé »). Le niveau
du bus sera « bas » (dominant) si l’un au moins des transistors est passant. Le niveau du bus sera « haut » (récessif) si tous
les transistors sont simultanément fermés. La table logique est bien celle d’une porte « Et » : la sortie est 1 si toutes les
entrées valent également 1.

Dans le cas d'une transmission simultanée de bits récessifs et dominants, la valeur résultante du bus sera naturellement
dominante.

80
ARBITRAGE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

Champ d'arbitrage

S Identificateur R Champ de
Champ de
O T données 0
commande
F 10 9 8 7 6 5 4 3 2 1 0 R à 8 octets

Station
1

Station
2

Station
3
La station La station 1
2 perd perd
l'arbitrage l'arbitrage

Signal
sur le bus
La station 3 a gagne le bus

81
Pr. Acacio MARQUES - ISMIN 2023 81 Le codage NRZ pose quelques problèmes

L’ARBITRAGE

SOF : Start Of Frame


RTR : Remote Transmission Request. Flag servant à signaler s’il s’agit d’une trame de données (si dominant, càd
RTR = 0) ou de requête (si récessif, càd RTR = 1).

Si plusieurs nœuds veulent envoyer une trame de donnée sur le bus en même temps, seul le nœud qui propose la
trame prioritaire sera autorisé à publier la suite de celle-ci.
La phase d'arbitrage comprend l'envoi bit à bit de l’arbitration field par chaque nœud jusqu’au bit RTR compris.
Lorsqu’un nœud vient de poster un bit récessif (1) et qu’il constate un niveau de bus dominant (0) à la relecture, il
passe en mode de réception. Il a perdu l’arbitrage ce tour ci, mais il retentera sa chance au prochain ; c’est pour
cela que le processus est dit « sans perte ».
La trame prioritaire sera donc celle qui a l’arbitration field le plus petit (celui qui contient le plus de bits
dominants de valeur 0.)
Ce mécanisme garantit qu'il n'y aura ni perte de temps, ni perte d'informations. Il est qualifié de CSMA/CA (pour
« Carrier Sense Multiple Access - Collision Avoidance »).

Remarque : le bit RTR fait partie du champ d’arbitrage donc une trame de donnée est plus prioritaire
qu’une trame de requête à identificateurs égaux par ailleurs.

81
BIT STUFFING
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

 But : détecter les anomalies de réseau


 Principe : ajout d’un bit complémentaire tous les 5 bits identiques

Trame à l'émission avant la mise en place des bits de stuffing

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

Trame avec bits de stuffing (S)

1 2 3 4 5 6 7 S 8 9 10 11 12 13 14 15 16 17 18 19 S 20 21 22 23 24

82
Pr. Acacio MARQUES - ISMIN 2023 82 De quoi a l’air une trame ?

Le Bit stuffing

Le mécanisme de « bit stuffing » s’applique exclusivement aux trames de données. Il est plus précisément actif
pour les champs suivants : SOF, Arbitration Field, Control Field, Data Field, CRC. Il est désactivé pour les
champs suivants : CRC delimiter, ACK field, EOF field, Interframe.
Il consiste à rompre la monotonie du signal sur le bus en insérant un bit de polarité inverse chaque fois que 5 bits
consécutifs de même polarité sont émis.
Par exemple, « 11111110 » deviendra « 111110110 ».
Les stuff-bits sont ajoutés par les nœuds émetteurs et retirés par les nœuds récepteurs.

Il a pour objectifs :

• Fournir assez de fronts dans le signal pour faciliter la synchronisation des nœuds
• Améliorer la détection d’erreurs : si plus de 5 bits consécutifs de même parité sont publiés sur le bus, une
trame d’erreur est émise.

82
TRAMES
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

Trame de données « Bonjour tout le monde, voici la donnée ALPHA, j’espère que vous l’aimerez »

 Format standard – spécification CAN 2.0A : 11 bits d’identification

Arbitration field Control field Data field Check field

Interframe

Acknowledge

Format étendu – spécification CAN 2.0B : 29 bits d’identification

Trame de requêtes « Bonjour tout le monde, quelqu’un peut-il envoyer la donnée ALPHA ? »

83Trame d’erreur
Pr. Acacio MARQUES - ISMIN 2023 83
LES TRAMES DE DONNÉES ET DE REQUÊTES

1) Une trame de données est composée des champs suivants :

Start Of Frame. L’émission du bit SOF dominant marque le début d’une trame de donnée (auquel cas il est dominant) ou d’une trame de requête (il est alors récessif). Un échange ne peut démarrer que si
précédemment le bus était au repos. Un bus au repos est détecté par une séquence de 11 bits récessifs : le bit ACK Delimiter, les 7 nits du champ End of Frame et les 3 bits du champ d’Intermission. SOF
force aussi la resynchronisation de tous les nœuds sur son front descendant.
• Arbitration field. Ce champ est composé d’une zone Identifier et d’un bit RTR.
• Identifier. L’identificateur est codé sur 11 bits, ce qui permet de définir jusqu'à 2048 messages plus ou moins prioritaires sur le réseau.
• 1 bit Remote Transmission Request (RTR, dominant).
• Control field. Ce champ est composé d’un bit IDE, d’un bit r0 et de quatre bits DLC. Il permet à un nœud récepteur de s’assurer qu’il a bien reçu l’ensemble des données qui lui étaient adressées.
• 1 bit IDE. Il établit la distinction entre format standard (lorsqu’il est émis à l’état dominant) et format étendu (s’il est à l’état récessif).
• 1 bit Reserved (r0). Il est réservé pour une utilisation future (dominant).
• 4 bits Data Length Code (DLC). Nombre d'octets contenus dans la zone de données, entre 0 et 8.

Data field. Ici se trouvent les données utiles transmises (valeurs de température, pression …)
• Check field. Champ de vérification de l ’intégrité des données, composé d’une séquence CRC de 15 bits suivis du CRC delimiter.
• 15 bits de Cyclic Redundancy Code (CRC). Le CRC est recalculé à la réception et comparé au CRC lu sur le bus. Si l’un des nœuds trouve une différence, une erreur CRC est déclarée. Il permet
de détecter jusqu’à 5 erreurs de bits indépendantes.
• 1 bit CRC Délimiter (récessif) qui donne du temps pour le calcul du CRC.

Acknowledge field. Ce champ est composé de l'ACK slot et l’ACK delimiter.


• 1 bit ACK Slot. Un nœud en train de transmettre envoie un bit récessif pour le ACK Slot et passe ensuite en mode réception. Tout autre nœud ayant reçu correctement son message l’en informe en
écrasant le bit récessif de l’ACK Slot avec un bit dominant.
• La présence du bit d’acquittement n’indique donc en rien que le contenu du message intéresse un autre nœud. Il signifie simplement qu’un récepteur au moins a reçu physiquement à ses bornes la
trame de message intègre, qui a passé avec succès le test de CRC.
• L’émetteur relis le slot ACK. Si aucun nœud n’a acquitté le message, cela signifie qu’il a émis un CRC incorrect et qu’il est défaillant. Si certains nœuds récepteurs valident le CRC et pas d’autres,
ceux qui échouent sont nécessairement défaillants. Dans tous les cas, des trames d’erreur seront émises.
• 1 bit ACK Delimiter (récessif).

End Of Frame. Le champ EOF marque la fin de la trame ; il est composé de 7 bits récessifs.

Interframe. Le champ d’intermission ou d’inter-trame est constitué au minimum de 3 bits récessifs. Il sépare des trames de message et/ou de requête successives. Il ne peut être interrompu que par une
trame de surcharge.

2) La trame de requête

Une trame de requête a pratiquement la même structure qu’une trame de données avec toutefois deux différences importantes :
• Le bit RTR du champ d’arbitrage (Arbitration field) est récessif
• Elle ne contient pas de champ de données (Data field).
Les 4 bits DLC du champ de contrôle doivent être explicitement renseignés conformément à la taille du champ de données attendu en réponse.

Du fait d’incohérences entre les implémentations des contrôleurs CAN, l’usage des trames de requête est susceptible de générer des collisions sur le bus (notamment si plusieurs
trames de requête sont émises avec le même identifier mais des DLC différents) ou encore de le mettre dans un état indéterminé. Il est donc fortement déconseillé de les utiliser.

83
TRAMES SUITE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

Trame d’erreurs
[ tout le monde crie ] « Quiconque a envoyé ça, recommencez !»

Trame d’erreur
active.

Trame de Surcharges
« Je vous ai entendu mais je suis occupé. Pouvez-vous attendre s’il vous plait ?»

84
Pr. Acacio MARQUES - ISMIN 2023 84 Les erreurs

Une trame d’erreur consiste en un drapeau d’erreur (Error flag) constitué de six bits consécutifs de même polarité et un délimiteur d’erreur (Error
delimiter) constitué de 8 bits récessifs. Elle est émise en réponse à une trame de données ou de requête défaillante. Le drapeau d’erreur est en
général émis sur le bit suivant immédiatement l’alerte. Si l’erreur survient pendant le CRC Field / Check, le bus laisse se terminer l’étape
d’acquittement, et commence à écrire le drapeau d’erreur juste après le ACK delimiter.

Les trames d’erreurs sont déclinées en trames d’erreurs actives pour lesquelles le drapeau d’erreur est constitué de six bits dominants et en
trames d’erreurs passives pour lesquelles le drapeau d’erreur est constitué de six bits récessifs. Laissons ces dernières de côté pour le moment …

Supposons que le bus n’ait jusqu’à présent fait l’objet d’aucune erreur. Lorsqu’un nœud détecte le premier une erreur, il va émettre une trame d’erreur
active. Les six bits dominants de son drapeau vont naturellement écraser les bits récessifs de la trame de donnée en cours de publication. Ceci violera
la règle du bit-stuffing (puisque 6 bits dominants vont s’enchainer sur le bus) ; ce drapeau d’erreur amènera donc tous les autres nœuds du réseau à
publier à leur tour des trames d’erreur actives.

Note : Il est également tout à fait possible que les autres nœuds aient réagi avant et émis des trames d’erreur en réponse à l’erreur initiale. Par ailleurs,
dès lors qu’un nœud prend connaissance d’un drapeau d’erreur, il rejette bien entendu la trame de donnée interrompue.

Mais il faut bien que ce processus prenne fin à un moment pour ne pas saturer le bus avec des trames d’erreurs actives. Le nombre de bits dominants
d'affilée ne doit pas dépasser 12 par suite de la superposition de plusieurs drapeaux d’erreur active.

Cette limite atteinte, les nœuds n'ayant pas encore émis leur trame d'erreur ne sont plus autorisés à le faire. Le délimiteur d’erreur est tout
naturellement fourni par le dernier nœud émetteur. Le nœud ayant émis la trame de données incriminée laisse passer l’Interframe et retente alors sa
chance. Et ainsi de suite, jusqu'à ce que la trame passe ou qu'un de ses compteurs d'erreur fasse changer le mode d'erreur du nœud (ceci sera
expliqué plus loin).

La trame de surcharge ou « overload frame »

Une trame de surcharge sert à retarder la transmission suivante.


C’est une variante de la trame d’erreur (active) qui n’entraîne pas la retransmission de la dernière trame de données. Elle consiste en un drapeau de
surcharge (Overload flag) constitué de six bits dominants et un délimiteur d’erreur (Overload delimiter) constitué de 8 bits récessifs.

Un nœud émet une trame de surcharge lorsqu’il lit un bit dominant dans le champ intermission. Le drapeau de surcharge écrase alors les bits récessifs
suivants de l’Interframe. Les autres stations détectent la surcharge et émettent à leur tour des trames de surcharge.
Tout comme pour les trames d'erreurs actives, les trames de surcharge se superposent et le nombre de bits dominants d'affilée ne doit pas
dépasser 12 bits plus l’overload delimiter.
Au-delà les nœuds n'ayant pas émis leur trame de surcharge restent muets.

84
TYPES
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

Erreur bit
Erreur Stuff-bit
Erreur de format
Trame de données Erreur ACK
Emetteur S
O Arbitrage Commande Données CRC EOF
Récepteur F

Erreur bit
Erreur Stuff-bit
Erreur de format
Erreur de CRC

 Erreur Stuff-bit : 6 bits consécutifs de même niveau


 Erreur Bit : le bit émis diffère du bit lu
 Erreur CRC et ACK : CRC calculé <> CRC trame
 Erreur format : certains bits doivent rester récessifs

85entre erreurs
Différenciation
Pr. Acacio MARQUES - ISMIN 2023 85 persistantes et fugitives

Généralités
Le protocole CAN intègre des mécanismes de détection d'erreurs de transmission très performants et complètement transparents pour les développeurs et les utilisateurs. Ce système fait toute sa
puissance car seule une erreur tous les 1000 ans n’est pas détectée. Il a aussi un faible temps de recouvrement : un bus CAN cadencé à 1Mb/s mettra au plus 23 µs pour traiter une erreur et
recommencer à transmettre.
Tous les nœuds surveillent simultanément le bus, ils détectent des différences entre bits reçus et bits émis ou bien des corruptions dans la structure des trames de données publiées, notamment à l’aide
de codes de redondance cycliques (CRC).
Dès qu'une erreur est détectée par un nœud, la transmission en cours est interrompue par l'émission d’une ou plusieurs trames d’erreur. Les autres nœuds du réseau reconnaissent ce signal et rejettent
les parties de la trame de donnée émises à ce stade. En réponse l’émetteur republiera sa trame de donnée.
Le protocole sait confiner les sources d’erreurs : des nœuds qui transmettraient des données erronées ou bien qui seraient incapables de lire correctement le bus de façon récurrente se
déconnecteront spontanément pour ne plus le perturber.

Processus de détection des erreurs

Le protocole CAN implémente un ensemble de mécanismes de détection d’erreurs conçu pour détecter et réagir à quatre types d’erreurs : des « Bit errors » (corruptions de bit), des «
Acknowledge errors » (erreurs d’acquittement), des « Stuff bit errors » (erreurs protocole de transparence) et des « Form errors » (erreurs de structure de trame).

1 - Bit monitoring et Bit errors


Les nœuds qui transmettent des messages surveillent également le niveau du bus et le comparent avec le niveau qu’ils viennent de transmettre. Une « bit error » est générée lorsque le bit lu diffère du bit
transmis. Mais il y a des exceptions :
Un bit dominant sur le bus ne génèrera pas de « bit error » lorsqu’un bit récessif est transmis pendant la phase d’arbitrage.
Un bit dominant sur le bus ne génèrera pas de « bit error » lorsqu’un bit récessif est transmis pendant le « slot ACK ».
Un nœud qui envoie un drapeau d’erreur passive (6 bits récessifs consécutifs) et détecte un bit dominant ne l’interprétera pas comme une « bit error ».
Le bit monitoring permet de détecter des erreurs globales du réseau (du bruit) mais aussi des erreurs locales (un nœud peut être défaillant soit en écriture, soit en lecture).

2 - Code de Redondance Cyclique et Acknowledge errors


Les 15 bits du CRC dans une trame de données/de requête rendent compte de son intégrité depuis le SOF jusqu’au Data Field compris. Ce test permet de détecter jusqu’à 5 erreurs de bits
indépendantes. Le champ d’acquittement des trames (ACK Slot) est initialement écrit dans l’état récessif par le nœud émetteur.

Si l’un des nœuds récepteurs calcule le même CRC que l’émetteur, ceci lui confirme que toute la plage couverte par le CRC lui a été transmise sans problème. Dans ce cas le récepteur
écrase le bit initialement récessif de l’ACK slot par un bit dominant.
Lorsque l’émetteur constate que l’ACK slot et devenu dominant il a confirmation que son message est parvenu correctement à un ou plusieurs récepteurs.
Si d’autres récepteurs constatent que l’ACK Slot a été validé alors qu’eux même ne calculent pas le bon CRC, ils en déduisent une défaillance locale. Ils émettent des trames d’erreur.

Si aucun nœud récepteur n’a calculé un CRC identique à celui qu’il a lu, le Slot ACK reste récessif.
Lorsque l’émetteur relis le slot ACK et le trouve inchangé, il en déduit soit qu’il a émis un CRC incorrect (défaillance locale), soit que son message ne s’est pas propagé correctement
(défaillance globale). Il émet une trame d’erreur.

3 - Bit stuffing errors


Une erreur de bit stuffing ne peut survenir que dans la plage où le bit stuffing est activé - du bit SOF au CRC. Une séquence de plus que 5 bits de même polarité sera considérée comme une erreur de bit
stuffing. Ceci survient notamment lors de l’émission de trames d’erreurs.

4 - Form errors
Les composants suivants d’une trame de données ou de requête sont supposés rester dans le même état récessif : Le CRC delimiter, L’ACK delimiter, Le champ EOF et
Le champ d’Intermission. Une Form error est générée lorsque l’un de ces éléments contient un ou plusieurs bits dominants, sauf dans les situations suivantes :
• Un nœud récepteur détecte un niveau dominant sur le dernier bit de l’EOF.
• Un nœud détecte un niveau dominant sur le dernier bit d’un délimiteur d’erreur.
• Un nœud détecte un niveau dominant sur le dernier bit d’un délimiteur de surcharge.

85
COMPTEURS
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

COMPTEURS
 REC
• Envoie d’une trame d’Erreur : +1
• Réception d’une trame corrompue : +8 (jusqu’à 128)
• Réception d’une trame correcte : - 1 (si > 0)
 TEC
• Emission d’une trame corrompue : +8 (jusqu’à 256)
• Emission d’une trame correcte : -1 (si > 0)

ETAT selon la valeur des compteurs


 ERREUR-ACTIVE : envoie 6 bits dominants
 ERREUR-PASSIVE : attente d’un temps mort de 6 bits récessifs sur le bus
avant de réémettre
 BUS-OFF : nœud déconnecté du bus, reconnexion automatique ou logicielle
possible

86
Pr. Acacio MARQUES - ISMIN 2023 86 Exemple

La description du protocole CAN implique à ce point que des nœuds défectueux vont immanquablement paralyser le réseau. Examinons de telles situations :

• Erreur de transmission :
Un nœud défaillant transmet une trame haute priorité, mais corrompue. Tous les autres nœuds fonctionnels du réseau détecteront et rapporteront l’erreur. En
réponse, le nœud défaillant réémettra encore et encore la même trame corrompue. Des trames de priorité inférieures ne pourront donc jamais accéder au bus.
• Erreur de réception :
Un nœud défaillant reçoit une trame intègre et rapporte à tort une erreur. En réponse, le nœud émetteur publiera à nouveau sa trame, trame qui sera de nouveau
lue incorrectement et réémise, etc.

On comprend bien qu’il est indispensable de disposer d’un mécanisme pour identifier et déconnecter du bus les nœuds qui produisent des erreurs récurrentes. Pour ce faire, le
contrôleur CAN de chaque nœud dispose de deux compteurs, un pour les erreurs de transmission et un autre pour les erreurs de réception. Ils sont incrémentés ou
décrémentés selon les règles suivantes :

Compteur d’erreurs de transmissions (TEC), concerne les nœuds émetteurs


 Le nœud détecte (et rapporte) une erreur : + 8.
 Le nœud détecte une bit-error dans une trame d’erreur active ou de surcharge : +8
 Le nœud envoie une trame qui ne donne lieu à aucune erreur : -1
Compteur d’erreurs de réception (REC), concernant les nœuds en état de réception
 Le nœud détecte (et rapporte) une erreur : + 1.
 Le nœud détecte une bit-error dans une trame d’erreur active ou de surcharge : +8
 Le nœud reçoit une trame et n’y détecte aucune erreur : -1

On constate que cet algorithme pénalise les nœuds émetteurs car il est plus probable qu’ils soient à l’origine d’un message erroné que l’ensemble des autres éléments et
nœuds du bus.
Selon la valeur de ses compteurs, un nœud fonctionnera en mode « Error-Active », « Error-Passive » ou « Bus-Off », définis comme suit :

Mode « Error-Active », lorsque TEC et REC sont inférieurs à 128 :


Un nœud en mode error-active est considéré comme sain et n’est soumis à aucune restriction. Il envoie des trames d’erreurs actives dont les drapeaux sont
constitués de six bits dominants consécutifs
Mode « Error-Passive », lorsque TEC ou REC est supérieur à 127 :
Un nœud en mode error-passive prend part à la communication sur le bus sans restriction. Cependant, lorsqu’il détecte une erreur, il envoie une trame d’erreur
passive dont le drapeau est constitué de six bits récessifs consécutifs. Cette trame ne perturbe donc pas les messages qui circulent sur le bus. Le nœud suspend
son activité jusqu’à ce qu’il parvienne à écrire sur le bus les six bits consécutifs de son drapeau d’erreur sans que ceux-ci ne soient écrasés par un autre message,
ce qui peut nécessiter un temps certain !
Mode « Bus-Off », lorsque TEC est supérieur à 255 :
Le nœud n’envoie plus aucune trame sur le bus. Selon l’implémentation du CAN, il peut être autorisé à recevoir des trames. Une
intervention de l’utilisateur (un « reset » du nœud ou du bus) est généralement nécessaire pour qu’il revienne en mode Error-Active.
En cas de reset du bus, il attendra que 128 occurrences de 11 bits récessifs aient été transmises avant de revenir en mode
Error-Active.

86
ERREUR ACTIVE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

87
Pr. Acacio MARQUES - ISMIN 2023 87 Exemple

Ci-dessus un exemple d’erreur active

On voit que dans le cas d’une erreur active, l’émetteur va pouvoir tenter de réémettre 23 bits maximum après la
détection de l’erreur.

Dans le cas d’une erreur passive, l’émetteur doit voir 6 bits récessifs successifs suite à l’erreur. Ors ceux-ci peuvent
être écrasé par les autres nœuds donc le temps d’attente est imprévisible dépend de la charge du réseau. Dès que le
réseau est idle pendant 6 bits, l’émetteur fautif valide sa trame d’erreur et se met en position de réémettre.

87
GESTION
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

"Normal Mode Request" et 128 occurences de


11 bits successifs/recessifs
REC > 127 ou
TEC > 127
Erreur Erreur TEC > 255
Reset et Bus "OFF"
configuration active passive
REC < 128
ou TEC < 128

Erreurs émission Erreurs réception


Bus off
255 255

Erreur passive Erreur passive

127 127
96 96

Erreur active Erreur active

temps temps

Un warning (interruption) est signalé à 96

88
Pr. Acacio MARQUES - ISMIN 2023 88 Abordons les problèmes de timing

Généralement les contrôleurs CAN envoient une interruption « error interrupt » (commencent à s’affoler) au
moment où le compteur atteint 96 points (warning limit). Cette gestion des erreurs est implémentée dans le hard
du contrôleur CAN et donc totalement transparente pour le programmeur.

88
BIT TIMING
BUS CAN : intérêt – protocole – erreurs – timings – STM32 - application

• Un bit est constitué d’une succession de quantum de temps.


• Un quantum de temps est lui-même constitué d’un certain nombre de coups
d’horloge système.
• La durée de chaque quantum de temps est ajustée en fonction de la longueur
du bus et de la qualité de ses lignes pour optimiser le débit.

89 identiques
Pr. Acacio MARQUES - ISMIN 2023 89 Les horloges ne sont pas parfaitement

Le laps de temps que dure la présence effective du bit sur le bus se nomme le bit time. La durée du bit est
habituellement construite électroniquement à partir d’un nombre déterminé de coups d’horloge système. Le
protocole subdivise le bit time en plusieurs segments de temps :

• Le segment de synchronisation : par définition le flanc avant d’un bit est censé se produire à
l’intérieur de ce segment de temps.

• Le segment du temps de propagation : cette partie est conçue pour prendre en compte et
compenser les temps de retard dus au phénomène physique de propagation du signal. Chaque nœud
qui poste un bit le relit ensuite, il est donc indispensable de laisser chaque bit durer assez longtemps
pour que le signal fasse un aller-retour entre émetteur et récepteurs.

• Les segments de phase buffer 1 et 2 : Ils définissent le point d’échantillonnage, ils sont conçus pour
être soit allongés soit raccourcis par le mécanisme de resynchronisation que nous verrons plus loin,
permettant ainsi de compenser les variations de positions des flancs de signaux liées aux tolérances
de l’électronique notamment des oscillateurs.

La longueur de ces différents segments est programmable, généralement de 1 à 8 time-quanta sauf pour le
segment de synchronisation qui vaut toujours 1 time quantum. L’échantillonnage (sampling point) du bit
correspond au moment où la valeur de celui-ci est effectivement déterminée, il a lieu après le segment de
propagation.

89
SYNCHRONISATION
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

• Hard synchronisation

• Resynchronisation

90
Pr. Acacio MARQUES - ISMIN 2023 90 Principe de la resynchronisation (1/2)

Sur un bus CAN il n’y a pas une horloge commune propagée. Généralement chaque nœud possède un oscillateur
interne, et toutes les fréquences des nœuds n’ont pas nécessairement très exactement les mêmes valeurs pour
diverses raisons (quartz différents, dérives de température, dispersion des procédés de fabrication, etc.). Un
quartz ou un résonateur de précision est en général nécessaire en high speed.

Il faut donc resynchroniser les horloges locales sur les fronts des bits incidents lorsqu’il s’en présente.
Par construction, la technique du bit-stuffing augmente ce nombre de fronts de resynchronisation. Une
resynchronisation dynamique est également utilisée et décrite dans le transparent suivant.

90
RE-SYNCHRONISATION
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

e>0
Le front d’un bit est contenu entre
le segment de synchronisation et le
point d’échantillonnage.

e<0
Le front d’un bit est situé entre le
point d’échantillonnage et avant le
segment de synchronisation du bit
suivant.

91
Pr. Acacio MARQUES - ISMIN 2023 91 Principe de la re-synchronisation (2/2)

Une resynchronisation dynamique est également utilisée pour corriger les déphasages.
Le déphasage, noté e, est mesuré entre le front d’un bit sur le bus et le segment de synchronisation du nœud
considéré.

91
RE-SYNCHRONISATION
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

Correction
pour e > 0.

Correction
pour e < 0.

92En pratique …
Pr. Acacio MARQUES - ISMIN 2023 92

La resynchronisation est réalisée en soit en allongeant le segment de phase buffer 1, soit en écourtant le
segment de phase buffer 2 afin de repositionner correctement le point d’échantillonnage.
On définit par SJW une durée appelée « Synchronisation Jump Width » comprise entre 1 et 4 time-quanta.
En général e < SJW et la correction de resynchronisation est totale avec un seul front sur le bus.
Si e > SJW, la correction est partielle et il faudra plusieurs fronts sur les données pour corriger complètement la
différence de phase.

92
CONTRÔLEUR CAN
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

Micro-
Microproces-
contrôleur
seur

Gestionnaire SLIO
Gestionnaire
de protocole de protocole

Interface de Interface de Interface de


ligne ligne ligne

CAN_H
term CAN_L term

93
Pr. Acacio MARQUES - ISMIN 2023 93 Précisons la couche physique

L’interface de ligne est généralement séparée de façon à laisser un grand degré de liberté à l’utilisateur suivant
les médias utilisés qui peuvent être les suivants :
• Monofilaire
• Bifilaires en mode différentiel
• Avec isolement galvanique par transformateur ou optocoupleur
• Courant porteur
• Fibre optique
• Radiofréquences

Le contrôleur CAN peut être intégré ou externe, les 2 types de composants existent. Aujourd’hui un grand nombre
de microcontrôleurs existent avec périphérique gestionnaire de protocole CAN intégré.
Enfin pour des applications simples ne nécessitant pas une puissance de calcul embarquée dans le nœud CAN, il
existe des dispositifs assurant de simples fonctions d’entrée/ sortie par le réseau : les SLIO (Serial Link Input
Output).

93
COUCHE PHYSIQUE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

 Interface de ligne fixe le nombre de nœuds possibles


 Mode différentiel permet de s’affranchir des perturbations externes
 Paires torsadées permet de s’affranchir des émissions du câble lui-même
 Résistances de terminaisons évitent les réflexions d’ondes en bout de ligne

94 de protocole
Pr. Acacio MARQUES - ISMIN 2023 94 Zoom sur le gestionnaire

Remarque : le nombre de nœuds possibles sur une ligne n’est pas limité par le protocole CAN seules les
spécifications électriques du circuit interface de ligne limitent ce nombre.
En d’autres termes vérifiez la datasheet de l’interface de ligne pour connaitre le nombre d’équipements que vous
pouvez raccorder sur la ligne.

94
PERIPHERIQUE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

PA12

M4
PA11

(3)

(3)

95
Pr. Acacio MARQUES - ISMIN 2023 95 Fonctionnement du filtrage

Vue générale du contrôleur CAN du STM32.

Ce contrôleur supporte les formats CAN 2.0A et CAN2.0B high speed

3 Mailbox de transmission. Une mailbox contient toutes les informations relatives à un message : identificateur,
données, contrôle, statuts, date.
La priorité de transmission peut provenir soit de la priorité de l’identificateur, soit de l’ordre de lancement des
transmissions (transmission de type FIFO).

2 FIFO de 3 messages chacune permettent de réceptionner les messages. Seuls les messages ayant traversé les
filtres seront réceptionnés, les autres ne seront pas pris en compte.
Le filtrage a lieu sur l’identificateur du message jusqu’à 14 filtres peuvent être initialisés.

Notez les broches du microcontrôleur utilisées par le périphérique CAN : PA11 et PA12.

95
MODE DE FILTRAGE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

 14 filtres de 2 registres 32-bit


 4 modes de configuration
• Taille 16 ou 32 bit
• Liste ou masque d’identificateur

3 1

STID[10:0] EXID[17:0] IDE/RTR/0 STID[10:0] EXID[17:0] IDE/RTR/0

STID[10:0] EXID[17:0] IDE/RTR/0

STID[10:0]/IDE/RTR/0 STID[10:0]/IDE/RTR/0

STID[10:0]/IDE/RTR/0
4 2
STID[10:0]/IDE/RTR/0 STID[10:0]/IDE/RTR/0

STID[10:0]/IDE/RTR/0

96
Pr. Acacio MARQUES - ISMIN 2023 96 modes

Les filtres sont constitués de 2 registres 32-bits chacun. 4 modes d’utilisation sont possibles

1) et 2) Mode liste : les identificateurs acceptés sont indiqués en clair soit 2 par filtre en format étendu (29 bits) ou
soit 4 en mode standard (11 bits).
3) et 4) Mode masque : un groupe d’identificateurs est défini via un identificateur de référence plus un masque (0
= X), un seul groupe est possible par filtre si on travaille en format étendu sinon définition de 2 groupes
possibles par filtre.

Attention lors de l’initialisation de ces registres, les identificateurs sont calés à gauche.

96
MODE DE FONCTIONNEMENT
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

• Normal • Loopback et Silent

• Silent

• Loopback

97
Pr. Acacio MARQUES - ISMIN 2023 97 Programmation du nominal bit time

Le mode Silent permet d’observer le réseau sans le perturber.

Les modes Loopback et Mixte sont très utiles pour tester le driver CAN. Les erreurs d’acquittement sont
ignorées. Dans un premier temps lors du développement d’un driver CAN, il est fortement conseillé d’utiliser le
mode Mixte puis le mode Loopback pour tester pas à pas son application avant de connecter le réseau.

97
BIT TIMING
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

98
Pr. Acacio MARQUES - ISMIN 2023 98 Réalisation

Dans l’initialisation du bus CAN une partie concerne le débit (baudrate).


Le calcul de celui-ci passe par la programmation de la durée du segment de phase 1 et 2 composants le nominal
bit time.
Le nombre de time quantum associé aux segments de phase 1 est programmable entre 1 et 16, celui de phase 2
entre 1 et 8, le segment de synchronisation est toujours de 1 time quantum.
Le time quantum dépend de l’horloge APB1 via un prédiviseur de fréquence programmable de 1 à 1024.

La valeur du saut de resynchronisation SJW est programmable de 1 à 4.

Par défaut tous les filtres sont désactivés, donc par défaut le périphérique CAN ne reçoit rien.

98
MODE DE FONCTIONNEMENT
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

99
Pr. Acacio MARQUES - ISMIN 2023 99 Pas oublier le filtre

2 modes de transfert sont possibles :


1) Event-triggered (transfert asynchrone) : les messages sont déclenchés par des événements externes.
2) Time-triggered (transfert synchrone) : Chaque station émet et reçoit à date fixe. Chaque station a une
horloge qui synchronise l’ordre des envois. Utile dans les systèmes temps réel.

Automatic bus-off management permet une reconnexion automatique après 128 trames de 11 bits récessifs.
Il est possible de sortir d’un mode veille via un message sur le bus CAN.
Les FIFO de réception peuvent être verrouillées c’est-à-dire que lorsqu’elles sont pleines, les nouveaux
messages reçus sont perdus. En mode non verrouillé, les messages reçus viennent écraser les anciens.

Les 3 mailboxes de transmission peuvent être gérées comme des FIFO c’est-à-dire que les messages sont
transmis dans l’ordre de lancement ou en fonction de la priorité des identificateurs.

99
DRIVER
BUS
filtre CAN : intérêt – protocole – erreurs – timing – STM32 - application init

CAN_FilterTypeDef sFilterConfig;
[Link] = 0;
[Link] = CAN_FILTERMODE_IDLIST;
[Link] = CAN_FILTERSCALE_16BIT;
[Link] = 0x0220; // ID = 0x11, Filter = (0x11 << 5) = 0x220
[Link] = 0x0220;
[Link] = 0x0220;
[Link] = 0x0240;
[Link] = CAN_FILTER_FIFO0;
[Link] = ENABLE;
HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig);

100
Pr. Acacio MARQUES - ISMIN 2023 100 Aspects particuliers des IT

Attention les filtres par défaut sont désactivés donc le bus ne reçoit rien.
L’initialisation des filtres n’est pas prévue dans CubeMX, il faut donc l’expliciter dans votre programme voir exemple.
Les filtres sont numérotés de 0 à 13.

100
INTERRUPTIONS
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

• Validations
Dans le NVIC
+ HAL_CAN_ActivateNotification(&hcan1, CAN_IT_TX_MAILBOX_EMPTY)

+ HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING)

• CallBack

HAL_CAN_TxMailbox0CompleteCallback
HAL_CAN_RxFifo0MsgPendingCallback

HAL_CAN_RxFifo1MsgPendingCallback
HAL_CAN_ErrorCallback

101
Pr. Acacio MARQUES - ISMIN 2023 101 démarrage

101
DRIVER
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

• Validation
HAL_CAN_Start(&hcan1)

• Transmission
HAL_CAN_AddTxMessage(&hcan1, &TxHeader,TxData, &TxMailbox)

[Link] = 1 à 8; N° de mailbox
[Link] = CAN_ID_STD;
[Link] = CAN_RTR_DATA;
[Link] = 0 à 2047;

• Réception
HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &RxHeader, RxData)
payload

102
Pr. Acacio MARQUES - ISMIN 2023 102 A vous de jouer

102
QUIZZ
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

1. Comment les conflits sur le bus CAN multi-maitres sont-ils gérés ?


2. Quelle est la fonction des compteurs d’erreur REC et TEC ?
3. Sur un bus CAN à 500 kbit/s (débit brut) quel débit utile (débit net) peut-on espérer ?
4. Quelle est la durée maximale de transmission d’une trame CAN sur un réseau à 125
kbit/s ?
5. Combien y a-t-il de boites mail de transmission intégrées dans le STM32 étudié ?
6. Quelles sont les interruptions possibles sur le bus CAN du STM32L476 ?

103
Pr. Acacio MARQUES - ISMIN 2023 103 Communiquons

Le contrôleur CAN dispose de 14 interruptions pour gérer son fonctionnement de façon efficace.

Les plus courantes sont les suivantes :


1) La mailbox 0 ou 1 ou 2 de transmission devient vide
2) Réception d’un nouveau message dans FIFO 0 ou 1
3) FIFO 0 ou 1 pleine
4) Débordement FIFO 0 ou 1
5) Interruptions par suite des diverses erreurs
6) Interruption de réveil du CAN

103
TP0
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
*----------------------------------------------------------------------------------------------------------------------------
* FONCTION : Transfert d'une donnée de 2 octets 0x1234 via le bus CAN en mode
* loopback à 100 kbit/s avec RJW = 1 tq, BS1 = 6 tq et BS2 = 3 tq
* Le CAN sera géré par interruption ID = 0x11.
* La transmission se fera toutes les secondes
* Utilisez le debugger pour vérifier la transmission correcte de la donnée
*---------------------------------------------------------------------------------------------------------------------------
*----------------------------------------------------------------------------------------------------------------------------
* FONCTION : Vérifier la transmission entre 2 kits en mode normal
* Afficher l’ID et la data reçue sur l’afficheur OLED
*---------------------------------------------------------------------------------------------------------------------------

CAN1
PA12 PA11

CAN1_TX CAN1_RX

104
Pr. Acacio MARQUES - ISMIN 2023 104 A vous de jouer

104
TP1
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
*--------------------------------------------------------------------------------------------------------------------------
* FONCTION : Connecter 4 kits via leur bus CAN.
* La période de traitement est de 100 ms
* Le premier kit doit envoyer la distance TOF1
* Le second doit commander le moteur proportionnellement à cette
* distance TOF1
* Le troisième doit déclencher le buzzer en cas de survitesse (> 90 %)
* Le quatrième doit envoyer luminosité
* Le buzzer est fort en journée et assourdi la nuit
*-------------------------------------------------------------------------------------------------------------------------

105
Pr. Acacio MARQUES - ISMIN 2023 105 A vous de jouer

Le programme des Time Of Flight est donné, voir page suivante, il doit donc fonctionner sans trop de débug.

105
TP1
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

Copier le répertoire VL53L1_Nucleo dans Drivers


Appeler à l’init ResetAndInitializeTOF1(); // voir ci-dessous
//Cette fonction change l’adresse par défaut du TOF car sinon il y a
//conflit avec TOF2 car d’usine tous les TOF ont la même adresse 0x52
// La fonction utilise l’interruption INTOF1, attention elle doit déclencher
//sur front descendant
// Elle définit également une plage de mesure de 2 cm à 30 cm, en dehors de
// cette fenêtre le capteur se fige
// Attention les pins des 2 TOF doivent être définies dans cubeMx
La mesure se fait dans l’interruption voir CallBack ci-dessous
Rajouter les déclarations et includes nécessaires

/* USER CODE BEGIN PV */ /* USER CODE BEGIN Includes */


VL53L1_Dev_t devLeft; #include "../../Drivers/VL53L1_Nucleo/core/inc/vl53l1_api.h"
VL53L1_Dev_t devRight; /* USER CODE END Includes */
VL53L1_DEV Dev;
uint8_t ToFSensor = 0;
VL53L1_RangingMeasurementData_t RangingData;
uint16_t Dist_Obst_G;
/* USER CODE END PV */

106
Pr. Acacio MARQUES - ISMIN 2023 106 A vous de jouer

/* USER CODE BEGIN 0 */


void ResetAndInitializeTOF1(void){
VL53L1_DetectionConfig_t DetectionConfig;
uint8_t newI2C = 0x52;
/* Reset the 1 ToF sensors on the expansion board */
HAL_GPIO_WritePin(GPIOH, SHUT1_Pin, GPIO_PIN_RESET);
HAL_Delay(10);
/* Bring the sensors out of the reset stage one by one and set the new I2C address */
Dev=&devLeft;
HAL_GPIO_WritePin(GPIOH, SHUT1_Pin, GPIO_PIN_SET);
HAL_Delay(5);
Dev->comms_speed_khz = 400;
Dev->I2cHandle = &hi2c1;
Dev->comms_type = 1;
Dev->I2cDevAddr=0x52; /* default ToF sensor I2C address*/
newI2C = Dev->I2cDevAddr + 2;
VL53L1_SetDeviceAddress(Dev, newI2C);
Dev->I2cDevAddr=newI2C;
/* Device Initialization and setting */
VL53L1_WaitDeviceBooted(Dev);
VL53L1_DataInit(Dev);
VL53L1_StaticInit(Dev);
VL53L1_SetDistanceMode(Dev, VL53L1_DISTANCEMODE_LONG);
VL53L1_SetMeasurementTimingBudgetMicroSeconds(Dev, 40000);
VL53L1_SetInterMeasurementPeriodMilliSeconds(Dev, 50);
memset (&DetectionConfig,0,sizeof(DetectionConfig));
[Link] = VL53L1_DETECTION_DISTANCE_ONLY;
[Link] = 0;
[Link] = VL53L1_THRESHOLD_IN_WINDOW;
[Link] = 20;
[Link] = 300;
VL53L1_SetThresholdConfig (Dev, &DetectionConfig);
VL53L1_UserRoi_t roiConfig;
[Link]= 0;
[Link]= 15;
[Link]= 15;
[Link]= 0;
VL53L1_SetUserROI(Dev, &roiConfig);
VL53L1_ClearInterruptAndStartMeasurement(Dev);
}
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
if (GPIO_Pin == INTOF1_Pin) {
VL53L1_GetRangingMeasurementData(&devLeft, &RangingData);
Dist_Obst_G = [Link];
VL53L1_ClearInterruptAndStartMeasurement(Dev);
}
}

106
En réseau
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application

BUZZER
ADC1 STM32L476 STM32L476 TIM8
Buzzer
PC4 PC9
LDR_ADC1_13

PA12 PA11 PA12 PA11


J1 J1
232
1 1
120

2 2

120
BUS CAN
0 0

INTOF2
PA12 PA11 PA12 PA11 PA0
ENCA

PC10

SHUT2
PH1 TIM5
ENCB
PA1
INTOF1
PC11
STM32L476 PWM

PH0
PA5
SHUT1 STM32L476 TIM2
DIR
PA9
I2C1 PB5
DIS

PB6 PB7

SCL SDA

107, je suis un pro


Pr. Acacio MARQUES - ISMIN 2023 107 Ça marche

Pour réaliser ce TP il faudra vous organiser en groupe de 4. Les identificateurs sont laissés à votre libre choix.
Penser à adapter la ligne avec la résistance 120 ohms en fermant le connecteur J1 sur les 2 cartes aux extrémités.

107
FIN
ISMIN 2A : SAM1 – Projet robot – SAM2 - STR

Créer avec DALL-E de ChatGPT.


Pr. Acacio MARQUES - ISMIN 2023 108 Sniff, Sniff…

108

Vous aimerez peut-être aussi