Merge branch 'master' of https://git.etud.insa-toulouse.fr/guldenst/projet_voilier
This commit is contained in:
commit
ae29b5de4a
18 changed files with 269 additions and 900 deletions
|
@ -568,42 +568,6 @@
|
|||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>2</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Services\Chrono.c</PathWithFileName>
|
||||
<FilenameWithoutPath>Chrono.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>3</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Services\alimentation.c</PathWithFileName>
|
||||
<FilenameWithoutPath>alimentation.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Services\accelerometer.c</PathWithFileName>
|
||||
<FilenameWithoutPath>accelerometer.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>5</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
|
@ -614,19 +578,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Services\emetteur_rf.c</PathWithFileName>
|
||||
<FilenameWithoutPath>emetteur_rf.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>7</FileNumber>
|
||||
<FileNumber>3</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -638,7 +590,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -650,7 +602,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileNumber>5</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -662,7 +614,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -672,6 +624,42 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>7</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Services\Accelerometer.c</PathWithFileName>
|
||||
<FilenameWithoutPath>Accelerometer.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Services\Alimentation.c</PathWithFileName>
|
||||
<FilenameWithoutPath>Alimentation.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Services\RFOutput.c</PathWithFileName>
|
||||
<FilenameWithoutPath>RFOutput.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
|
@ -680,18 +668,6 @@
|
|||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\MyDrivers\MyTimer.c</PathWithFileName>
|
||||
<FilenameWithoutPath>MyTimer.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
|
@ -702,7 +678,7 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -714,7 +690,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -726,7 +702,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -738,7 +714,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -750,7 +726,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -762,7 +738,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -774,7 +750,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -794,7 +770,7 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -814,7 +790,7 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -834,7 +810,7 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileType>2</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
|
|
@ -185,6 +185,7 @@
|
|||
<uocXRam>0</uocXRam>
|
||||
<RvdsVP>0</RvdsVP>
|
||||
<RvdsMve>0</RvdsMve>
|
||||
<RvdsCdeCp>0</RvdsCdeCp>
|
||||
<hadIRAM2>0</hadIRAM2>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<StupSel>8</StupSel>
|
||||
|
@ -351,7 +352,7 @@
|
|||
<NoWarn>0</NoWarn>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<useXO>0</useXO>
|
||||
<uClangAs>0</uClangAs>
|
||||
<ClangAsOpt>4</ClangAsOpt>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
|
@ -392,31 +393,11 @@
|
|||
<Group>
|
||||
<GroupName>User Services</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>Chrono.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\Chrono.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>alimentation.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\alimentation.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>accelerometer.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\accelerometer.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>DcMotor.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\DcMotor.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>emetteur_rf.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\emetteur_rf.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>IncrEncoder.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
|
@ -437,17 +418,25 @@
|
|||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\Servo.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Accelerometer.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\Accelerometer.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Alimentation.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\Alimentation.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>RFOutput.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\RFOutput.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>MyDrivers</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>MyTimer.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\MyDrivers\MyTimer.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Drivers/STM32f1xx_LL_Driver</GroupName>
|
||||
|
@ -703,6 +692,7 @@
|
|||
<uocXRam>0</uocXRam>
|
||||
<RvdsVP>0</RvdsVP>
|
||||
<RvdsMve>0</RvdsMve>
|
||||
<RvdsCdeCp>0</RvdsCdeCp>
|
||||
<hadIRAM2>0</hadIRAM2>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<StupSel>8</StupSel>
|
||||
|
@ -869,7 +859,7 @@
|
|||
<NoWarn>0</NoWarn>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<useXO>0</useXO>
|
||||
<uClangAs>0</uClangAs>
|
||||
<ClangAsOpt>4</ClangAsOpt>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
|
@ -910,31 +900,11 @@
|
|||
<Group>
|
||||
<GroupName>User Services</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>Chrono.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\Chrono.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>alimentation.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\alimentation.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>accelerometer.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\accelerometer.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>DcMotor.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\DcMotor.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>emetteur_rf.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\emetteur_rf.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>IncrEncoder.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
|
@ -955,17 +925,25 @@
|
|||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\Servo.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Accelerometer.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\Accelerometer.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Alimentation.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\Alimentation.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>RFOutput.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Services\RFOutput.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>MyDrivers</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>MyTimer.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\MyDrivers\MyTimer.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Drivers/STM32f1xx_LL_Driver</GroupName>
|
||||
|
@ -1058,4 +1036,19 @@
|
|||
<files/>
|
||||
</RTE>
|
||||
|
||||
<LayerInfo>
|
||||
<Layers>
|
||||
<Layer>
|
||||
<LayName><Project Info></LayName>
|
||||
<LayDesc></LayDesc>
|
||||
<LayUrl></LayUrl>
|
||||
<LayKeys></LayKeys>
|
||||
<LayCat></LayCat>
|
||||
<LayLic></LayLic>
|
||||
<LayTarg>0</LayTarg>
|
||||
<LayPrjMark>1</LayPrjMark>
|
||||
</Layer>
|
||||
</Layers>
|
||||
</LayerInfo>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -1,182 +0,0 @@
|
|||
// TOUT A FAIRE !! //
|
||||
|
||||
/*
|
||||
indispensable pour pouvoir adresser les registres des périphériques.
|
||||
Rem : OBLIGATION d'utiliser les définitions utiles contenues dans ce fichier (ex : TIM_CR1_CEN, RCC_APB1ENR_TIM2EN ...)
|
||||
pour une meilleure lisibilité du code.
|
||||
|
||||
Pour les masques, utiliser également les définitions proposée
|
||||
Rappel : pour mettre à 1 , reg = reg | Mask (ou Mask est le représente le ou les bits à positionner à 1)
|
||||
pour mettre à 0 , reg = reg&~ Mask (ou Mask est le représente le ou les bits à positionner à 0)
|
||||
|
||||
*/
|
||||
|
||||
#include "MyTimer.h"
|
||||
#include "stm32f1xx_ll_bus.h" // Pour l'activation des horloges
|
||||
#include "stm32f1xx_ll_tim.h"
|
||||
|
||||
|
||||
// variable pointeur de fonction permettant de mémoriser le callback à appeler depuis
|
||||
// le handler d'IT
|
||||
void (*Ptr_ItFct_TIM1)(void);
|
||||
void (*Ptr_ItFct_TIM2)(void);
|
||||
void (*Ptr_ItFct_TIM3)(void);
|
||||
void (*Ptr_ItFct_TIM4)(void);
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Active l'horloge et règle l'ARR et le PSC du timer visé
|
||||
* @note Fonction à lancer avant toute autre. Le timer n'est pas encore lancé (voir MyTimerStart)
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* int Arr : valeur à placer dans ARR
|
||||
* int Psc : valeur à placer dans PSC
|
||||
* @retval None
|
||||
*/
|
||||
void MyTimer_Conf(TIM_TypeDef * Timer,int Arr, int Psc)
|
||||
{
|
||||
LL_TIM_InitTypeDef My_LL_Tim_Init_Struct;
|
||||
|
||||
// Validation horloge locale
|
||||
if (Timer==TIM1) LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM1);
|
||||
else if (Timer==TIM2) LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);
|
||||
else if (Timer==TIM3) LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3);
|
||||
else LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM4);
|
||||
|
||||
// chargement structure Arr, Psc, Up Count
|
||||
My_LL_Tim_Init_Struct.Autoreload=Arr;
|
||||
My_LL_Tim_Init_Struct.Prescaler=Psc;
|
||||
My_LL_Tim_Init_Struct.ClockDivision=LL_TIM_CLOCKDIVISION_DIV1;
|
||||
My_LL_Tim_Init_Struct.CounterMode=LL_TIM_COUNTERMODE_UP;
|
||||
My_LL_Tim_Init_Struct.RepetitionCounter=0;
|
||||
|
||||
LL_TIM_Init(Timer,&My_LL_Tim_Init_Struct);
|
||||
|
||||
|
||||
// Blocage IT
|
||||
LL_TIM_DisableIT_UPDATE(Timer);
|
||||
|
||||
|
||||
// Blocage Timer
|
||||
LL_TIM_DisableCounter(Timer);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Démarre le timer considéré
|
||||
* @note
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* @retval None
|
||||
*/
|
||||
void MyTimer_Start(TIM_TypeDef * Timer)
|
||||
{
|
||||
LL_TIM_EnableCounter(Timer);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Arrêt le timer considéré
|
||||
* @note
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* @retval None
|
||||
*/
|
||||
void MyTimer_Stop(TIM_TypeDef * Timer)
|
||||
{
|
||||
LL_TIM_DisableCounter(Timer);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Configure le Timer considéré en interruption sur débordement.
|
||||
* @note A ce stade, les interruptions ne sont pas validés (voir MyTimer_IT_Enable )
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* void (*IT_function) (void) : nom (adresse) de la fonction à lancer sur interruption
|
||||
* int Prio : priorité associée à l'interruption
|
||||
* @retval None
|
||||
*/
|
||||
void MyTimer_IT_Conf(TIM_TypeDef * Timer, void (*IT_function) (void),int Prio)
|
||||
{
|
||||
// affectation de la fonction
|
||||
if (Timer==TIM1) Ptr_ItFct_TIM1=IT_function;
|
||||
else if (Timer==TIM2) Ptr_ItFct_TIM2=IT_function;
|
||||
else if (Timer==TIM3) Ptr_ItFct_TIM3=IT_function;
|
||||
else Ptr_ItFct_TIM4=IT_function;
|
||||
|
||||
|
||||
// Blocage IT (il faudra la débloquer voir fct suivante)
|
||||
LL_TIM_DisableIT_UPDATE(Timer);
|
||||
|
||||
// validation du canal NVIC
|
||||
IRQn_Type TIM_irq;
|
||||
|
||||
if (Timer==TIM1) TIM_irq=TIM1_UP_IRQn;
|
||||
else if (Timer==TIM2) TIM_irq=TIM2_IRQn;
|
||||
else if (Timer==TIM3) TIM_irq=TIM3_IRQn;
|
||||
else TIM_irq=TIM4_IRQn;
|
||||
|
||||
NVIC_SetPriority(TIM_irq, Prio);
|
||||
NVIC_EnableIRQ(TIM_irq);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Autorise les interruptions
|
||||
* @note
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* @retval None
|
||||
*/
|
||||
void MyTimer_IT_Enable(TIM_TypeDef * Timer)
|
||||
{
|
||||
LL_TIM_EnableIT_UPDATE(Timer);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Interdit les interruptions
|
||||
* @note
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* @retval None
|
||||
*/
|
||||
void MyTimer_IT_Disable(TIM_TypeDef * Timer)
|
||||
{
|
||||
LL_TIM_DisableIT_UPDATE(Timer);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
============ LES INTERRUPTIONS =================================
|
||||
|
||||
*/
|
||||
|
||||
void TIM1_UP_IRQHandler(void)
|
||||
{
|
||||
// rabaisser le flag d'IT
|
||||
LL_TIM_ClearFlag_UPDATE(TIM1);
|
||||
(*Ptr_ItFct_TIM1)();
|
||||
}
|
||||
|
||||
void TIM2_IRQHandler(void)
|
||||
{
|
||||
// rabaisser le flag d'IT
|
||||
LL_TIM_ClearFlag_UPDATE(TIM2);
|
||||
(*Ptr_ItFct_TIM2)();
|
||||
}
|
||||
|
||||
void TIM3_IRQHandler(void)
|
||||
{
|
||||
// rabaisser le flag d'IT
|
||||
LL_TIM_ClearFlag_UPDATE(TIM3);
|
||||
(*Ptr_ItFct_TIM3)();
|
||||
}
|
||||
|
||||
void TIM4_IRQHandler(void)
|
||||
{
|
||||
// rabaisser le flag d'IT
|
||||
LL_TIM_ClearFlag_UPDATE(TIM4);
|
||||
(*Ptr_ItFct_TIM4)();
|
||||
}
|
|
@ -1,70 +0,0 @@
|
|||
// RIEN A MODIFIER //
|
||||
|
||||
#ifndef MY_TIMER_H
|
||||
#define MY_TIMER_H
|
||||
|
||||
/*
|
||||
Driver pour Timer 1 à 4 du STM32F103RB
|
||||
|
||||
*/
|
||||
|
||||
#include "stm32f103xb.h"
|
||||
|
||||
/**
|
||||
* @brief Active l'horloge et règle l'ARR et le PSC du timer visé
|
||||
* @note Fonction à lancer avant toute autre. Le timer n'est pas encore lancé (voir MyTimerStart)
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* int Arr : valeur à placer dans ARR
|
||||
* int Psc : valeur à placer dans PSC
|
||||
* @retval None
|
||||
*/
|
||||
void MyTimer_Conf(TIM_TypeDef * Timer,int Arr, int Psc);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Démarre le timer considéré
|
||||
* @note
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* @retval None
|
||||
*/
|
||||
void MyTimer_Start(TIM_TypeDef * Timer);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Arrêt le timer considéré
|
||||
* @note
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* @retval None
|
||||
*/
|
||||
void MyTimer_Stop(TIM_TypeDef * Timer);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Configure le Timer considéré en interruption sur débordement.
|
||||
* @note A ce stade, les interruptions ne sont pas validés (voir MyTimer_IT_Enable )
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* void (*IT_function) (void) : nom (adresse) de la fonction à lancer sur interruption
|
||||
* int Prio : priorité associée à l'interruption
|
||||
* @retval None
|
||||
*/
|
||||
void MyTimer_IT_Conf(TIM_TypeDef * Timer, void (*IT_function) (void),int Prio);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Autorise les interruptions
|
||||
* @note
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* @retval None
|
||||
*/
|
||||
void MyTimer_IT_Enable(TIM_TypeDef * Timer);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Interdit les interruptions
|
||||
* @note
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* @retval None
|
||||
*/
|
||||
void MyTimer_IT_Disable(TIM_TypeDef * Timer);
|
||||
|
||||
#endif
|
|
@ -1,67 +0,0 @@
|
|||
#include "MyUart.h"
|
||||
#include "stm32f1xx_ll_bus.h"
|
||||
#include "stm32f1xx_ll_usart.h"
|
||||
#include "stm32f1xx_ll_gpio.h"
|
||||
|
||||
void MyUart_Conf(USART_TypeDef * uart_port, int baudrate){
|
||||
|
||||
LL_USART_InitTypeDef My_LL_Usart_Init_Struct;
|
||||
|
||||
if (uart_port==USART1) {
|
||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);
|
||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
|
||||
LL_GPIO_InitTypeDef tx;
|
||||
tx.Mode = LL_GPIO_MODE_ALTERNATE;
|
||||
tx.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||
tx.Speed = LL_GPIO_SPEED_FREQ_LOW;
|
||||
tx.Pin = LL_GPIO_PIN_9;
|
||||
LL_GPIO_Init(GPIOA, &tx);
|
||||
}
|
||||
if (uart_port==USART2){
|
||||
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);
|
||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
|
||||
LL_GPIO_InitTypeDef tx;
|
||||
tx.Mode = LL_GPIO_MODE_ALTERNATE;
|
||||
tx.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||
tx.Pull = LL_GPIO_PULL_UP;
|
||||
tx.Speed = LL_GPIO_SPEED_FREQ_LOW;
|
||||
tx.Pin = LL_GPIO_PIN_2;
|
||||
LL_GPIO_Init(GPIOA, &tx);
|
||||
}
|
||||
if (uart_port==USART3){
|
||||
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3);
|
||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
|
||||
LL_GPIO_InitTypeDef tx;
|
||||
tx.Mode = LL_GPIO_MODE_ALTERNATE;
|
||||
tx.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||
tx.Pull = LL_GPIO_PULL_UP;
|
||||
tx.Speed = LL_GPIO_SPEED_FREQ_LOW;
|
||||
tx.Pin = LL_GPIO_PIN_10;
|
||||
LL_GPIO_Init(GPIOC, &tx);
|
||||
}
|
||||
|
||||
My_LL_Usart_Init_Struct.BaudRate = baudrate;
|
||||
My_LL_Usart_Init_Struct.DataWidth = LL_USART_DATAWIDTH_8B ;
|
||||
My_LL_Usart_Init_Struct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
|
||||
My_LL_Usart_Init_Struct.OverSampling = LL_USART_OVERSAMPLING_16;
|
||||
My_LL_Usart_Init_Struct.Parity = LL_USART_PARITY_NONE;
|
||||
My_LL_Usart_Init_Struct.StopBits = LL_USART_STOPBITS_1;
|
||||
My_LL_Usart_Init_Struct.TransferDirection = LL_USART_DIRECTION_TX_RX ;
|
||||
|
||||
LL_USART_Init(uart_port,&My_LL_Usart_Init_Struct);
|
||||
LL_USART_Enable(uart_port);
|
||||
|
||||
/*int periph_speed;
|
||||
if (uart_port==USART1) periph_speed = 36000000;
|
||||
if (uart_port==USART2) periph_speed = 72000000;
|
||||
if (uart_port==USART3) periph_speed = 72000000;
|
||||
|
||||
LL_USART_SetBaudRate(uart_port, periph_speed, baudrate);
|
||||
*/}
|
||||
|
||||
void MyUart_send_bytes(USART_TypeDef * uart_port,char* buf, int len){
|
||||
for(int i = 0; i < len; i++){
|
||||
LL_USART_TransmitData8(uart_port, buf[i]);
|
||||
while(!LL_USART_IsActiveFlag_TXE(uart_port));
|
||||
}
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
#ifndef MYUART_H
|
||||
#define MYUART_H
|
||||
|
||||
#include "stm32f1xx_ll_usart.h"
|
||||
|
||||
void MyUart_Conf(USART_TypeDef * uart_port, int baudrate);
|
||||
|
||||
void MyUart_send_bytes(USART_TypeDef * uart_port,char* buf, int len);
|
||||
|
||||
#endif
|
|
@ -1,9 +1,6 @@
|
|||
#include "accelerometer.h"
|
||||
double x;
|
||||
double y;
|
||||
double angle;
|
||||
#include "Accelerometer.h"
|
||||
|
||||
void accelero_init(void){
|
||||
void ACCELEROMETER_Init(void){
|
||||
RCC -> CFGR |= (0x1<<15);
|
||||
RCC-> CFGR &= ~ (0x1<<14);
|
||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1);
|
||||
|
@ -24,7 +21,6 @@ void accelero_init(void){
|
|||
LL_GPIO_Init(GPIOA, &pc1);
|
||||
|
||||
|
||||
|
||||
adc.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;
|
||||
adc.SequencersScanMode = LL_ADC_SEQ_SCAN_DISABLE;
|
||||
LL_ADC_Init(ADC1, &adc);
|
||||
|
@ -35,55 +31,37 @@ void accelero_init(void){
|
|||
adcReg.ContinuousMode = LL_ADC_REG_CONV_SINGLE;
|
||||
adcReg.DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE;
|
||||
|
||||
|
||||
LL_ADC_REG_Init(ADC1, &adcReg);
|
||||
|
||||
/*LL_ADC_SetChannelSamplingTime(ADC2, LL_ADC_CHANNEL_10, LL_ADC_SAMPLINGTIME_1CYCLE_5);
|
||||
LL_ADC_SetChannelSamplingTime(ADC2, LL_ADC_CHANNEL_11, LL_ADC_SAMPLINGTIME_1CYCLE_5);
|
||||
*/
|
||||
|
||||
LL_ADC_Enable(ADC1);
|
||||
|
||||
//LL_ADC_EnableIT_EOS(ADC1);
|
||||
//wait 0,2 µs, calibration is advised
|
||||
//LL_ADC_StartCalibration(ADC1);
|
||||
}
|
||||
|
||||
|
||||
double accelero_get_x(void){
|
||||
double ACCELEROMETER_GetX(void){
|
||||
LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_1);
|
||||
LL_ADC_REG_StartConversionSWStart(ADC1);
|
||||
while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1){
|
||||
//__asm__"nope";
|
||||
}
|
||||
while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1);
|
||||
double x= LL_ADC_REG_ReadConversionData12(ADC1);
|
||||
return x;
|
||||
}
|
||||
|
||||
double accelero_get_y(void){
|
||||
double ACCELEROMETER_GetY(void){
|
||||
LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_11);
|
||||
LL_ADC_REG_StartConversionSWStart(ADC1);
|
||||
while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1){
|
||||
//__asm__"nope";
|
||||
}
|
||||
while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1);
|
||||
double y = LL_ADC_REG_ReadConversionData12(ADC1);
|
||||
return y;
|
||||
}
|
||||
|
||||
|
||||
int accelero_angle_bon(void){
|
||||
x = accelero_get_x();
|
||||
y = accelero_get_y();
|
||||
angle = x/y;
|
||||
int ACCELEROMETER_AngleGood(void){
|
||||
double x = ACCELEROMETER_GetX();
|
||||
double y = ACCELEROMETER_GetY();
|
||||
double angle = x/y;
|
||||
|
||||
if (angle>tan(0.698132)){
|
||||
return 0;
|
||||
}else {
|
||||
return 1;
|
||||
}
|
||||
|
||||
//le flag EOC n'est jamais mis à un ....
|
||||
// Soit la conversion est mal faite soit on n'utilise pas bien la simulation
|
||||
//soit on n'utilise pas bien isActiveFlag dans la boucle
|
||||
}
|
||||
|
|
@ -18,13 +18,13 @@
|
|||
Les fonctions qui gèrent les IO (ajout par rapport à l'activité 1)
|
||||
=======================================================================================*/
|
||||
|
||||
void accelero_init(void);
|
||||
void ACCELEROMETER_Init(void);
|
||||
|
||||
double accelero_get_x(void);
|
||||
double ACCELEROMETER_GetX(void);
|
||||
|
||||
double accelero_get_y(void);
|
||||
double ACCELEROMETER_GetY(void);
|
||||
|
||||
int accelero_angle_bon(void);
|
||||
int ACCELEROMETER_AngleGood(void);
|
||||
|
||||
|
||||
#endif
|
53
keil_project/Services/Alimentation.c
Normal file
53
keil_project/Services/Alimentation.c
Normal file
|
@ -0,0 +1,53 @@
|
|||
#include "Alimentation.h"
|
||||
|
||||
|
||||
void ALIMENTATION_Init(void){
|
||||
RCC -> CFGR |= (0x1<<15);
|
||||
RCC-> CFGR &= ~ (0x1<<14);
|
||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1);
|
||||
LL_APB1_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
|
||||
|
||||
LL_GPIO_InitTypeDef pc2;
|
||||
LL_ADC_InitTypeDef adc;
|
||||
LL_ADC_REG_InitTypeDef adcReg;
|
||||
|
||||
LL_GPIO_StructInit(&pc2);
|
||||
pc2.Pin = LL_GPIO_PIN_0;
|
||||
pc2.Mode = LL_GPIO_MODE_ANALOG;
|
||||
LL_GPIO_Init(GPIOC, &pc2);
|
||||
|
||||
|
||||
adc.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;
|
||||
adc.SequencersScanMode = LL_ADC_SEQ_SCAN_DISABLE;
|
||||
LL_ADC_Init(ADC1, &adc);
|
||||
|
||||
adcReg.TriggerSource = LL_ADC_REG_TRIG_SOFTWARE ;
|
||||
adcReg.SequencerLength = LL_ADC_REG_SEQ_SCAN_DISABLE;
|
||||
adcReg.SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE;
|
||||
adcReg.ContinuousMode = LL_ADC_REG_CONV_SINGLE;
|
||||
adcReg.DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE;
|
||||
|
||||
|
||||
LL_ADC_REG_Init(ADC1, &adcReg);
|
||||
LL_ADC_Enable(ADC1);
|
||||
}
|
||||
|
||||
float ALIMENTATION_GetBatteryLevel(void){
|
||||
float u2;
|
||||
float battery_level;
|
||||
LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_12);
|
||||
LL_ADC_REG_StartConversionSWStart(ADC1);
|
||||
while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1);
|
||||
battery_level = LL_ADC_REG_ReadConversionData12(ADC1);
|
||||
u2 = (battery_level*3.3)/4095.0;
|
||||
float level = u2*13.0;
|
||||
return level;
|
||||
}
|
||||
|
||||
int ALIMENTATION_IsLevelEnough(void){
|
||||
if (ALIMENTATION_GetBatteryLevel()<(0.8*12)){
|
||||
return 0;
|
||||
}else{
|
||||
return 1;
|
||||
}
|
||||
}
|
|
@ -18,9 +18,9 @@
|
|||
Les fonctions qui gèrent les IO (ajout par rapport à l'activité 1)
|
||||
=======================================================================================*/
|
||||
|
||||
void alimentation_init(void);
|
||||
float get_battery_level(void);
|
||||
int is_level_enough(void);
|
||||
void ALIMENTATION_Init(void);
|
||||
float ALIMENTATION_GetBatteryLevel(void);
|
||||
int ALIMENTATION_IsLevelEnough(void);
|
||||
|
||||
|
||||
#endif
|
|
@ -1,182 +0,0 @@
|
|||
// A COMPLETER
|
||||
|
||||
/*
|
||||
Service permettant de chornométrer jusqu'à 59mn 59s 99 1/100
|
||||
Utilise un timer au choix (TIMER1 à TIMER4).
|
||||
Utilise la lib MyTimers.h /.c
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "Chrono.h"
|
||||
#include "MyTimer.h"
|
||||
#include "stm32f1xx_ll_gpio.h"
|
||||
#include "stm32f1xx_ll_bus.h"
|
||||
|
||||
// variable privée de type Time qui mémorise la durée mesurée
|
||||
static Time Chrono_Time; // rem : static rend la visibilité de la variable Chrono_Time limitée à ce fichier
|
||||
|
||||
// variable privée qui mémorise pour le module le timer utilisé par le module
|
||||
static TIM_TypeDef * Chrono_Timer=TIM1; // init par défaut au cas où l'utilisateur ne lance pas Chrono_Conf avant toute autre fct.
|
||||
|
||||
// déclaration callback appelé toute les 10ms
|
||||
void Chrono_Task_10ms(void);
|
||||
|
||||
int running = 0;
|
||||
|
||||
/**
|
||||
* @brief Configure le chronomètre.
|
||||
* @note A lancer avant toute autre fonction.
|
||||
* @param Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* @retval None
|
||||
*/
|
||||
void Chrono_Conf(TIM_TypeDef * Timer)
|
||||
{
|
||||
// Reset Time
|
||||
Chrono_Time.Hund=0;
|
||||
Chrono_Time.Sec=0;
|
||||
Chrono_Time.Min=0;
|
||||
|
||||
// Fixation du Timer
|
||||
Chrono_Timer=Timer;
|
||||
|
||||
Chrono_Conf_io();
|
||||
// Réglage Timer pour un débordement à 10ms
|
||||
MyTimer_Conf(Chrono_Timer,999, 719);
|
||||
|
||||
// Réglage interruption du Timer avec callback : Chrono_Task_10ms()
|
||||
MyTimer_IT_Conf(Chrono_Timer, Chrono_Task_10ms,3);
|
||||
|
||||
// Validation IT
|
||||
MyTimer_IT_Enable(Chrono_Timer);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Démarre le chronomètre.
|
||||
* @note si la durée dépasse 59mn 59sec 99 Hund, elle est remise à zéro et repart
|
||||
* @param Aucun
|
||||
* @retval Aucun
|
||||
*/
|
||||
void Chrono_Start(void)
|
||||
{
|
||||
MyTimer_Start(Chrono_Timer);
|
||||
running = 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Arrête le chronomètre.
|
||||
* @note
|
||||
* @param Aucun
|
||||
* @retval Aucun
|
||||
*/
|
||||
void Chrono_Stop(void)
|
||||
{
|
||||
MyTimer_Stop(Chrono_Timer);
|
||||
running = 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Remet le chronomètre à 0
|
||||
* @note
|
||||
* @param Aucun
|
||||
* @retval Aucun
|
||||
*/
|
||||
void Chrono_Reset(void)
|
||||
{
|
||||
// Arrêt Chrono
|
||||
MyTimer_Stop(Chrono_Timer);
|
||||
|
||||
// Reset Time
|
||||
Chrono_Time.Hund=0;
|
||||
Chrono_Time.Sec=0;
|
||||
Chrono_Time.Min=0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Renvoie l'adresse de la variable Time privée gérée dans le module Chrono.c
|
||||
* @note
|
||||
* @param Aucun
|
||||
* @retval adresse de la variable Time
|
||||
*/
|
||||
Time * Chrono_Read(void)
|
||||
{
|
||||
return &Chrono_Time;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief incrémente la variable privée Chron_Time modulo 60mn
|
||||
* @note
|
||||
* @param Aucun
|
||||
* @retval Aucun
|
||||
*/
|
||||
void Chrono_Task_10ms(void)
|
||||
{
|
||||
Chrono_Time.Hund++;
|
||||
if (Chrono_Time.Hund==100)
|
||||
{
|
||||
Chrono_Time.Sec++;
|
||||
Chrono_Time.Hund=0;
|
||||
}
|
||||
if (Chrono_Time.Sec==60)
|
||||
{
|
||||
Chrono_Time.Min++;
|
||||
Chrono_Time.Sec=0;
|
||||
}
|
||||
if (Chrono_Time.Min==60)
|
||||
{
|
||||
Chrono_Time.Hund=0;
|
||||
}
|
||||
if ( Chrono_Time.Sec % 2) {
|
||||
LL_GPIO_SetOutputPin(GPIOC,LL_GPIO_PIN_10);
|
||||
} else {
|
||||
LL_GPIO_ResetOutputPin(GPIOC,LL_GPIO_PIN_10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief configurer les 3 IO pour recevoir les 2 BP et la LED
|
||||
*/
|
||||
void Chrono_Conf_io(void) {
|
||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
|
||||
|
||||
LL_GPIO_InitTypeDef button_rouge_conf;
|
||||
button_rouge_conf.Mode = LL_GPIO_MODE_FLOATING;
|
||||
button_rouge_conf.Pin = LL_GPIO_PIN_8;
|
||||
LL_GPIO_Init(GPIOC, &button_rouge_conf);
|
||||
|
||||
|
||||
LL_GPIO_InitTypeDef button_bleu_conf;
|
||||
button_bleu_conf.Mode = LL_GPIO_MODE_FLOATING;
|
||||
button_bleu_conf.Pin = LL_GPIO_PIN_13;
|
||||
LL_GPIO_Init(GPIOC, &button_bleu_conf);
|
||||
|
||||
LL_GPIO_InitTypeDef led;
|
||||
led.Mode = LL_GPIO_MODE_OUTPUT;
|
||||
led.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
|
||||
led.Speed = LL_GPIO_SPEED_FREQ_LOW;
|
||||
led.Pin = LL_GPIO_PIN_10;
|
||||
LL_GPIO_Init(GPIOC, &led);
|
||||
}
|
||||
|
||||
void Chrono_Background(void){
|
||||
if(LL_GPIO_IsInputPinSet(GPIOC, LL_GPIO_PIN_8)) {
|
||||
if(running) {
|
||||
Chrono_Stop();
|
||||
} else {
|
||||
Chrono_Start();
|
||||
}
|
||||
}
|
||||
if(!(LL_GPIO_IsInputPinSet(GPIOC, LL_GPIO_PIN_13))) { // negative logic for blue button
|
||||
Chrono_Reset();
|
||||
}
|
||||
}
|
|
@ -1,107 +0,0 @@
|
|||
// RIEN A MODIFIER //
|
||||
|
||||
#ifndef CHRONO_H
|
||||
#define CHRONO_H
|
||||
|
||||
/*
|
||||
Service permettant de chornométrer jusqu'à 59mn 59s 99 1/100
|
||||
Utilise un timer au choix (TIMER1 à TIMER4).
|
||||
Utilise la lib MyTimers.h /.c
|
||||
*/
|
||||
|
||||
#include "stm32f103xb.h"
|
||||
|
||||
/* =====================================================================================
|
||||
Les fonctions qui gèrent les IO (ajout par rapport à l'activité 1)
|
||||
=======================================================================================*/
|
||||
|
||||
|
||||
#define PinStart LL_GPIO_PIN_8
|
||||
#define PinStop LL_GPIO_PIN_6
|
||||
// à compléter pour la pin reset du chronometre
|
||||
#define PinLED LL_GPIO_PIN_10
|
||||
#define GPIO_Pin GPIOC
|
||||
#define GPIO_LED GPIOC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief polle les 3 entrées et gènère les actions à faire
|
||||
* @note Fct à lancer en tâche de fond (non bloquante)
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
|
||||
void Chrono_Background(void);
|
||||
|
||||
//=======================================================================================//
|
||||
|
||||
|
||||
|
||||
|
||||
// Type de donnée utilisé dans le module
|
||||
|
||||
typedef struct {
|
||||
char Hund;
|
||||
char Sec;
|
||||
char Min;
|
||||
} Time;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Configure le chronomètre.
|
||||
* @note A lancer avant toute autre fonction.
|
||||
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||
* @retval None
|
||||
*/
|
||||
void Chrono_Conf(TIM_TypeDef * Timer);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Démarre le chronomètre.
|
||||
* @note si la durée dépasse 59mn 59sec 99 cent, elle est remise à zéro et repart
|
||||
* @param Aucun
|
||||
* @retval Aucun
|
||||
*/
|
||||
void Chrono_Start(void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Arrête le chronomètre.
|
||||
* @note
|
||||
* @param Aucun
|
||||
* @retval Aucun
|
||||
*/
|
||||
void Chrono_Stop(void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Remet le chronomètre à 0
|
||||
* @note
|
||||
* @param Aucun
|
||||
* @retval Aucun
|
||||
*/
|
||||
void Chrono_Reset(void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Renvoie l'adresse de la variable Time privée gérée dans le module Chrono.c
|
||||
* @note
|
||||
* @param Aucun
|
||||
* @retval adresse de la variable Time
|
||||
*/
|
||||
Time * Chrono_Read(void);
|
||||
|
||||
void Chrono_Conf_io(void);
|
||||
|
||||
void Chrono_Background(void);
|
||||
#endif
|
|
@ -1,9 +1,17 @@
|
|||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "IncrEncoder.h"
|
||||
#include "stm32f1xx_ll_gpio.h"
|
||||
#include "stm32f1xx_ll_bus.h"
|
||||
#include "stm32f1xx_ll_exti.h"
|
||||
#include "stm32f1xx_ll_tim.h"
|
||||
|
||||
#define RESOLUTION 1
|
||||
#define ANGLE_DEBUT 45
|
||||
#define INCR_ENCODER_MID_VALUE 719
|
||||
|
||||
|
||||
int index_passed = 0;
|
||||
int counts_per_revolution = 360;
|
||||
|
||||
|
@ -78,6 +86,7 @@ void INCR_ENCODER_Init(void){
|
|||
}
|
||||
|
||||
void EXTI9_5_IRQHandler(void){
|
||||
|
||||
index_passed = 1;
|
||||
// reset counter = encoder position to 0 position
|
||||
LL_TIM_WriteReg(TIM3,CNT,0);
|
||||
|
@ -94,5 +103,15 @@ int INCR_ENCODER_IsAbsolute(void)
|
|||
|
||||
int INCR_ENCODER_GetAngle(void)
|
||||
{
|
||||
return LL_TIM_ReadReg(TIM3,CNT);
|
||||
int counter_value = LL_TIM_ReadReg(TIM3, CNT);
|
||||
float vabs = abs(counter_value-INCR_ENCODER_MID_VALUE);
|
||||
float vIEAngleDebut = INCR_ENCODER_MID_VALUE -(ANGLE_DEBUT*4);
|
||||
float nbIncrements = 90/RESOLUTION;
|
||||
|
||||
if(vabs > vIEAngleDebut)
|
||||
{
|
||||
return 0;
|
||||
}else{
|
||||
return 90 - RESOLUTION*floor(vabs/(vIEAngleDebut/nbIncrements) ) ;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef INCR_ENCODER
|
||||
//codé par Kévin Cavailles et Jasper Güldenstein
|
||||
|
||||
/**
|
||||
*/
|
||||
void INCR_ENCODER_Init(void);
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#include "emetteur_rf.h"
|
||||
#include "RFOutput.h"
|
||||
#include <stdio.h>
|
||||
|
||||
void emetteur_rf_init(void){
|
||||
char RF_OUTPUT_buf[100];
|
||||
|
||||
void RF_OUTPUT_Init(void){
|
||||
|
||||
LL_USART_InitTypeDef My_LL_Usart_Init_Struct;
|
||||
|
||||
|
@ -34,19 +37,19 @@ void emetteur_rf_init(void){
|
|||
LL_USART_Init(USART1,&My_LL_Usart_Init_Struct);
|
||||
LL_USART_Enable(USART1);
|
||||
|
||||
/*int periph_speed;
|
||||
if (uart_port==USART1) periph_speed = 36000000;
|
||||
if (uart_port==USART2) periph_speed = 72000000;
|
||||
if (uart_port==USART3) periph_speed = 72000000;
|
||||
}
|
||||
|
||||
LL_USART_SetBaudRate(uart_port, periph_speed, baudrate);
|
||||
*/}
|
||||
void RF_OUTPUT_SendBytes(char* buf, int len){
|
||||
|
||||
void emetteur_send_bytes(USART_TypeDef * uart_port,char* buf, int len){
|
||||
for(int i = 0; i < len; i++){
|
||||
LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_11);
|
||||
LL_USART_TransmitData8(uart_port, buf[i]);
|
||||
while(!LL_USART_IsActiveFlag_TXE(uart_port));
|
||||
for(int i = 0; i < len; i++){
|
||||
LL_USART_TransmitData8(USART1, buf[i]);
|
||||
while(!LL_USART_IsActiveFlag_TXE(USART1));
|
||||
}
|
||||
LL_GPIO_ResetOutputPin(GPIOA,LL_GPIO_PIN_11);
|
||||
}
|
||||
|
||||
void RF_OUTPUT_SendMessage(int rouli_bon, int alimentation_bon, float angle_voile){
|
||||
int len = sprintf(RF_OUTPUT_buf, "Alim bon: %d, Rouli bon: %d, Angle de voile: %2f\r\n", alimentation_bon, rouli_bon, angle_voile);
|
||||
RF_OUTPUT_SendBytes(RF_OUTPUT_buf, len);
|
||||
}
|
|
@ -7,8 +7,9 @@
|
|||
#include "stm32f1xx_ll_usart.h"
|
||||
#include "stm32f1xx_ll_gpio.h"
|
||||
|
||||
void emetteur_rf_init(void);
|
||||
void emetteur_send_bytes(USART_TypeDef * uart_port,char* buf, int len);
|
||||
void RF_OUTPUT_Init(void);
|
||||
void RF_OUTPUT_SendBytes(char* buf, int len);
|
||||
void RF_OUTPUT_SendMessage(int rouli_bon, int alimentation_bon, float angle_voile);
|
||||
|
||||
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
#include "alimentation.h"
|
||||
|
||||
|
||||
void alimentation_init(void){
|
||||
RCC -> CFGR |= (0x1<<15);
|
||||
RCC-> CFGR &= ~ (0x1<<14);
|
||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1);
|
||||
LL_APB1_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
|
||||
|
||||
LL_GPIO_InitTypeDef pc2;
|
||||
LL_ADC_InitTypeDef adc;
|
||||
LL_ADC_REG_InitTypeDef adcReg;
|
||||
|
||||
LL_GPIO_StructInit(&pc2);
|
||||
pc2.Pin = LL_GPIO_PIN_0;
|
||||
pc2.Mode = LL_GPIO_MODE_ANALOG;
|
||||
LL_GPIO_Init(GPIOC, &pc2);
|
||||
|
||||
|
||||
adc.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;
|
||||
adc.SequencersScanMode = LL_ADC_SEQ_SCAN_DISABLE;
|
||||
LL_ADC_Init(ADC1, &adc);
|
||||
|
||||
adcReg.TriggerSource = LL_ADC_REG_TRIG_SOFTWARE ;
|
||||
adcReg.SequencerLength = LL_ADC_REG_SEQ_SCAN_DISABLE;
|
||||
adcReg.SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE;
|
||||
adcReg.ContinuousMode = LL_ADC_REG_CONV_SINGLE;
|
||||
adcReg.DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE;
|
||||
|
||||
|
||||
LL_ADC_REG_Init(ADC1, &adcReg);
|
||||
|
||||
/*LL_ADC_SetChannelSamplingTime(ADC2, LL_ADC_CHANNEL_10, LL_ADC_SAMPLINGTIME_1CYCLE_5);
|
||||
LL_ADC_SetChannelSamplingTime(ADC2, LL_ADC_CHANNEL_11, LL_ADC_SAMPLINGTIME_1CYCLE_5);
|
||||
|
||||
*/
|
||||
LL_ADC_Enable(ADC1);
|
||||
|
||||
//LL_ADC_EnableIT_EOS(ADC1);
|
||||
//wait 0,2 µs, calibration is advised
|
||||
//LL_ADC_StartCalibration(ADC1);
|
||||
}
|
||||
float u2;
|
||||
unsigned int niv_batterie;
|
||||
float battery_level;
|
||||
float get_battery_level(void){
|
||||
LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_12);
|
||||
LL_ADC_REG_StartConversionSWStart(ADC1);
|
||||
while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1);
|
||||
battery_level = LL_ADC_REG_ReadConversionData12(ADC1);
|
||||
u2 = (battery_level*3.3)/4095.0;
|
||||
float level = u2*13.0;
|
||||
return level;
|
||||
}
|
||||
|
||||
int is_level_enough(void){
|
||||
if (get_battery_level()<(0.8*12)){
|
||||
return 0;
|
||||
}else{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
|
@ -21,62 +21,89 @@
|
|||
#include "stm32f1xx_ll_system.h" // utile dans la fonction SystemClock_Config
|
||||
#include "stm32f1xx_ll_bus.h"
|
||||
|
||||
|
||||
#include "RFInput.h"
|
||||
#include "IncrEncoder.h"
|
||||
#include "DcMotor.h"
|
||||
#include "Sail.h"
|
||||
#include "alimentation.h"
|
||||
#include "accelerometer.h"
|
||||
#include "Alimentation.h"
|
||||
#include "Accelerometer.h"
|
||||
#include "RFOutput.h"
|
||||
|
||||
#define CONTROL_LOOP_PERIOD 250
|
||||
#define MSG_TRANSFER_PERIOD 3000
|
||||
|
||||
void SystemClock_Config(void);
|
||||
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
// global variables for monitoring in keil
|
||||
int counter = 0;
|
||||
int battery_level_good = 0;
|
||||
int angle_roulis_good = 0;
|
||||
int angle_sail = 0;
|
||||
int RF_Input_Duty = 0;
|
||||
int TX_Flag = 0, CONTROL_LOOP_Flag = 0;
|
||||
|
||||
char wait_for_girouette[] = "En attente d'initialisation de la girouette\r\n";
|
||||
|
||||
/**
|
||||
* @brief Main program
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
|
||||
int val = 0;
|
||||
int val2 = 0;
|
||||
int counter = 0;
|
||||
float level;
|
||||
int level_enough;
|
||||
double xx,yy;
|
||||
int bon;
|
||||
int main(void)
|
||||
{
|
||||
/* Configure the system clock to 72 MHz */
|
||||
SystemClock_Config();
|
||||
|
||||
//alimentation_init();
|
||||
ALIMENTATION_Init();
|
||||
ACCELEROMETER_Init();
|
||||
RF_INPUT_Init();
|
||||
DC_MOTOR_Init();
|
||||
SAIL_Init();
|
||||
accelero_init();
|
||||
RF_OUTPUT_Init();
|
||||
|
||||
while(!INCR_ENCODER_IsAbsolute())
|
||||
{
|
||||
RF_OUTPUT_SendBytes(wait_for_girouette, sizeof(wait_for_girouette));
|
||||
LL_mDelay(500);
|
||||
}
|
||||
|
||||
/* Infinite loop */
|
||||
while (1)
|
||||
{
|
||||
LL_mDelay(100);
|
||||
//counter = (counter + 1) % 100;
|
||||
//DC_MOTOR_SetSpeed(counter);
|
||||
//val = RF_INPUT_GetPeriodUs();
|
||||
//val2 = RF_INPUT_GetDutyTimeUs();
|
||||
//SAIL_SetAngle(counter);
|
||||
//level = get_battery_level();
|
||||
//level_enough = is_level_enough();
|
||||
xx = accelero_get_x();
|
||||
//yy = accelero_get_y();
|
||||
//bon = accelero_angle_bon();
|
||||
if(CONTROL_LOOP_Flag){
|
||||
battery_level_good = ALIMENTATION_IsLevelEnough();
|
||||
angle_roulis_good = ACCELEROMETER_AngleGood();
|
||||
|
||||
if(!angle_roulis_good){
|
||||
SAIL_SetAngle(90);
|
||||
DC_MOTOR_SetSpeed(0);
|
||||
}else{
|
||||
angle_sail = INCR_ENCODER_GetAngle();
|
||||
SAIL_SetAngle(angle_sail/2);
|
||||
RF_Input_Duty = RF_INPUT_GetDutyTimeRelative();
|
||||
DC_MOTOR_SetSpeed(RF_Input_Duty);
|
||||
}
|
||||
CONTROL_LOOP_Flag = 0;
|
||||
}
|
||||
if(TX_Flag){
|
||||
RF_OUTPUT_SendMessage(angle_roulis_good, battery_level_good, angle_sail);
|
||||
TX_Flag = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
if(counter % CONTROL_LOOP_PERIOD == 0){
|
||||
CONTROL_LOOP_Flag = 1;
|
||||
}
|
||||
if(counter % MSG_TRANSFER_PERIOD == 0){
|
||||
TX_Flag = 1;
|
||||
}
|
||||
counter = (counter+1) % (CONTROL_LOOP_PERIOD*MSG_TRANSFER_PERIOD) ;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue