From 355f050dddd89bb80b497716f677bb5a2ba7b25f Mon Sep 17 00:00:00 2001 From: Alix Chagot Date: Tue, 4 Apr 2023 14:36:29 +0200 Subject: [PATCH 1/2] Added servo, motoreducteur and working on rtc --- driver/timer.c | 5 +- driver/timer.h | 2 +- implementation/motoreducteur.c | 41 +++++++ implementation/motoreducteur.h | 12 ++ implementation/rtc.c | 24 ++++ implementation/rtc.h | 9 ++ implementation/servo.c | 30 +++++ implementation/servo.h | 13 ++ keilproject/RTE/_R_el/RTE_Components.h | 2 +- keilproject/Source/Principale.c | 16 ++- keilproject/voilier.uvoptx | 163 ++++++++++++++++++++----- keilproject/voilier.uvprojx | 84 ++++++++++++- 12 files changed, 363 insertions(+), 38 deletions(-) create mode 100644 implementation/motoreducteur.c create mode 100644 implementation/motoreducteur.h create mode 100644 implementation/rtc.c create mode 100644 implementation/rtc.h create mode 100644 implementation/servo.c create mode 100644 implementation/servo.h diff --git a/driver/timer.c b/driver/timer.c index 768cc8b..0d15cd4 100644 --- a/driver/timer.c +++ b/driver/timer.c @@ -4,6 +4,7 @@ void plantage(void) { while(1); } + void (*IT_Tim1) (void) = plantage; void (*IT_Tim2) (void) = plantage; void (*IT_Tim3) (void) = plantage; @@ -168,10 +169,10 @@ if(Timer == TIM1) MyGPIO_Init(&PWM_OUT); } -void MyTimer_DutyCycle(TIM_TypeDef * Timer, char Channel, unsigned char DutyCycle) +void MyTimer_DutyCycle(TIM_TypeDef * Timer, char Channel, unsigned int DutyCycle) { unsigned int RC; - RC = ((Timer->ARR)/100)*(DutyCycle); + RC = ((Timer->ARR)*(DutyCycle)/10000); switch (Channel) { case 1: Timer->CCR1 = RC; diff --git a/driver/timer.h b/driver/timer.h index 281867e..6c63f90 100644 --- a/driver/timer.h +++ b/driver/timer.h @@ -11,7 +11,7 @@ typedef struct { void MyTimer_Base_Init(MyTimer_Struct_Typedef * Timer); void MyTimer_ActiveIT(TIM_TypeDef * Timer, char Prio, void (*IT_function) (void)); void MyTimer_PWM(TIM_TypeDef * Timer ,char Channel); -void MyTimer_DutyCycle(TIM_TypeDef * Timer, char Channel, unsigned char DutyCycle); +void MyTimer_DutyCycle(TIM_TypeDef * Timer, char Channel, unsigned int DutyCycle); #define MyTimer_Base_Start(Tim) (Tim.Timer->CR1 |= TIM_CR1_CEN) #define MyTimer_Base_Stop(Tim) (Tim.Timer->CR1 &= ~TIM_CR1_CEN) diff --git a/implementation/motoreducteur.c b/implementation/motoreducteur.c new file mode 100644 index 0000000..b081215 --- /dev/null +++ b/implementation/motoreducteur.c @@ -0,0 +1,41 @@ +#include "motoreducteur.h" +#include "timer.h" +#include "gpio.h" + +void MyMotor_Init() +{ + MyTimer_Struct_Typedef Timer; + MyGPIO_Struct_TypeDef Pin_Direction; + + //F de 50kHz + Timer.Timer = TIM3; + Timer.ARR = 3599; //72Mhz / 50kHz = 1440 et 1440*1 = 1440 + Timer.PSC = 0; + + Pin_Direction.GPIO = GPIOB; + Pin_Direction.GPIO_Pin = 1; + Pin_Direction.GPIO_Conf = Out_PullUp; + + MyTimer_Base_Init(&Timer); + MyGPIO_Init(&Pin_Direction); + + //Pin Timer 3 Channel 3 PB0 + MyTimer_PWM(TIM3, 3); + MyTimer_DutyCycle(TIM3, 3, 0); + + MyTimer_Base_Start(Timer); + MyMotor_ChangeDirection(ANTIHOR); +} + +void MyMotor_ChangeSpeed(unsigned int DC) +{ + MyTimer_DutyCycle(TIM3, 3, DC); +} + +void MyMotor_ChangeDirection(uint8_t Sens) +{ + if (Sens == HORAIRE) + MyGPIO_Set(GPIOB, 1); + if (Sens == ANTIHOR) + MyGPIO_Reset(GPIOB, 1); +} diff --git a/implementation/motoreducteur.h b/implementation/motoreducteur.h new file mode 100644 index 0000000..a7c9db0 --- /dev/null +++ b/implementation/motoreducteur.h @@ -0,0 +1,12 @@ +#ifndef MYMOTOR_H +#define MYMOTOR_H +#include "stm32f10x.h" + +#define HORAIRE 0x1 +#define ANTIHOR 0x0 + +void MyMotor_Init(); +void MyMotor_ChangeSpeed(unsigned int DC); +void MyMotor_ChangeDirection(uint8_t Sens); + +#endif diff --git a/implementation/rtc.c b/implementation/rtc.c new file mode 100644 index 0000000..1e35d79 --- /dev/null +++ b/implementation/rtc.c @@ -0,0 +1,24 @@ +#include "rtc.h" + +void plantage_i2C(void) { + while(1); +} + +void (*IT_I2C_Err) (void) = plantage_i2C; + +void MyRTC_Init() +{ + MyI2C_Init(I2C1, 15, IT_I2C_Err); +} + +void MyRTC_GetTime() +{ + MyI2C_RecSendData_Typedef data; + char regCopy = 0; + + data.SlaveAdress7bits = 0xC8; + data.Ptr_Data = ®Copy; + data.Nb_Data = 1; + + MyI2C_GetString(I2C1, 0x0, &data); +} \ No newline at end of file diff --git a/implementation/rtc.h b/implementation/rtc.h new file mode 100644 index 0000000..2b4b45e --- /dev/null +++ b/implementation/rtc.h @@ -0,0 +1,9 @@ +#ifndef GPIODRIVER_H +#define GPIODRIVER_H +#include "stm32f10x.h" +#include "MyI2C.h" + +void MyRTC_Init(); +void MyRTC_GetTime(); + +#endif diff --git a/implementation/servo.c b/implementation/servo.c new file mode 100644 index 0000000..cf41537 --- /dev/null +++ b/implementation/servo.c @@ -0,0 +1,30 @@ +#include "servo.h" +#include "timer.h" + +void MyServo_Init() +{ + MyTimer_Struct_Typedef Timer; + + //Période de 20ms -> F de 50Hz + Timer.Timer = TIM2; + Timer.ARR = 3599; //20*180 (angle) = 3600 + Timer.PSC = 399; //72Mhz / 50Hz = 1.44Mhz et 3600*400 = 1.44M + + MyTimer_Base_Init(&Timer); + + //Pin Timer 2 Channel 1 PA0 + MyTimer_PWM(TIM2, 1); + MyTimer_DutyCycle(TIM2, 1, 750); + + MyTimer_Base_Start(Timer); +} + +void MyServo_ChangeAngle(uint8_t Angle) +{ + if (Angle > 180) + Angle = 180; + + int DC = 500 + (Angle * 500 / 180); + + MyTimer_DutyCycle(TIM2, 1, DC); +} diff --git a/implementation/servo.h b/implementation/servo.h new file mode 100644 index 0000000..bc9f4f7 --- /dev/null +++ b/implementation/servo.h @@ -0,0 +1,13 @@ +#ifndef MYSERVO_H +#define MYSERVO_H +#include "stm32f10x.h" + +/* +180 correspond à 0° +0 correspond à 90° +*/ + +void MyServo_Init(); +void MyServo_ChangeAngle(uint8_t Angle); + +#endif diff --git a/keilproject/RTE/_R_el/RTE_Components.h b/keilproject/RTE/_R_el/RTE_Components.h index 849a0e6..d0354e4 100644 --- a/keilproject/RTE/_R_el/RTE_Components.h +++ b/keilproject/RTE/_R_el/RTE_Components.h @@ -3,7 +3,7 @@ * Auto generated Run-Time-Environment Configuration File * *** Do not modify ! *** * - * Project: 'gpiodriver' + * Project: 'voilier' * Target: 'Réel' */ diff --git a/keilproject/Source/Principale.c b/keilproject/Source/Principale.c index e4d5a23..10d4324 100644 --- a/keilproject/Source/Principale.c +++ b/keilproject/Source/Principale.c @@ -1,8 +1,16 @@ #include "stm32f10x.h" -#include "../../driver/MyI2C.h" -#include "../../driver/MySPI.h" +#include "servo.h" +#include "motoreducteur.h" int main (void) { - while(1){}; - } + MyServo_Init(); + MyServo_ChangeAngle(179); + MyMotor_Init(); + + MyMotor_ChangeSpeed(2000); + MyMotor_ChangeDirection(HORAIRE); + + + while(1){}; +} diff --git a/keilproject/voilier.uvoptx b/keilproject/voilier.uvoptx index b667108..8bffbb5 100644 --- a/keilproject/voilier.uvoptx +++ b/keilproject/voilier.uvoptx @@ -75,7 +75,7 @@ 1 0 - 1 + 0 18 @@ -142,23 +142,23 @@ 0 0 - 15 + 13 1 -
134218740
+
0
0 0 0 0 0 - 1 + 0 .\Source\Principale.c - \\cool_Simule\Source/Principale.c\15 +
1 0 - 19 + 12 1
0
0 @@ -174,6 +174,38 @@ 2 0 + 15 + 1 +
134218740
+ 0 + 0 + 0 + 0 + 0 + 1 + .\Source\Principale.c + + \\cool_Simule\Source/Principale.c\15 +
+ + 3 + 0 + 19 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + .\Source\Principale.c + + +
+ + 4 + 0 7 1
0
@@ -188,7 +220,7 @@
- 3 + 5 0 8 1 @@ -332,7 +364,7 @@ 1 0 - 0 + 1 18 @@ -387,7 +419,7 @@ 0 ST-LINKIII-KEIL_SWO - -U066FFF504955857567155843 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + -U066AFF504955857567212155 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) 0 @@ -410,24 +442,7 @@ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)) - - - 0 - 0 - 6 - 1 -
0
- 0 - 0 - 0 - 0 - 0 - 0 - .\Source\Principale.c - - -
-
+ 0 @@ -530,6 +545,98 @@ 0 0 + + 2 + 3 + 1 + 0 + 0 + 0 + ..\driver\gpio.c + gpio.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\driver\timer.c + timer.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\driver\uart.c + uart.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\driver\adc.c + adc.c + 0 + 0 + + + + + MesImplementations + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\implementation\servo.c + servo.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\implementation\motoreducteur.c + motoreducteur.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\implementation\rtc.c + rtc.c + 0 + 0 + @@ -542,7 +649,7 @@ ::Device - 1 + 0 0 0 1 diff --git a/keilproject/voilier.uvprojx b/keilproject/voilier.uvprojx index cda4e65..fdc3f2a 100644 --- a/keilproject/voilier.uvprojx +++ b/keilproject/voilier.uvprojx @@ -339,7 +339,7 @@ - .\Include + .\Include;..\driver;..\implementation @@ -398,6 +398,46 @@ 4 ..\driver\Lib_Com_Periph_2022.lib + + gpio.c + 1 + ..\driver\gpio.c + + + timer.c + 1 + ..\driver\timer.c + + + uart.c + 1 + ..\driver\uart.c + + + adc.c + 1 + ..\driver\adc.c + + + + + MesImplementations + + + servo.c + 1 + ..\implementation\servo.c + + + motoreducteur.c + 1 + ..\implementation\motoreducteur.c + + + rtc.c + 1 + ..\implementation\rtc.c + @@ -741,7 +781,7 @@ - .\Include + .\Include;..\driver;..\implementation @@ -800,6 +840,46 @@ 4 ..\driver\Lib_Com_Periph_2022.lib + + gpio.c + 1 + ..\driver\gpio.c + + + timer.c + 1 + ..\driver\timer.c + + + uart.c + 1 + ..\driver\uart.c + + + adc.c + 1 + ..\driver\adc.c + + + + + MesImplementations + + + servo.c + 1 + ..\implementation\servo.c + + + motoreducteur.c + 1 + ..\implementation\motoreducteur.c + + + rtc.c + 1 + ..\implementation\rtc.c + From 5ec32ced3e156e64c2e5058a645a60945f3f4756 Mon Sep 17 00:00:00 2001 From: Alix Chagot Date: Wed, 5 Apr 2023 08:25:25 +0200 Subject: [PATCH 2/2] Finishing the Rtc function --- implementation/rtc.c | 19 ++++++++-- implementation/rtc.h | 2 +- keilproject/Source/Principale.c | 9 +++-- keilproject/voilier.uvoptx | 67 ++++++++++++++++++++++++++++++++- 4 files changed, 89 insertions(+), 8 deletions(-) diff --git a/implementation/rtc.c b/implementation/rtc.c index 1e35d79..86e15b4 100644 --- a/implementation/rtc.c +++ b/implementation/rtc.c @@ -11,14 +11,27 @@ void MyRTC_Init() MyI2C_Init(I2C1, 15, IT_I2C_Err); } -void MyRTC_GetTime() +void MyRTC_GetTime(int* sec, int* min, int* hour, int* day, int* date, int* month, int* year) { MyI2C_RecSendData_Typedef data; char regCopy = 0; - data.SlaveAdress7bits = 0xC8; + data.SlaveAdress7bits = 0x68; data.Ptr_Data = ®Copy; data.Nb_Data = 1; - MyI2C_GetString(I2C1, 0x0, &data); + MyI2C_GetString(I2C1, 0x00, &data); + *sec = ((regCopy >> 4) & 0x07) * 10 + (regCopy & 0x0F); + MyI2C_GetString(I2C1, 0x01, &data); + *min = ((regCopy >> 4) & 0x07) * 10 + (regCopy & 0x0F); + MyI2C_GetString(I2C1, 0x02, &data); + *hour = 0; + MyI2C_GetString(I2C1, 0x03, &data); + *day = (regCopy & 0x07); + MyI2C_GetString(I2C1, 0x04, &data); + *date = ((regCopy >> 4) & 0x03) * 10 + (regCopy & 0x0F); + MyI2C_GetString(I2C1, 0x05, &data); + *month = ((regCopy >> 4) & 0x01) * 10 + (regCopy & 0x0F); + MyI2C_GetString(I2C1, 0x06, &data); + *year = ((regCopy >> 4) & 0xF0) * 10 + (regCopy & 0x0F) + 2000; } \ No newline at end of file diff --git a/implementation/rtc.h b/implementation/rtc.h index 2b4b45e..caaa6ba 100644 --- a/implementation/rtc.h +++ b/implementation/rtc.h @@ -4,6 +4,6 @@ #include "MyI2C.h" void MyRTC_Init(); -void MyRTC_GetTime(); +void MyRTC_GetTime(int* sec, int* min, int* hour, int* day, int* date, int* month, int* year); #endif diff --git a/keilproject/Source/Principale.c b/keilproject/Source/Principale.c index 10d4324..a0cfee4 100644 --- a/keilproject/Source/Principale.c +++ b/keilproject/Source/Principale.c @@ -1,16 +1,19 @@ #include "stm32f10x.h" #include "servo.h" #include "motoreducteur.h" +#include "rtc.h" int main (void) { MyServo_Init(); MyServo_ChangeAngle(179); - MyMotor_Init(); + //MyMotor_Init(); - MyMotor_ChangeSpeed(2000); - MyMotor_ChangeDirection(HORAIRE); + //MyMotor_ChangeSpeed(2000); + //MyMotor_ChangeDirection(HORAIRE); + MyRTC_Init(); + MyRTC_GetTime(); while(1){}; } diff --git a/keilproject/voilier.uvoptx b/keilproject/voilier.uvoptx index 8bffbb5..7292b15 100644 --- a/keilproject/voilier.uvoptx +++ b/keilproject/voilier.uvoptx @@ -442,7 +442,72 @@ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)) - + + + 0 + 0 + 24 + 1 +
134219864
+ 0 + 0 + 0 + 0 + 0 + 1 + C:\Users\alixc\Desktop\Scolarité\INSA\Cours\Microcontroleur\voilier-team-1\implementation\rtc.c + + \\cool_reel\../implementation/rtc.c\24 +
+ + 1 + 0 + 25 + 1 +
134219874
+ 0 + 0 + 0 + 0 + 0 + 1 + C:\Users\alixc\Desktop\Scolarité\INSA\Cours\Microcontroleur\voilier-team-1\implementation\rtc.c + + \\cool_reel\../implementation/rtc.c\25 +
+ + 2 + 0 + 16 + 1 +
134221212
+ 0 + 0 + 0 + 0 + 0 + 1 + C:\Users\alixc\Desktop\Scolarité\INSA\Cours\Microcontroleur\voilier-team-1\keilproject\Source\Principale.c + + \\cool_reel\Source/Principale.c\16 +
+ + 3 + 0 + 23 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + ..\implementation\rtc.c + + +
+
0