timer2018.py

Created by mailystrehel

Created on December 13, 2022

3.02 KB


#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE )

void InitGPIOSpeed (void) {
//
RCC->APB2ENR |= 0x70; // valide les horloges des port C,D et E /* 0x70 = 0111 0000 */
GPIOE->CRH = 0x22222222; /* Configure les lignes 8 à 15 du GPIO E pour les LEDs */
// on peut s'arrêter ici en précisant que le paramétrage par défaut des ligne est la valeur 4
// donc des entrées flottantes



const unsigned short mask[]={0x0000,0x0100,0x0300,0x0700,0x0F00,0x1F00,0x3F00,0x7F00,0xFF00}; void PiloteLeds(unsigned int v, unsigned int vmax)
PiloteLeds (entier v, entier vmax) Début
Déterminer le rapport Définir l’état des DEL Commander les DEL
Fin
{
// vmax=500 >8 unsigned short odr;
unsigned int i=0;
odr = GPIOE->ODR; // lecture de la commande actuelle
odr &= 0x00FF; // efface PE8 à PE15 mais conserve les autres valeurs
if(v != 0) {
for (i=1;i<8;i++) {
if (v <= i*vmax/8 )
break; // i donne le rapport en 1/8ième
} }
odr |= mask[i]; // récupère les Leds à allumer
GPIOE->ODR = odr; // commande l'état des lignes de port }




void initTimerSpeed (void) { RCC->APB1ENR |= 2;
/* enable clock for TIM3 */
TIM3->PSC = 360-1;
TIM3->ARR = 1000-1;
TIM3->CR1 = 0; /* reset command register 1 */ TIM3->CR2 = 0; /* reset command 
register 2 */

TIM3->DIER = 9 ; // valide CC3IE et UIE
TIM3->CR1 |= 1; /* Enable Timer */
TIM3->SR = 0; // efface tous les évènements du timer 3 NVIC_ClearPendingIRQ(TIM3_IRQn); //efface le drapeau d'it en attente NVIC_EnableIRQ(TIM3_IRQn); /* enable TIM3 interrupt */
}



void TIM3_IRQHandler (void) {
if {
}
if {
} if {
} }
(TIM3->SR & 1)
/* UIF interrupt ? */
period=1;
cvp=cvi;
cvi=0;
TIM3->SR &= ~1; /* clear UIF flag
(TIM3->SR & CC3_OF_MASK)
/* UIF interrupt ? */
// ne doit pas arriver
TIM3->SR &= ~(CC3_OF_MASK);
(TIM3->SR & CC3_IF_MASK)
/* UIF interrupt ? */
cvi++;
TIM3->SR &= ~(CC3_IF_MASK);


#define RIGHT 13 // PD13 #define LEFT 15 // PD15
#define MAX_SPEED 500 #define MIN_SPEED 0
int main (void) {
char buf1 [15];
char buf2 [15];
unsigned int cdeSpeed=0;
unsigned char chgSpeed=1;
float compSpeed=0; // vitesse calculée 
InitTimerSpeed() //
InitGPIOSpeed()
InitMotor() // fonction créée par d’autres programmeurs Faire
Déterminer s’il faut changer de vitesse (joystick + modifier CdeSpeed).
Si chgSeep alors chgSpeed=0 SetMotorSpeed(CdeSpeed) fin si
Si period=1 alors calculer la vitesse CompSpeed(circonférence= 2πr) fin si DisplayLeds(CompSpeed, MAX-SPEED)
SystemInit(); InitGPIOSpeed(); initMotor(); periphRemap(); tim2_Init(); initTimerSpeed();


while (1) { /* loop forever */
if ((GPIOD->IDR & RIGHT)== 0) // accélération
{
while ((GPIOD->IDR & RIGHT)== 0); // attend le relâchement
if (cdeSpeed<MAX_SPEED) cdeSpeed++; // incrémente la vitesse du moteur chgSpeed=1;
}
if ((GPIOD->IDR & LEFT)== 0) // décérélation {
while ((GPIOD->IDR & LEFT)== 0); // attend le relâchement
if (cdeSpeed>MIN_SPEED) cdeSpeed- -;
chgSpeed=1; }
if (chgSpeed==1) {
SetMotorSpeed(cdeSpeed);
chgSpeed=0; }
if (period==1) {
//décrémente la vitesse du moteur
compSpeed = cvp*2*3.14159*5*100 /200; // vitesse en cm/s period=0;
}
} }








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.