80 lines
1.9 KiB
Text
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);}
|