From a79ec6a59cbedd062f0b827fc9604dd6571eb7f6 Mon Sep 17 00:00:00 2001 From: orvik Date: Wed, 12 Nov 2025 15:08:36 +0100 Subject: [PATCH] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20vers=20?= =?UTF-8?q?"CantoOrvikPilotes"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CantoOrvikPilotes/ADC.c | Bin 0 -> 1024 bytes CantoOrvikPilotes/DriverGPIO.c | 80 +++++++++++++++++++++++++ CantoOrvikPilotes/GPIO.c | 106 +++++++++++++++++++++++++++++++++ CantoOrvikPilotes/Gironde.c | 24 ++++++++ CantoOrvikPilotes/MyTimer.c | 36 +++++++++++ 5 files changed, 246 insertions(+) create mode 100644 CantoOrvikPilotes/ADC.c create mode 100644 CantoOrvikPilotes/DriverGPIO.c create mode 100644 CantoOrvikPilotes/GPIO.c create mode 100644 CantoOrvikPilotes/Gironde.c create mode 100644 CantoOrvikPilotes/MyTimer.c diff --git a/CantoOrvikPilotes/ADC.c b/CantoOrvikPilotes/ADC.c new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/CantoOrvikPilotes/DriverGPIO.c b/CantoOrvikPilotes/DriverGPIO.c new file mode 100644 index 0000000..d2ea090 --- /dev/null +++ b/CantoOrvikPilotes/DriverGPIO.c @@ -0,0 +1,80 @@ +#include "stm32f10x.h" + +#define In_Floating 0x4 +#define In_PullDown 0x8 +#define In_PullUp 0x8 +#define In_Analog 0x0 +#define Out_Ppull 0x3 +#define Out_OD 0x7 +#define AltOut_Ppull 0xB +#define AltOut_OD 0xF + +void MyGPIO_Init(GPIO_TypeDef * GPIO, char pin, char conf ){ +int shift_pin; +//Start clock +if(GPIO == GPIOA){ +RCC -> APB2ENR |= RCC_APB2ENR_IOPAEN; +} +else if(GPIO == GPIOB){ +RCC -> APB2ENR |= RCC_APB2ENR_IOPBEN; +} +else if(GPIO == GPIOC){ +RCC -> APB2ENR |= RCC_APB2ENR_IOPCEN; +} +else if(GPIO == GPIOD){ +RCC -> APB2ENR |= RCC_APB2ENR_IOPDEN; +} +if(pin < 8){//CRL zone +shift_pin = pin*4; +GPIO -> CRL &= ~(0xF << shift_pin); +//PullUp and PullDown have the same conf number, so we need to change the ODR to diferenciate them both +if(conf == In_PullUp){ +GPIO -> CRL |= ( In_PullUp << shift_pin); +GPIO -> ODR |= (1< CRL |= ( In_PullDown << shift_pin); +GPIO -> ODR &= ~(1< CRL |= ( conf << shift_pin); +} +} +else{//CRH zone +shift_pin = (pin-8)*4; +GPIO -> CRH &= ~(0xF << shift_pin); +if(conf == In_PullUp){ +GPIO -> CRH |= ( In_PullUp << shift_pin); +GPIO -> ODR |= (1< CRH |= ( In_PullDown << shift_pin); +GPIO -> ODR &= ~(1< CRH |= ( conf << shift_pin); +} +} +} +int MyGPIO_Read(GPIO_TypeDef * GPIO, char GPIO_Pin){ +if(GPIO -> IDR & (1 << GPIO_Pin)){ +return 1; +} +else{ +return 0; +} +} +void MyGPIO_Set(GPIO_TypeDef * GPIO, char GPIO_Pin){ +GPIO -> BSRR = (1< BSRR = (1<<(GPIO_Pin+16));//1 on reset zone +} +void MyGPIO_Toggle(GPIO_TypeDef * GPIO, char GPIO_Pin){ +if((GPIO-> ODR & (1< BSRR = (1<<(GPIO_Pin+16)); +} +else{ +GPIO -> BSRR = (1< +#include "../Include/GPIO.h" + +int ChercherEtat(GPIO_TypeDef * GPIO, int pin){ // Trouvons la valeur d'un broche sur un certain GPIO +return((GPIO -> IDR & (0x01 << pin))); +} + +void ResetBroche(uint32_t GPIO, int Broche){ // Mettre à zero d'un certain broche d'un certain GPIO + GPIO -> BSRR |= BS Broche; +} + +void SetBroche(uint32_t GPIO, int Broche){ // Mettre à zero d'un certain broche d'un certain GPIO + GPIO -> BSRR |= BSBroche << 16; +} + +void TogglePin(GPIO_TypeDef*GPIO, int Broche){ // Inverser la valueur de broche sur GPIO + GPIO -> ODR = GPIO -> ODR ^ (0x1 << Broche); +} + +void ConfigureGPIO(uint32_t GPIO, int Broche, int IO, char * Mode){ // Mettre un broche d'un GPIO sur un mode + // Possble de améliorer avec des int à la place de string + //Start clock pour les GPIO concernés +if(GPIO == GPIOA){ + RCC -> APB2ENR |= RCC_APB2ENR_IOPAEN; +} +else if(GPIO == GPIOB){ + RCC -> APB2ENR |= RCC_APB2ENR_IOPBEN; +} +else if(GPIO == GPIOC){ + RCC -> APB2ENR |= RCC_APB2ENR_IOPCEN; +} +else if(GPIO == GPIOD){ + RCC -> APB2ENR |= RCC_APB2ENR_IOPDEN; +} + // Cas d'u CRL, broche 0 à 7 + if (Broche < 8) { + GPIO -> CRL &= ~(0x1 << Broche *4) & ~(0x1 << Broche *4 +1) & ~(0x1 << Broche *4 + 2) & ~(0x1 << Broche *4 + 3); // Clean bits + if (IO == 0){ //Input + if (strcmp(Mode,"Floating")) { + GPIO -> CRL |= (0x1 << Broche *4) | (0x1 << Broche * 4 + 1); + } + else if (strcmp(Mode,"Pull-Up") || strcmp(Mode,"Pull-Down")){ + GPIO -> CRL |= (0x1 << 6*4 + 1); + } + else { + return; // Mode invalid + } + } + else if ( IO < 5) { // Output + GPIO -> CRL |= (0xIO << Broche * 4 + 2); // Frequency mode + if (strcmp(Mode, "Open-Drain")){ + GPIO -> CRL |= (0x1 << Broche *4); + } + else if (strcmp(Mode, "Push-Pull Alterne")){ + GPIO -> CRL |= (0x1 << Broche *4 + 1); + RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // Alternate Function I/O clock enable GPIOA + } + else if (strcmp(Mode, "Open-Drain Alterne")){ + GPIO -> CRL |= (0x1 << Broche * 4) | (0x1 << Broche * 4 + 1); + } + else { + return; // Mode invalid + } + } + else{ + return; + } + } + else if (Broche < 16) { + GPIO -> CRH &= ~(0x1 << Broche *4) & ~(0x1 << Broche *4 +1) & ~(0x1 << Broche *4 + 2) & ~(0x1 << Broche *4 + 3); // Clean bits + if (IO == 0){ //Input + if (strcmp(Mode,"Floating")) { + GPIO -> CRH |= (0x1 << Broche *4) | (0x1 << Broche * 4 + 1); + } + else if (strcmp(Mode,"Pull-Up") || strcmp(Mode,"Pull-Down")){ + GPIO -> CRH |= (0x1 << 6*4 + 1); + } + else { + return; // Mode invalid or doesn't exist + } + } + else if ( IO < 5) { // Output + GPIO -> CRH |= (0xIO << Broche * 4 + 2); // Frequency mode + if (strcmp(Mode, "Open-Drain")){ + GPIO -> CRH |= (0x1 << Broche *4); + } + else if (strcmp(Mode, "Push-Pull Alterne")){ + GPIO -> CRH |= (0x1 << Broche *4 + 1); + } + else if (strcmp(Mode, "Open-Drain Alterne")){ + GPIO -> CRH |= (0x1 << Broche * 4) | (0x1 << Broche * 4 + 1); + } + else { + return; // Mode invalid or doesn't exits + } + } + else{ + return; // IO invalid + } + } + else{ + return; // Pin number invalid + } +} + diff --git a/CantoOrvikPilotes/Gironde.c b/CantoOrvikPilotes/Gironde.c new file mode 100644 index 0000000..bee82ad --- /dev/null +++ b/CantoOrvikPilotes/Gironde.c @@ -0,0 +1,24 @@ +#include "stm32f10x.h" +#include "MyTimer.h" +#include "Nucleo.h" +#include "Timer.h" +#include "DriverGPIO.h" +#include "Gironde.h" + +void configEncoder(TIM_TypeDef * Timer){ + Timer -> CCMR1 |= TIM_CCMR1_CC1S; + Timer -> CCMR2 |= TIM_CCMR1_CC2S; + Timer -> CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + Timer -> CCMR1 &= ~(TIM_CCMR1_IC1F); + Timer -> CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); + Timer -> CCMR2 &= ~(TIM_CCMR1_IC2F); + Timer -> SMCR &= ~TIM_SMCR_SMS; + Timer -> SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_1; + Timer -> CR1 |= TIM_CR1_CEN; + Timer -> ARR = 0xFFFF; +} +void configChannel(){ + MyGPIO_Init(GPIOA,7,In_Floating ); + MyGPIO_Init(GPIOA,8,In_Floating ); + +} \ No newline at end of file diff --git a/CantoOrvikPilotes/MyTimer.c b/CantoOrvikPilotes/MyTimer.c new file mode 100644 index 0000000..2873065 --- /dev/null +++ b/CantoOrvikPilotes/MyTimer.c @@ -0,0 +1,36 @@ +#include "stm32f10x.h" +#include "../Include/Timer.h" +#include "../Include/PWM.h" +#include "../Include/DriverGPIO.h" +// Variables +#define ARR_TIM1 0xFFAD +#define PSC_TIM1 0xFF +#define ARR_TIM2 0xFFAD +#define PSC_TIM2 0x0225 +#define ARR_TIM3 0x2CF +#define PSC_TIM3 0x0 + +volatile int g_tick_count; +void Test(void){ + // Signal + g_tick_count++; + MyGPIO_Toggle(GPIOA, 8); +} + +void ConfigureTimers(){ +MyTimer_Base_Init(TIM2, ARR_TIM2, PSC_TIM2); +MyTimer_Base_Init(TIM1, ARR_TIM1, PSC_TIM1); +MyTimer_Base_Init(TIM3, ARR_TIM2, PSC_TIM2); +EnableTimer(TIM1); +EnableTimer(TIM2); +EnableTimer(TIM3); +} +void ConfigureIT(){ +//MyTimer_ActiveIT(TIM2, 4, Test); //start interruption with priority 4 +//MyTimer_ActiveIT(TIM1, 4, Test); //start interruption with priority 4 +MyTimer_ActiveIT(TIM3, 4, Test); //start interruption with priority 4 +} +void ConfigurePWM(){ +MyTimer_PWM(TIM1, 1); +MyTimer_Set_DutyCycle(TIM1, 1, 20.0); +}