IEM/iem.txt
2025-11-14 13:03:43 +01:00

80 lines
1.9 KiB
Text

MyUART.C
void (*rx_callback)(char) = 0;
void MyUART_SetRxCallback(void (*callback)(char)) {
rx_callback = callback;
}
void USART2_IRQHandler(void){
if (USART2->SR & USART_SR_RXNE) {
char c = (char)(USART2->DR & 0xFF);
if (rx_callback) rx_callback(c);
}
}
main.C
volatile char cap = 0;
void ReceptionCap(char c){
cap = c;
}
void AppliquerCommandeCap(void){
int cmd = (int)cap;
if (cmd == 0) {
StopRotation();
} else if (cmd > 0) {
RotDroite(cmd);
} else {
RotGauche(-cmd);
}
}
void main(){
MyUART_Init(USART2);
MyUART_SetRxCallback(ReceptionCap);
Init_GPIO_Sens();
Init_Timer_PWM();
while(1){
AppliquerCommandeCap();
Delay_ms(100); //fct à créer
}
}
#define MOTEUR_GPIO GPIOB ??
#define MOTEUR_PIN_SENS 0 ??
void Init_GPIO_Sens(void) {
MyGPIO_Init(MOTEUR_GPIO, MOTEUR_PIN_SENS, Out_Ppull);
}
#define MOTEUR_TIM TIM2 ??
#define MOTEUR_TIM_CHANNEL 1 ??
void Init_Timer_PWM(void) {
// Exemple fréquence PWM : 20 kHz fclock=72Mhz
// Choix PSC = 36 => 2 MHz timer clock
// ARR = 100 => 20 kHz PWM (2MHz / 100)
//La bonne pin (TIMx CHx) = Alternate Function Push-Pull
avec MyGPIO_Init(GPIOx,x, AltOut_Ppull) et verif RCC->APB2ENR |= RCC_APB2ENR_IOPxEN; actif
MyTimer_Base_Init(MOTEUR_TIM, 100, 36);
MyTimer_PWM(MOTEUR_TIM, MOTEUR_TIM_CHANNEL);
MyTimer_StartPWM(MOTEUR_TIM, MOTEUR_TIM_CHANNEL, 0); // PWM à 0 pour le start
}
void StopRotation(void) {
MyGPIO_Reset(MOTEUR_GPIO, MOTEUR_PIN_SENS); // blc sens MyTimer_StartPWM(MOTEUR_TIM, MOTEUR_TIM_CHANNEL, 0); // PWM=0 STOP
}
void RotDroite(int vitesse) {
MyGPIO_Set(MOTEUR_GPIO, MOTEUR_PIN_SENS); // droite = 1
MyTimer_StartPWM(MOTEUR_TIM, MOTEUR_TIM_CHANNEL, vitesse);}
void RotGauche(int vitesse) {
MyGPIO_Reset(MOTEUR_GPIO, MOTEUR_PIN_SENS); // droite = 1
MyTimer_StartPWM(MOTEUR_TIM, MOTEUR_TIM_CHANNEL, vitesse);}