diff --git a/Drivers/Inc/CAP_voilier.h b/Drivers/Inc/CAP_voilier.h new file mode 100644 index 0000000..8daad21 --- /dev/null +++ b/Drivers/Inc/CAP_voilier.h @@ -0,0 +1,9 @@ +#ifndef CAP_voilier_H +#define CAP_voilier_H + + +void My_cap(void); +void Madirection_IT (void); + + +#endif diff --git a/Drivers/Inc/UART.h b/Drivers/Inc/UART.h new file mode 100644 index 0000000..7a2fdcc --- /dev/null +++ b/Drivers/Inc/UART.h @@ -0,0 +1,10 @@ +#ifndef MYUART_H +#define MYUART_H +#include "stm32f10x.h" + +void MyUART_init(void); +void UART_send(char data); +void MyUART_ActiveIT(char Prio, void (*IT_function)(void)); +char UART_receive(void); + +#endif diff --git a/Drivers/Src/TIMER.c b/Drivers/Src/TIMER.c index 39e4235..d146651 100644 --- a/Drivers/Src/TIMER.c +++ b/Drivers/Src/TIMER.c @@ -10,6 +10,7 @@ void MyTimer_Base_Init ( MyTimer_Struct_TypeDef * Timer) if(Timer->Timer==TIM1) { RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; + Timer->Timer->BDTR|=TIM_BDTR_MOE; } else if (Timer->Timer==TIM2) { @@ -112,6 +113,7 @@ void MyTimer_ActiveIT (TIM_TypeDef * Timer, char Prio, void (*IT_function)(void) NVIC->ISER[0] |= 0x01<IP[num_tim] |= Prio << 4; // On précise la priorité qu'on souhaite lui donner + } void init_encoder_timer(TIM_TypeDef * Timer) //voir page 391 @@ -154,4 +156,4 @@ void TIM1_UP_IRQHandler (void) (*tim_ptr1_func)(); } TIM1->SR &= ~(1<<0) ; -} \ No newline at end of file +} diff --git a/Drivers/Src/UART.c b/Drivers/Src/UART.c new file mode 100644 index 0000000..26badb4 --- /dev/null +++ b/Drivers/Src/UART.c @@ -0,0 +1,65 @@ +#include "UART.h" +#include "GPIO.h" + +void (*uart_rx_ptr_func)(void); + +void MyUART_init(void) // que pour du 9600 bauds +{ + MyGPIO_Struct_TypeDef RX_pin; + MyGPIO_Struct_TypeDef TX_pin; + + RX_pin.GPIO = GPIOA; + RX_pin.GPIO_Conf = In_Floating; + RX_pin.GPIO_Pin = 10; + + TX_pin.GPIO = GPIOA; + TX_pin.GPIO_Conf = AltOut_Ppull; + TX_pin.GPIO_Pin = 9; + + MyGPIO_Init (&RX_pin); + MyGPIO_Init (&TX_pin); + + RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // validation horloge USART1 + USART1->CR1 |= USART_CR1_UE; // Activation de l'USART + USART1->CR1 &= ~USART_CR1_M; // Choix d'une taille de 8 bits de données + USART1->CR2 &= USART_CR2_STOP; // Choix d'un seul bit de stop + USART1->BRR |= 468 << 4; // Fixe le baud rate à 9600bps //valeurs trouvé p804 + USART1->BRR |= 75; // Fixe le baud rate à 9600bps + USART1->CR1 |= USART_CR1_RE; + USART1->CR1 |= USART_CR1_TE; +} + +void UART_send(char data) +{ + while(!(USART1->SR & USART_SR_TXE)) // Tant que le buffer d'envoi n'est pas vide, on n'envoie pas plus de données + { + } + USART1->DR = data; // Ecriture de la donnée dans le registre DR +} + +void MyUART_ActiveIT(char Prio, void (*IT_function)(void)) +{ + USART1->CR1 |= USART_CR1_RXNEIE; // On autorise l'interruption sur réception de l'UART + uart_rx_ptr_func=IT_function; + NVIC->ISER[1] |= 0x01<<(USART1_IRQn%32); // On précise quelle interruption on souhaite activé + NVIC->IP[USART1_IRQn] |= Prio << 4; // On précise la priorité qu'on souhaite lui donner +} + +void USART1_IRQHandler() +{ + if (USART1->SR & USART_SR_RXNE) + { + USART1->SR &= ~USART_SR_RXNE; // On abaisse le flag d'interruption + if(uart_rx_ptr_func!=0) + { + (*uart_rx_ptr_func)(); + } + } +} + +char UART_receive() +{ + return USART1->DR; // on recupere dans DR +} + + diff --git a/Projet_DevDrivers/Sources/CAP_voilier.c b/Projet_DevDrivers/Sources/CAP_voilier.c new file mode 100644 index 0000000..19c2313 --- /dev/null +++ b/Projet_DevDrivers/Sources/CAP_voilier.c @@ -0,0 +1,48 @@ +#include "UART.h" +#include "TIMER.h" +#include "GPIO.h" + +MyTimer_Struct_TypeDef timer1; +void Madirection_IT (void); +signed char direction ; +int duty_cap ; +MyGPIO_Struct_TypeDef PA9; +MyGPIO_Struct_TypeDef PB1; + + +void My_cap(void) +{ + PA9.GPIO=GPIOA; + PA9.GPIO_Conf=AltOut_Ppull; + PA9.GPIO_Pin=9; + MyGPIO_Init(&PA9); + PB1.GPIO=GPIOB; + PB1.GPIO_Conf=Out_Ppull; + PB1.GPIO_Pin=1; + MyGPIO_Init(&PB1); + + timer1.Timer=TIM1; + timer1.ARR=20000; //pour avoir 20Khz + timer1.PSC=3600; + MyTimer_Base_Init(&timer1); + MyTimer_Base_Start(timer1.Timer); + MyPWM_init(timer1.Timer,2); + MyUART_init(); + MyUART_ActiveIT(2,&Madirection_IT); + +} + +void Madirection_IT (void) +{ + direction = UART_receive(); + if( direction <0 ) + { + MyGPIO_Set(GPIOB,1); + }else + { + MyGPIO_Reset(GPIOB,1); + } + + duty_cap=(20000*(int8_t) direction)/100 ; + MyPWM_Duty(timer1.Timer,2, duty_cap ); +} diff --git a/Projet_DevDrivers/Sources/Principal.c b/Projet_DevDrivers/Sources/Principal.c index 32998c1..2684bf7 100644 --- a/Projet_DevDrivers/Sources/Principal.c +++ b/Projet_DevDrivers/Sources/Principal.c @@ -3,13 +3,14 @@ #include "TIMER.h" #include "MyI2C.h" #include "MySPI.h" -#include "Rouli.h" +#include "Rouli.h" +#include "CAP_voilier.h" #include void Mafonction_IT (void); MyGPIO_Struct_TypeDef PA5; -MyGPIO_Struct_TypeDef PC13; +MyGPIO_Struct_TypeDef PB0; MyTimer_Struct_TypeDef timer2,timer3; //PA5 LED //PC13 Bouton @@ -33,10 +34,15 @@ int main ( void ) MyTimer_Base_Init(&timer2); MyTimer_ActiveIT(timer2.Timer,1, &Mafonction_IT); MyTimer_Base_Start(timer2.Timer); + + PB0.GPIO=GPIOB; + PB0.GPIO_Conf=AltOut_Ppull; + PB0.GPIO_Pin=0; + MyGPIO_Init(&PB0); timer3.Timer=TIM3; - timer3.ARR=7200; //pour avoir 100ms - timer3.PSC=1000; + timer3.ARR=14400; //pour avoir 20ms + timer3.PSC=100; MyTimer_Base_Init(&timer3); //MyTimer_ActiveIT(timer3.Timer,2, &Mafonction_IT); MyTimer_Base_Start(timer3.Timer); @@ -55,18 +61,7 @@ int main ( void ) while(1) { rouli_GetAccel(&mesures); - if(timer2.Timer->SR&=0x04) - { - - if((mesures.gY <= (-0.7)) || (mesures.gY >= 0.7)) - { - MyPWM_Duty(timer3.Timer,3,71);//0.985ms - test = test+1; - } - } - - - + My_cap(); } return 0; } @@ -75,5 +70,11 @@ int main ( void ) void Mafonction_IT (void) { - MyGPIO_Toggle(PA5.GPIO,5); + if((mesures.gY <= (-0.7)) || (mesures.gY >= 0.7)) + { + MyPWM_Duty(timer3.Timer,3,720);//0.985ms + test = test+1; + + } + } diff --git a/Projet_DevDrivers/TP1.uvoptx b/Projet_DevDrivers/TP1.uvoptx index 4d8876f..2355316 100644 --- a/Projet_DevDrivers/TP1.uvoptx +++ b/Projet_DevDrivers/TP1.uvoptx @@ -125,7 +125,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=-1,-1,-1,-1,0)(120=733,260,1154,687,0)(121=-1,-1,-1,-1,0)(122=1345,565,1766,992,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=-1,-1,-1,-1,0)(131=1302,9,1896,760,1)(132=-1,-1,-1,-1,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)(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=-1,-1,-1,-1,0)(120=733,260,1154,687,0)(121=667,158,1088,585,0)(122=1345,565,1766,992,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=1141,158,1735,909,0)(131=1302,9,1896,760,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=715,50,1163,464,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 @@ -139,6 +139,31 @@ + + + 0 + 1 + test + + + 1 + 1 + duty_cap + + + 2 + 1 + direction + + + + + 1 + 0 + 0x20000018 + 0 + + 0 @@ -147,7 +172,7 @@ 1 1 0 - 0 + 1 0 0 1 @@ -159,7 +184,7 @@ 0 0 0 - 0 + 1 0 0 0 @@ -184,8 +209,8 @@ 0 - ((PORTA & 0x00000020) >> 5 & 0x20) >> 5 - FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028504F5254412026203078303030303030323029203E3E2035000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F170000000000000000000000000000000000000090020008 + ((porta & 0x00000200) >> 9 & 0x200) >> 9 + 00800000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274612026203078303030303032303029203E3E2039000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F170000000000000000000000000000000000000004010008 @@ -312,7 +337,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=900,708,1321,1113,0)(121=1464,713,1885,1118,1)(122=1281,393,1702,798,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=-1,-1,-1,-1,0)(131=783,105,1377,799,1)(132=1326,11,1920,705,1)(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=-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=692,211,912,671,1)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1499,644,1920,1049,0)(121=1391,503,1812,908,1)(122=950,270,1371,675,1)(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=-1,-1,-1,-1,0)(131=1215,466,1809,1160,0)(132=1326,108,1920,802,1)(133=-1,-1,-1,-1,0)(160=972,135,1420,549,1)(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 @@ -335,7 +360,40 @@ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)) - + + + 0 + 0 + 33 + 0 +
134218882
+ 0 + 0 + 0 + 0 + 0 + 1 + .\Sources\CAP_voilier.c + + \\TP1\Sources/CAP_voilier.c\33 +
+ + 1 + 0 + 50 + 0 +
134221314
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Drivers\Src\UART.c + + \\TP1\../Drivers/Src/UART.c\50 +
+
0 @@ -364,7 +422,7 @@ 1 1 0 - 0 + 1 0 0 1 @@ -486,6 +544,42 @@ 0 0 + + 1 + 7 + 5 + 0 + 0 + 0 + ..\Drivers\Inc\UART.h + UART.h + 0 + 0 + + + 1 + 8 + 1 + 1 + 0 + 0 + ..\Drivers\Src\UART.c + UART.c + 0 + 0 + + + 1 + 9 + 1 + 0 + 0 + 0 + .\Sources\CAP_voilier.c + CAP_voilier.c + 0 + 0 + diff --git a/Projet_DevDrivers/TP1.uvprojx b/Projet_DevDrivers/TP1.uvprojx index 27ae51e..37159e0 100644 --- a/Projet_DevDrivers/TP1.uvprojx +++ b/Projet_DevDrivers/TP1.uvprojx @@ -413,6 +413,21 @@ 1 .\Sources\Rouli.c + + UART.h + 5 + ..\Drivers\Inc\UART.h + + + UART.c + 1 + ..\Drivers\Src\UART.c + + + CAP_voilier.c + 1 + .\Sources\CAP_voilier.c + @@ -830,6 +845,21 @@ 1 .\Sources\Rouli.c + + UART.h + 5 + ..\Drivers\Inc\UART.h + + + UART.c + 1 + ..\Drivers\Src\UART.c + + + CAP_voilier.c + 1 + .\Sources\CAP_voilier.c +