feux2019.py

Created by mailystrehel

Created on December 13, 2022

2.96 KB


#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE )

void InitFeux (void) {// on peut simplifier le code en se passant de la variable temp unsigned int temp;
RCC->APB2ENR |= 0x7C; // valide PA, ..., PE
temp = GPIOE->CRH; // paramétrage des lignes PE8 à 13 (sorties à 2 MHz) temp &= 0xFF000000;
temp |= 0x00222222;
GPIOE->CRH = temp;
temp = GPIOD->CRH; // paramétrage de la ligne PD12 à 15(facultatif si on précise que 4 est la valeur par défaut) temp &= 0x0000FFFF;
temp |= 0x44440000;
GPIOD->CRH = temp;
temp = GPIOB->CRH; // paramétrage de la ligne PB14 temp &= 0xF0FFFFFF;
temp |= 0x08000000;
GPIOB->CRH = temp;
GPIOB->ODR |= 1<<14; // pour obtenir un tirage au Vcc sur PB14(pas demandé)
}



void PiloteGroupeFeux(uint8 groupe, uint8 couleur) {
uint16 position;
switch (groupe) // selon le groupe {
case G13:
position = 8; // position du premier bit de couleur GPIOE->ODR &= ~0x0700; //force les 3 bits de couleur à 0 if (couleur<=Rouge)
GPIOE->ODR |= (1<<(position+couleur)); break;


case G24:
position = 11; // position du premier bit de couleur GPIOE->ODR &= ~0x3800; //force les 3 bits de couleur à 0 if (couleur<=Rouge)
GPIOE->ODR |= (1<<(position+couleur)); break;
default:;// on peut éventuellement gérer les erreurs }
GPIOE->ODR |= 0xC000;


void tim3Init (void) { RCC->APB1ENR |= 2; TIM3->PSC = 36000-1; TIM3->ARR = 1000-1; TIM3->CR1 = 0; TIM3->CR2 = 0;
/* init clock for TIM3 */
/* set prescaler */
/* reset command register 1 */ /* reset command register 2 */
/* set auto-reload */
TIM3->DIER =1; TIM3->SR = 0; TIM3->CR1 = 1;
// pour valider l'interruption de remise à 0 de CNT (en vert la partie relative à l'it TIM3) // efface tous les évènements du timer 3
NVIC_ClearPendingIRQ(TIM3_IRQn); NVIC_EnableIRQ(TIM3_IRQn);
//efface le drapeau d'it en attente
/* Enable Timer
*/
/* enable TIM3 interrupt */

uint16 cpt=0;
uint8 Nuit=0, StateJour=0, StateNuit=0;
void TIM3_IRQHandler (void) { // interruption de débordement
if (TIM3->SR & 1)
}
{
/* UIF interrupt ? */ if (cpt!=0)
cpt--;
if (cpt==0) // la temporisation est écoulée (il faut changer d'état selon le jour ou la nuit) {
if(Nuit==1) // solution facile utilisation d'une séquence SeqNuit pour la nuit {

cpt =SeqNuit[StateNuit].tempo;//durée de commande des feux correspondant à StateNuit
StateNuit = (StateNuit+1)%SN_MAX;
PiloteGroupeFeux(G13, SeqNuit[StateNuit].feux13); //Piloter les groupes de feux en fonction de l'état PiloteGroupeFeux(G24, SeqNuit[StateNuit].feux24);
StateJour=~0; //pourunerepriseenrouge/rougeenmodejour
} else {
StateJour++;
if( StateJour >= SJ_MAX) StateJour =1 ;// rester dans la limite de la table
cpt =SeqJour[StateJour].tempo;//durée de commande des feux correspondant à StateJour
//Piloter les groupes de feux en fonction de StateJour (PiloteGroupeFeux)
PiloteGroupeFeux(G13, SeqJour [StateJour].feux13); //Piloter les groupes de feux en fonction de l'état PiloteGroupeFeux(G24, SeqJour [StateJour].feux24);
} }
TIM3->SR &= ~1; /* clear UIF flag */ // fin débordement de comptage
} }





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.