micropro.py

Created by famille-bvc

Created on December 13, 2022

4.37 KB


 * CNF & M0DE *

# MODEy : 

# Définit la direction de 
# fonctionnement de la ligne
# y du port en question.

# 00 -> Entrée
# 01 -> Sortie (10Mhz)
# 10 -> Sortie (2Mhz)
# 11 -> Sortie (50Mhz)

# CNFy :

# Définit le type de 
# fonctionnement de la ligne y
# du port en question selon la
# direction choisie.

# CNFy en Entrée :
# 00 -> Analogique (mesure...)
# 01 -> Entrée flottant (Res tir)
# 10 -> Entrée avec tirage
# 11 -> Réservé

# CNFy en Sortiee :
# 00 -> std. push-pull
# 01 -> std. collecteur ouvert
# 10 -> alternative push-pull
# 11 -> alt. collecteur ouvert

# Ex : CNF = 10 et MODE = 11
# -> Ob1011 -> 0xB

#/////////////////////////////

 * Définitions *

# signal numériq vs analogiq :

#Un signal numérique ne peut 
#prendre que deux valeurs 
#significatives (V ≤ VL) ou 
#1 (V ≥ VH) alors qu'un signal
#analogique peut prendre dans
#l'absolu une infinité de 
#valeurs. Pour exploiter les 
#signaux analogiques on utilis
#un convertisseur analogique/
#numérique qui fournit une 
#approximation de leur valeur.

#//////

# Pq "void fonction(void)" :

#Les exceptions sont la 
#réponse du processeur à des
#événements asynchrones par 
#rapport au flot du programme.
#Il n’est pas possible 
#d’anticiper l’arrivée de ces
#événements et donc de 
#préparer un passage de param-
#ètre, de même qu’il n’ est 
# pas possible de récupérer
#une valeur de retour éventue-
#lle d’où le prototype utilisé

#//////

# Contrôleur pour autoriser 
# exceptions :

# Exceptions sont autorisées
# de manière générale au niv
# du contrôleur NVIC en 
# complément de la validation 
# générale des interruptions 
# masquables dans le registre
# PSR. 

#//////

# condition pour que exception
# prenne le pas sur une autre :

#Il faut qu’elle soit plus 
#prioritaire (valeur de priorité
#plus faible) et bien sûr qu’elle
#soit autorisée. 

#//////

# Coder chaînes caractères :

# Code ASCII, 
# taille caractère -> 8 bits

#//////

# Interet interruption par rapp
# à scrutation des registres :

# scrutation registre prend 
# beaucoup de ressources CPU

#//////

# Registre CPU vs periph interne:

# registre périphériques ont une
# adress / CPU pas accès par adr

#//////

# Autre :

# Le registre SP est utilisé
# par le CPU comme pointeur
# de pile. 

# Drapeau N permet de savoir
# si le résultat d’une opérat-
# ion a fourni un résultat 
# négatif ou non. 

# L'exception "Erreur matérie-
# lle" ne possède pas la 
# priorité la plus importante.

# Le débogueur utilisé en TP 
# utilise le lien JTAG pour 
# communiquer avec le processeur 

# Il est possible de modifier 
# la priorité de l’interruption
# TIM3_IRQn. 

# Le registre PC sert à pointer
# les instructions du programme.

# L’instruction PUSH empile un
# mot de 32 bits.

# L’instruction BL n'agit pas 
# que sur le registre PC. 

#/////////////////////////////

 * Codage *

Déclaration de GPIOB :
  
# #define GPIOB ((GPIO_TypeDef*)
#     GPIOB_BASE )

Paramètrage des ports :
 
# GPIOx_CRL pour lignes 0 à 7
# GPIOx_CRH pour lignes 8 à 15

# ex : PE8 en sortie 2Mhz std PP
# -> Ob0010 -> 0x2

# temp = GPIOE->CRH;
# temp &= 0xFFFFFFF0;
# temp |= 0x00000002;
# GPIOE->CRH = temp;

Utilisation des timers :
  
# Configuration :

# calc: T = 1/Fclk(PSC+1)(ARR+1)

# PSC = 36000-1 = 35999
# ARR = 1000-1 = 999

#//////

# opérations à effectuer pour 
# que le TIMER3 puisse générer
# une interruption périodique à
# la remise à 0 de CNT :

# Il faut autoriser l'interrupt-
# ion TIM3 au niveau du contrôl-
# eur NVIC. Paramétrer le timer
# et valider l'interruption de 
# remise à 0 avec le registre
# DIER (bit UIE).

 Initialisation de Timer
 
# pour STM32 :
# TIM3 => RCC->APB1ENR |= 2;
# TIM2 => RCC->APB1ENR |= 1;
# TIM4 => RCC->APB1ENR |= 4;
 
void tim3Init (void) {
 RCC->APB1ENR |= 2;
 TIM3->PSC = 36000-1;
 TIM3->ARR = 1000-1;
 TIM3->CR1 = 0;
 TIM3->CR2 = 0;

 TIM3->DIER =1;
 TIM3->SR = 0;
 TIM3->CR1 = 1;
 
 NVIC_ClearPendingIRQ(TIM3_IRQn);
 NVIC_EnableIRQ(TIM3_IRQn);
} 

#////////

 Drapeau UIF :
   
# Si drapeau UIF=1 alors ->
# if (TIM3->SR & 1)

# drapeau UIF=0 (clear) ->
# TIM3->SR &= ~1;

#////////

 Programme principal :
   
# rappels :

# int main(void){
  
# */ init des variables /*
# SystemInit();
# */ init des fonctions /*
# tim3Init(); 
# TIM3->CNT=0;
# TIM3->CCR1 = 1000; 
#
# for (;;){ /* Loop forever */

# */ Le code demandé /*

#  } */ Fermeture loop F/* 
#} */ Fermeture main /*

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.