diff --git a/.gitignore b/.gitignore index bacb176..539da79 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ -*.lst -*.uvguix* MDK-ARM/DebugConfig/ -*.scvd -MDK-ARM/NUCLEO-F103RB/ -*.o \ No newline at end of file +MDK-ARM/NUCLEO-F103RB +MDK-ARM/*.scvd +MDK-ARM/*.uvguix.* +MDK-ARM/RTE/ +*.lst \ No newline at end of file diff --git a/MDK-ARM/Project.uvoptx b/MDK-ARM/Project.uvoptx index 06c8126..bfaf2e9 100644 --- a/MDK-ARM/Project.uvoptx +++ b/MDK-ARM/Project.uvoptx @@ -130,7 +130,7 @@ 0 DLGTARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=100,127,658,622,0)(121=-1,-1,-1,-1,0)(122=348,235,769,640,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=150,186,744,880,0)(131=-1,-1,-1,-1,0)(132=572,114,1166,808,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + (1010=668,263,1044,820,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1027,281,1448,686,0)(121=-1,-1,-1,-1,0)(122=348,235,769,640,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=87,183,486,528,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=784,58,1378,752,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) 0 @@ -153,7 +153,56 @@ -U-O142 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) - + + + 0 + 0 + 59 + 1 +
134218250
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\Allure.c + + \\NUCLEO_F103RB\../Src/Allure.c\59 +
+ + 1 + 0 + 93 + 1 +
134218278
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\Allure.c + + \\NUCLEO_F103RB\../Src/Allure.c\93 +
+ + 2 + 0 + 56 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\Allure.c + + +
+
0 @@ -305,7 +354,7 @@ 0 DLGDARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=120,153,415,450,0)(120=448,564,869,991,1)(121=-1,-1,-1,-1,0)(122=896,89,1317,516,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=718,360,1312,1111,1)(131=521,17,1115,768,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=251,288,699,702,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=120,153,415,450,0)(120=204,207,625,634,0)(121=-1,-1,-1,-1,0)(122=896,89,1317,516,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=248,17,842,768,0)(131=521,17,1115,768,0)(132=709,34,1303,785,0)(133=-1,-1,-1,-1,0)(160=251,288,699,702,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) 0 @@ -338,7 +387,72 @@ -U-O142 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) - + + + 0 + 0 + 99 + 1 +
134218684
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\MyDrivers\MyTimer.c + + \\NUCLEO_F103RB\../MyDrivers/MyTimer.c\99 +
+ + 1 + 0 + 12 + 1 +
134218790
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\Voilier.c + + \\NUCLEO_F103RB\../Src/Voilier.c\12 +
+ + 2 + 0 + 49 + 1 +
134218416
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\Allure.c + + \\NUCLEO_F103RB\../Src/Allure.c\49 +
+ + 3 + 0 + 17 + 1 +
134218794
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\Voilier.c + + \\NUCLEO_F103RB\../Src/Voilier.c\17 +
+
0 @@ -571,8 +685,8 @@ 0 0 0 - ..\LLDrivers\src\stm32f1xx_ll_tim.c - stm32f1xx_ll_tim.c + ..\LLDrivers\src\stm32f1xx_ll_gpio.c + stm32f1xx_ll_gpio.c 0 0 @@ -583,8 +697,8 @@ 0 0 0 - ..\LLDrivers\src\stm32f1xx_ll_gpio.c - stm32f1xx_ll_gpio.c + ..\LLDrivers\src\stm32f1xx_ll_tim.c + stm32f1xx_ll_tim.c 0 0 diff --git a/MDK-ARM/Project.uvprojx b/MDK-ARM/Project.uvprojx index aeb4d63..661a0b3 100644 --- a/MDK-ARM/Project.uvprojx +++ b/MDK-ARM/Project.uvprojx @@ -447,16 +447,16 @@ 1 ..\LLDrivers\src\stm32f1xx_ll_utils.c - - stm32f1xx_ll_tim.c - 1 - ..\LLDrivers\src\stm32f1xx_ll_tim.c - stm32f1xx_ll_gpio.c 1 ..\LLDrivers\src\stm32f1xx_ll_gpio.c + + stm32f1xx_ll_tim.c + 1 + ..\LLDrivers\src\stm32f1xx_ll_tim.c + stm32f1xx_ll_exti.c 1 @@ -933,16 +933,16 @@ 1 ..\LLDrivers\src\stm32f1xx_ll_utils.c - - stm32f1xx_ll_tim.c - 1 - ..\LLDrivers\src\stm32f1xx_ll_tim.c - stm32f1xx_ll_gpio.c 1 ..\LLDrivers\src\stm32f1xx_ll_gpio.c + + stm32f1xx_ll_tim.c + 1 + ..\LLDrivers\src\stm32f1xx_ll_tim.c + stm32f1xx_ll_exti.c 1 diff --git a/Src/Allure.c b/Src/Allure.c index e69de29..37c9105 100644 --- a/Src/Allure.c +++ b/Src/Allure.c @@ -0,0 +1,96 @@ +#include "maths.h" //Pour la valeur absolue +#include "stm32f1xx_ll_gpio.h" // GPIO +#include "stm32f1xx_ll_bus.h" // RCC +#include "stm32f1xx_ll_tim.h" // TIMER +#include "stm32f1xx_ll_exti.h" // External Interrup + +int allure; +int initialized = 0; + +/** + * @brief Configure la girouette pour la détection de l'allure (sens du vent). + * @note Configuration des ports PA6 et 7 en alternate input pour récupérer les signaux + Configuration des deux channels du TIM3 pour le compteur incrementeur + Configuration du PA5 avec une interruption pour capter les tours de girouette + * @param None + * @retval None + */ +void ConfAllure(void) { + // Configuration des IO + // Liberation de la clock du port A + LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); + + // Configuration des IO -> pin A6 et A7 en alternate imput, pin A5 en interruption + //LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_5, LL_GPIO_MODE_INPUT); + LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_6, LL_GPIO_MODE_FLOATING); + LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_7, LL_GPIO_MODE_FLOATING); + LL_GPIO_AF_SetEXTISource(LL_GPIO_AF_EXTI_PORTA, LL_GPIO_AF_EXTI_LINE5); + + LL_EXTI_InitTypeDef ExtiInitializer; + LL_EXTI_StructInit(&ExtiInitializer); + ExtiInitializer.Line_0_31 = LL_EXTI_LINE_5; + ExtiInitializer.Mode = LL_EXTI_MODE_IT; + ExtiInitializer.Trigger = LL_EXTI_TRIGGER_RISING; + ExtiInitializer.LineCommand = ENABLE; + LL_EXTI_Init(&ExtiInitializer); + + NVIC->IP[23] = 0x43; + NVIC->ISER[0] |= 0x01 <<23; + + //Configuration du timer + // Libération de la clock du timer + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3); + + // Configuration des canaux du timer -> TIM3 CH1 et 2 en alternate input + LL_TIM_ENCODER_InitTypeDef Tim3Initializer; + LL_TIM_ENCODER_StructInit(&Tim3Initializer); + Tim3Initializer.EncoderMode = LL_TIM_ENCODERMODE_X2_TI1; + Tim3Initializer.IC1ActiveInput = LL_TIM_ACTIVEINPUT_DIRECTTI; + Tim3Initializer.IC1Filter = LL_TIM_IC_FILTER_FDIV1 ; + Tim3Initializer.IC1Polarity = LL_TIM_IC_POLARITY_RISING; + Tim3Initializer.IC1Prescaler = LL_TIM_ICPSC_DIV1; + Tim3Initializer.IC2ActiveInput = LL_TIM_ACTIVEINPUT_DIRECTTI; + Tim3Initializer.IC2Filter = LL_TIM_IC_FILTER_FDIV1; + Tim3Initializer.IC2Polarity = LL_TIM_IC_POLARITY_RISING; + Tim3Initializer.IC2Prescaler = LL_TIM_ICPSC_DIV1; + LL_TIM_ENCODER_Init(TIM3, &Tim3Initializer); + LL_TIM_SetAutoReload(TIM3, 359); + LL_TIM_EnableCounter(TIM3); +} + +int RecupAllure(void) { + if (!initialized) { + return -1000; + } else { + return ((int)LL_TIM_GetCounter(TIM3)) - 180; + } +} + +char * ToString(int alpha) { + int alpha_abs = abs(alpha); + if (alpha_abs < 45) { + return "Vent debout"; + } else if (alpha < 55) { + return "Près"; + } else if (alpha < 65) { + return "Bon plein"; + } else if (alpha < 80) { + return "Petit largue"; + } else if (alpha < 100) { + return "Travers"; + } else if (alpha < 115) { + return "Largue"; + } else if (alpha < 155) { + return "Grand largue"; + } else if (alpha < 180) { + return "Vent arrière"; + } else { + return "ERROR"; + } +} + +void EXTI9_5_IRQHandler(void) { + LL_TIM_SetCounter(TIM3, 0); + initialized = 1; + LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_5); +} diff --git a/Src/Allure.h b/Src/Allure.h index e69de29..068cc0d 100644 --- a/Src/Allure.h +++ b/Src/Allure.h @@ -0,0 +1,41 @@ +#ifndef ALLURE_H +#define ALLURE_H + +/** + * @brief Configure la girouette pour la détection de l'allure (sens du vent). + * @note Configuration des ports PA6 et 7 en alternate input pour récupérer les signaux + Configuration des deux channels du TIM3 pour le compteur incrementeur + Configuration du PA5 avec une interruption pour capter les tours de girouette + * @param None + * @retval None + */ +void ConfAllure(void); + +/** + * @brief Renvoi la valeur de l'allure actuelle + * @note Représentation de la donnée en degrès -> int entre -180 et 180 + ATTENTION : -1000 renvoyé si girouette non initialisée + * @param None + * @retval L'allure, représenté en degrès par un entier entre -180 et 180 + ATTENTION : -1000 renvoyé si girouette non initialisée + */ +int RecupAllure(void); + +/** + * @brief Associe un chaine de caractère a une valeur d'allure. + * @note Une chaine de caractère est associé a des intervalles de alpha : + [-45, 45] -> "Vent debout" + [45, 55] -> "Près" (et intervalle opposé) + [55, 65] -> "Bon plein" (et intervalle opposé) + [65, 80] -> "Petit largue" (et intervalle opposé) + [80, 100] -> "Travers" (et intervalle opposé) + [100, 115] -> "Largue" (et intervalle opposé) + [115, 155] -> "Grand largue" (et intervalle opposé) + [155, -155] -> "Vent arrière" + Autre -> "ERROR" + * @param alpha : un entier représentant l'allure en ° (-180 à 180) + * @retval Une chaine de caractère représentant l'allure + */ +char * ToString(int alpha); + +#endif diff --git a/Src/Voilier.c b/Src/Voilier.c index df8f910..e4bffd2 100644 --- a/Src/Voilier.c +++ b/Src/Voilier.c @@ -5,10 +5,12 @@ #include "Heure.h" #include "Transmission.h" #include "Voile.h" + #include "stm32f1xx_ll_rcc.h" // utile dans la fonction SystemClock_Config #include "stm32f1xx_ll_utils.h" // utile dans la fonction SystemClock_Config #include "stm32f1xx_ll_system.h" // utile dans la fonction SystemClock_Config + void SystemClock_Config(void) { /* Set FLASH latency */ diff --git a/Src/maths.c b/Src/maths.c new file mode 100644 index 0000000..a2d860d --- /dev/null +++ b/Src/maths.c @@ -0,0 +1,8 @@ + +int abs(int a) { + if (a<0) { + return -a; + } else { + return a; + } +} diff --git a/Src/maths.h b/Src/maths.h new file mode 100644 index 0000000..d6d7b78 --- /dev/null +++ b/Src/maths.h @@ -0,0 +1,11 @@ +#ifndef MATHS_H +#define MATHS_H + +/** + * @brief Valeur absolue. + * @note Si a < 0 renvoi -a, sinon, a + * @param a : un entier + * @retval La valeur absolue de a + */ +int abs(int a); +#endif