BE_VOILIER/Pilotes/Sources/MyGPIO.c
Mygi27 d9d147e342 harmonisation des pilotes de l'USART et de la PWM
j'ai utilisé les pilotes de Oskar
2025-12-16 18:17:59 +01:00

55 lines
1.1 KiB
C

#include "stm32f10x.h"
void GPIO_configure(GPIO_TypeDef *GPIO ,int pin, char mode){
//if (mode == 0){ // floating input (par défaut
//}
if (mode == 1) { // output push pull 2MHZ
GPIO->CRL = (GPIO->CRL & ~(0xF<<pin*4)) | (0x2<<pin*4);
}
if (mode == 2) { // input pullup
GPIO->CRL = (GPIO->CRL & ~(0xF<<pin*4)) | (0x8<<pin*4);
GPIO->ODR |= (1<<pin);
}
if (mode == 3){ // out push pull 2MHz
if (pin < 8) {
GPIO->CRL = (GPIO->CRL & ~(0xF<<pin*4)) | (0xA<<pin*4);
GPIO->ODR |= (1<<pin);
}
else {
pin = pin-8;
GPIO->CRH = (GPIO->CRH & ~(0xF<<pin*4)) | (0xA<<pin*4);
GPIO->ODR |= (1<<pin);
}
}
};
void allume_led (GPIO_TypeDef *GPIO , char GPIO_Pin){
GPIO->ODR |= (1<<GPIO_Pin);
};
void eteindre_led (GPIO_TypeDef *GPIO , char GPIO_Pin){
GPIO->ODR &= ~(1<<GPIO_Pin);
};
void toggle_pin (GPIO_TypeDef *GPIO , char GPIO_Pin){
if ((GPIO->ODR & (1<<GPIO_Pin)) == 0)
GPIO->ODR |= (1<<GPIO_Pin);
else
GPIO->ODR &= ~(1<<GPIO_Pin);
};
int GPIO_bouton_read (GPIO_TypeDef *GPIO , char GPIO_Pin ){
if ((GPIO->IDR & (1<<GPIO_Pin)) == 0) {
return 0;
}
else{
return 1;
}
};