diff --git a/MDK-ARM/Project.uvoptx b/MDK-ARM/Project.uvoptx index 920a74d..6e6df50 100644 --- a/MDK-ARM/Project.uvoptx +++ b/MDK-ARM/Project.uvoptx @@ -130,7 +130,7 @@ 0 DLGTARM - (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=621,97,1215,791,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) + (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=621,97,1215,791,0)(131=738,113,1332,807,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 @@ -669,6 +669,18 @@ 0 0 + + 2 + 14 + 5 + 0 + 0 + 0 + ..\Src\Gouvernail.h + Gouvernail.h + 0 + 0 + @@ -679,7 +691,7 @@ 0 3 - 14 + 15 1 0 0 @@ -691,7 +703,7 @@ 3 - 15 + 16 1 0 0 @@ -703,7 +715,7 @@ 3 - 16 + 17 1 0 0 @@ -715,7 +727,7 @@ 3 - 17 + 18 1 0 0 @@ -727,7 +739,7 @@ 3 - 18 + 19 1 0 0 @@ -755,7 +767,7 @@ 0 5 - 19 + 20 1 0 0 @@ -775,7 +787,7 @@ 0 6 - 20 + 21 2 0 0 diff --git a/MDK-ARM/Project.uvprojx b/MDK-ARM/Project.uvprojx index d85880a..298b8ab 100644 --- a/MDK-ARM/Project.uvprojx +++ b/MDK-ARM/Project.uvprojx @@ -452,6 +452,11 @@ 1 ..\Src\maths.c + + Gouvernail.h + 5 + ..\Src\Gouvernail.h + @@ -958,6 +963,11 @@ 1 ..\Src\maths.c + + Gouvernail.h + 5 + ..\Src\Gouvernail.h + diff --git a/Src/Gouvernail.c b/Src/Gouvernail.c index e69de29..e094159 100644 --- a/Src/Gouvernail.c +++ b/Src/Gouvernail.c @@ -0,0 +1,63 @@ +#include "stm32f1xx_ll_gpio.h" // GPIO +#include "stm32f1xx_ll_bus.h" // RCC +#include "stm32f1xx_ll_tim.h" // TIMER + +/** + * @brief Configure le récepteur de la télécommande ainsi que le plateau rotatif. + * @note Configuration du port PB6 et 7 en alternate input pour récupérer les signaux + Configuration des deux channels du TIM4 pour la lecture de la PWM + Configuration du PA1 en alternate output (commande PWM vitesse) et PA2 en output push pull pour commander le sens + Configuration du TIM2_CH2 pour la sortie PWM + * @param None + * @retval None + */ +void ConfGouvernail(void) { + // Configuration des IO + // Liberation de la clock du port A et B + LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); + LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB); + + // Configuration des IO -> pin B6 et 7 en alternate input, pin A1 en alternate output, et, pin A2 en output push pull + LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_6, LL_GPIO_MODE_FLOATING); + LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_7, LL_GPIO_MODE_FLOATING); + LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_1, LL_GPIO_MODE_ALTERNATE); + LL_GPIO_SetPinOutputType(GPIOA, LL_GPIO_PIN_1, LL_GPIO_OUTPUT_PUSHPULL); + LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_2, LL_GPIO_MODE_OUTPUT); + LL_GPIO_SetPinOutputType(GPIOA, LL_GPIO_PIN_2, LL_GPIO_OUTPUT_PUSHPULL); + + + //Configuration des timers + // Libération de la clock du timer + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2); + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM4); + + // Configuration des canaux du timer -> TIM2 CH2 et PWM output (plages de 20ms) + LL_TIM_OC_InitTypeDef Tim2Initializer; + LL_TIM_OC_StructInit(&Tim2Initializer); + Tim2Initializer.OCMode = LL_TIM_OCMODE_PWM1; + LL_TIM_OC_Init(TIM2, LL_TIM_CHANNEL_CH2, &Tim2Initializer); + LL_TIM_SetAutoReload(TIM2, 19999); + LL_TIM_SetPrescaler(TIM2, 71); + LL_TIM_OC_SetCompareCH2(TIM2, 0); + LL_TIM_EnableCounter(TIM2); + LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH2); +} + +/** + * @brief Renvoi la valeur envoyée par la télécommande + * @note Représentation de la donnée en % bidirectionnel -> int entre -100 et 100 (sens codé par le signe, vitesse par la valeur absolue) + * @param None + * @retval La commande de la télécommande, représenté en % bidirectionnel -> int entre -100 et 100 (sens codé par le signe, vitesse par la valeur absolue) + */ +int LireTelecommande(void) { + return 0; +} + +/** + * @brief Commande le moteur en fonction de la commande donnée. + * @note Commande le sens et la vitesse + * @param Commande en % bidirectionnel -> int entre -100 et 100 (sens codé par le signe, vitesse par la valeur absolue) + * @retval None + */ +void CommanderMoteur(int commande) { +} diff --git a/Src/Gouvernail.h b/Src/Gouvernail.h index e69de29..eeb3d15 100644 --- a/Src/Gouvernail.h +++ b/Src/Gouvernail.h @@ -0,0 +1,31 @@ +#ifndef GOUVERNAIL_H +#define GOUVERNAIL_H + +/** + * @brief Configure le récepteur de la télécommande ainsi que le plateau rotatif. + * @note Configuration du port PB6 et 7 en alternate input pour récupérer les signaux + Configuration des deux channels du TIM4 pour la lecture de la PWM + Configuration du PA1 en alternate output (commande PWM vitesse) et PA2 en output push pull pour commander le sens + Configuration du TIM2_CH2 pour la sortie PWM + * @param None + * @retval None + */ +void ConfGouvernail(void); + +/** + * @brief Renvoi la valeur envoyée par la télécommande + * @note Représentation de la donnée en % bidirectionnel -> int entre -100 et 100 (sens codé par le signe, vitesse par la valeur absolue) + * @param None + * @retval La commande de la télécommande, représenté en % bidirectionnel -> int entre -100 et 100 (sens codé par le signe, vitesse par la valeur absolue) + */ +int LireTelecommande(void); + +/** + * @brief Commande le moteur en fonction de la commande donnée. + * @note Commande le sens et la vitesse + * @param Commande en % bidirectionnel -> int entre -100 et 100 (sens codé par le signe, vitesse par la valeur absolue) + * @retval None + */ +void CommanderMoteur(int commande); + +#endif diff --git a/Src/Voilier.c b/Src/Voilier.c index 92008ad..5b057e5 100644 --- a/Src/Voilier.c +++ b/Src/Voilier.c @@ -25,7 +25,7 @@ void Setup(){ //ConfAntiChavirement(); ConfAllure(); ConfVoile(); - //ConfGouvernail(); + ConfGouvernail(); }