Porovnat revize

..

Žádné společné commity. „41f7b66f5d5705df90ea33ffd22943f44a2f2a17“ a „58f3895a6ed52c973471612147cca6f2248f551e“ mají zcela odlišnou historii.

15 změnil soubory, kde provedl 874 přidání a 188 odebrání

Zobrazit soubor

@ -432,7 +432,7 @@
<Expression></Expression> <Expression></Expression>
</Bp> </Bp>
<Bp> <Bp>
<Number>2</Number> <Number>3</Number>
<Type>0</Type> <Type>0</Type>
<LineNumber>46</LineNumber> <LineNumber>46</LineNumber>
<EnabledFlag>1</EnabledFlag> <EnabledFlag>1</EnabledFlag>
@ -568,6 +568,42 @@
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>2</FileNumber> <FileNumber>2</FileNumber>
<FileType>1</FileType> <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> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
@ -578,7 +614,19 @@
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>3</FileNumber> <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>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -590,7 +638,7 @@
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>4</FileNumber> <FileNumber>8</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -602,7 +650,7 @@
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber> <FileNumber>9</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -614,7 +662,7 @@
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber> <FileNumber>10</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -624,42 +672,6 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </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>
<Group> <Group>
@ -668,6 +680,18 @@
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <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>
<Group> <Group>
@ -678,7 +702,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>10</FileNumber> <FileNumber>12</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -690,7 +714,7 @@
</File> </File>
<File> <File>
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>11</FileNumber> <FileNumber>13</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -702,7 +726,7 @@
</File> </File>
<File> <File>
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>12</FileNumber> <FileNumber>14</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -714,7 +738,7 @@
</File> </File>
<File> <File>
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>13</FileNumber> <FileNumber>15</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -726,7 +750,7 @@
</File> </File>
<File> <File>
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>14</FileNumber> <FileNumber>16</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -738,7 +762,7 @@
</File> </File>
<File> <File>
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>15</FileNumber> <FileNumber>17</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -750,7 +774,7 @@
</File> </File>
<File> <File>
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>16</FileNumber> <FileNumber>18</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -770,7 +794,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>17</FileNumber> <FileNumber>19</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -790,7 +814,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>18</FileNumber> <FileNumber>20</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -810,7 +834,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>7</GroupNumber> <GroupNumber>7</GroupNumber>
<FileNumber>19</FileNumber> <FileNumber>21</FileNumber>
<FileType>2</FileType> <FileType>2</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>

Zobrazit soubor

@ -185,7 +185,6 @@
<uocXRam>0</uocXRam> <uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP> <RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve> <RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<hadIRAM2>0</hadIRAM2> <hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2> <hadIROM2>0</hadIROM2>
<StupSel>8</StupSel> <StupSel>8</StupSel>
@ -352,7 +351,7 @@
<NoWarn>0</NoWarn> <NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc> <uSurpInc>0</uSurpInc>
<useXO>0</useXO> <useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt> <uClangAs>0</uClangAs>
<VariousControls> <VariousControls>
<MiscControls></MiscControls> <MiscControls></MiscControls>
<Define></Define> <Define></Define>
@ -393,11 +392,31 @@
<Group> <Group>
<GroupName>User Services</GroupName> <GroupName>User Services</GroupName>
<Files> <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> <File>
<FileName>DcMotor.c</FileName> <FileName>DcMotor.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\Services\DcMotor.c</FilePath> <FilePath>..\Services\DcMotor.c</FilePath>
</File> </File>
<File>
<FileName>emetteur_rf.c</FileName>
<FileType>1</FileType>
<FilePath>..\Services\emetteur_rf.c</FilePath>
</File>
<File> <File>
<FileName>IncrEncoder.c</FileName> <FileName>IncrEncoder.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
@ -418,25 +437,17 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\Services\Servo.c</FilePath> <FilePath>..\Services\Servo.c</FilePath>
</File> </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> </Files>
</Group> </Group>
<Group> <Group>
<GroupName>MyDrivers</GroupName> <GroupName>MyDrivers</GroupName>
<Files>
<File>
<FileName>MyTimer.c</FileName>
<FileType>1</FileType>
<FilePath>..\MyDrivers\MyTimer.c</FilePath>
</File>
</Files>
</Group> </Group>
<Group> <Group>
<GroupName>Drivers/STM32f1xx_LL_Driver</GroupName> <GroupName>Drivers/STM32f1xx_LL_Driver</GroupName>
@ -692,7 +703,6 @@
<uocXRam>0</uocXRam> <uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP> <RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve> <RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<hadIRAM2>0</hadIRAM2> <hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2> <hadIROM2>0</hadIROM2>
<StupSel>8</StupSel> <StupSel>8</StupSel>
@ -859,7 +869,7 @@
<NoWarn>0</NoWarn> <NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc> <uSurpInc>0</uSurpInc>
<useXO>0</useXO> <useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt> <uClangAs>0</uClangAs>
<VariousControls> <VariousControls>
<MiscControls></MiscControls> <MiscControls></MiscControls>
<Define></Define> <Define></Define>
@ -900,11 +910,31 @@
<Group> <Group>
<GroupName>User Services</GroupName> <GroupName>User Services</GroupName>
<Files> <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> <File>
<FileName>DcMotor.c</FileName> <FileName>DcMotor.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\Services\DcMotor.c</FilePath> <FilePath>..\Services\DcMotor.c</FilePath>
</File> </File>
<File>
<FileName>emetteur_rf.c</FileName>
<FileType>1</FileType>
<FilePath>..\Services\emetteur_rf.c</FilePath>
</File>
<File> <File>
<FileName>IncrEncoder.c</FileName> <FileName>IncrEncoder.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
@ -925,25 +955,17 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\Services\Servo.c</FilePath> <FilePath>..\Services\Servo.c</FilePath>
</File> </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> </Files>
</Group> </Group>
<Group> <Group>
<GroupName>MyDrivers</GroupName> <GroupName>MyDrivers</GroupName>
<Files>
<File>
<FileName>MyTimer.c</FileName>
<FileType>1</FileType>
<FilePath>..\MyDrivers\MyTimer.c</FilePath>
</File>
</Files>
</Group> </Group>
<Group> <Group>
<GroupName>Drivers/STM32f1xx_LL_Driver</GroupName> <GroupName>Drivers/STM32f1xx_LL_Driver</GroupName>
@ -1036,19 +1058,4 @@
<files/> <files/>
</RTE> </RTE>
<LayerInfo>
<Layers>
<Layer>
<LayName>&lt;Project Info&gt;</LayName>
<LayDesc></LayDesc>
<LayUrl></LayUrl>
<LayKeys></LayKeys>
<LayCat></LayCat>
<LayLic></LayLic>
<LayTarg>0</LayTarg>
<LayPrjMark>1</LayPrjMark>
</Layer>
</Layers>
</LayerInfo>
</Project> </Project>

182
keil_project/MyDrivers/MyTimer.c Normální soubor
Zobrazit soubor

@ -0,0 +1,182 @@
// 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)();
}

70
keil_project/MyDrivers/MyTimer.h Normální soubor
Zobrazit soubor

@ -0,0 +1,70 @@
// 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

67
keil_project/MyDrivers/MyUart.c Normální soubor
Zobrazit soubor

@ -0,0 +1,67 @@
#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));
}
}

10
keil_project/MyDrivers/MyUart.h Normální soubor
Zobrazit soubor

@ -0,0 +1,10 @@
#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

Zobrazit soubor

@ -1,6 +1,9 @@
#include "Accelerometer.h" #include "Accelerometer.h"
double x;
double y;
double angle;
void ACCELEROMETER_Init(void){ void accelero_init(void){
RCC -> CFGR |= (0x1<<15); RCC -> CFGR |= (0x1<<15);
RCC-> CFGR &= ~ (0x1<<14); RCC-> CFGR &= ~ (0x1<<14);
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1); LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1);
@ -21,6 +24,7 @@ void ACCELEROMETER_Init(void){
LL_GPIO_Init(GPIOA, &pc1); LL_GPIO_Init(GPIOA, &pc1);
adc.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT; adc.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;
adc.SequencersScanMode = LL_ADC_SEQ_SCAN_DISABLE; adc.SequencersScanMode = LL_ADC_SEQ_SCAN_DISABLE;
LL_ADC_Init(ADC1, &adc); LL_ADC_Init(ADC1, &adc);
@ -31,37 +35,55 @@ void ACCELEROMETER_Init(void){
adcReg.ContinuousMode = LL_ADC_REG_CONV_SINGLE; adcReg.ContinuousMode = LL_ADC_REG_CONV_SINGLE;
adcReg.DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE; adcReg.DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE;
LL_ADC_REG_Init(ADC1, &adcReg); 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_Enable(ADC1);
//LL_ADC_EnableIT_EOS(ADC1);
//wait 0,2 µs, calibration is advised
//LL_ADC_StartCalibration(ADC1);
} }
double ACCELEROMETER_GetX(void){
double accelero_get_x(void){
LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_1); LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_1);
LL_ADC_REG_StartConversionSWStart(ADC1); LL_ADC_REG_StartConversionSWStart(ADC1);
while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1); while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1){
//__asm__"nope";
}
double x= LL_ADC_REG_ReadConversionData12(ADC1); double x= LL_ADC_REG_ReadConversionData12(ADC1);
return x; return x;
} }
double ACCELEROMETER_GetY(void){ double accelero_get_y(void){
LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_11); LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_11);
LL_ADC_REG_StartConversionSWStart(ADC1); LL_ADC_REG_StartConversionSWStart(ADC1);
while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1); while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1){
//__asm__"nope";
}
double y = LL_ADC_REG_ReadConversionData12(ADC1); double y = LL_ADC_REG_ReadConversionData12(ADC1);
return y; return y;
} }
int ACCELEROMETER_AngleGood(void){
double x = ACCELEROMETER_GetX(); int accelero_angle_bon(void){
double y = ACCELEROMETER_GetY(); x = accelero_get_x();
double angle = x/y; y = accelero_get_y();
angle = x/y;
if (angle>tan(0.698132)){ if (angle>tan(0.698132)){
return 0; return 0;
}else { }else {
return 1; return 1;
} }
//le flag EOC n'est jamais mis à un .... //le flag EOC n'est jamais mis à un ....
// Soit la conversion est mal faite soit on n'utilise pas bien la simulation // Soit la conversion est mal faite soit on n'utilise pas bien la simulation
//soit on n'utilise pas bien isActiveFlag dans la boucle //soit on n'utilise pas bien isActiveFlag dans la boucle
} }

Zobrazit soubor

@ -18,13 +18,13 @@
Les fonctions qui gèrent les IO (ajout par rapport à l'activité 1) Les fonctions qui gèrent les IO (ajout par rapport à l'activité 1)
=======================================================================================*/ =======================================================================================*/
void ACCELEROMETER_Init(void); void accelero_init(void);
double ACCELEROMETER_GetX(void); double accelero_get_x(void);
double ACCELEROMETER_GetY(void); double accelero_get_y(void);
int ACCELEROMETER_AngleGood(void); int accelero_angle_bon(void);
#endif #endif

Zobrazit soubor

@ -1,7 +1,7 @@
#include "Alimentation.h" #include "Alimentation.h"
void ALIMENTATION_Init(void){ void alimentation_init(void){
RCC -> CFGR |= (0x1<<15); RCC -> CFGR |= (0x1<<15);
RCC-> CFGR &= ~ (0x1<<14); RCC-> CFGR &= ~ (0x1<<14);
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1); LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1);
@ -29,12 +29,21 @@ void ALIMENTATION_Init(void){
LL_ADC_REG_Init(ADC1, &adcReg); LL_ADC_REG_Init(ADC1, &adcReg);
LL_ADC_Enable(ADC1);
}
float ALIMENTATION_GetBatteryLevel(void){ /*LL_ADC_SetChannelSamplingTime(ADC2, LL_ADC_CHANNEL_10, LL_ADC_SAMPLINGTIME_1CYCLE_5);
float u2; 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 battery_level;
float get_battery_level(void){
LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_12); LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_12);
LL_ADC_REG_StartConversionSWStart(ADC1); LL_ADC_REG_StartConversionSWStart(ADC1);
while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1); while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1);
@ -44,10 +53,11 @@ float ALIMENTATION_GetBatteryLevel(void){
return level; return level;
} }
int ALIMENTATION_IsLevelEnough(void){ int is_level_enough(void){
if (ALIMENTATION_GetBatteryLevel()<(0.8*12)){ if (get_battery_level()<(0.8*12)){
return 0; return 0;
}else{ }else{
return 1; return 1;
} }
} }

Zobrazit soubor

@ -18,9 +18,9 @@
Les fonctions qui gèrent les IO (ajout par rapport à l'activité 1) Les fonctions qui gèrent les IO (ajout par rapport à l'activité 1)
=======================================================================================*/ =======================================================================================*/
void ALIMENTATION_Init(void); void alimentation_init(void);
float ALIMENTATION_GetBatteryLevel(void); float get_battery_level(void);
int ALIMENTATION_IsLevelEnough(void); int is_level_enough(void);
#endif #endif

182
keil_project/Services/Chrono.c Normální soubor
Zobrazit soubor

@ -0,0 +1,182 @@
// 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();
}
}

107
keil_project/Services/Chrono.h Normální soubor
Zobrazit soubor

@ -0,0 +1,107 @@
// 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

Zobrazit soubor

@ -1,9 +1,9 @@
#include "RFOutput.h" #include "emetteur_rf.h"
#include <stdio.h> #include <stdio.h>
char RF_OUTPUT_buf[100]; char buf[100];
void RF_OUTPUT_Init(void){ void emetteur_rf_init(void){
LL_USART_InitTypeDef My_LL_Usart_Init_Struct; LL_USART_InitTypeDef My_LL_Usart_Init_Struct;
@ -39,7 +39,7 @@ void RF_OUTPUT_Init(void){
} }
void RF_OUTPUT_SendBytes(char* buf, int len){ void emetteur_send_bytes(char* buf, int len){
LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_11); LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_11);
for(int i = 0; i < len; i++){ for(int i = 0; i < len; i++){
@ -49,7 +49,7 @@ void RF_OUTPUT_SendBytes(char* buf, int len){
LL_GPIO_ResetOutputPin(GPIOA,LL_GPIO_PIN_11); LL_GPIO_ResetOutputPin(GPIOA,LL_GPIO_PIN_11);
} }
void RF_OUTPUT_SendMessage(int rouli_bon, int alimentation_bon, float angle_voile){ void emetteur_send_message(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); int len = sprintf(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); emetteur_send_bytes(buf, len);
} }

Zobrazit soubor

@ -7,9 +7,9 @@
#include "stm32f1xx_ll_usart.h" #include "stm32f1xx_ll_usart.h"
#include "stm32f1xx_ll_gpio.h" #include "stm32f1xx_ll_gpio.h"
void RF_OUTPUT_Init(void); void emetteur_rf_init(void);
void RF_OUTPUT_SendBytes(char* buf, int len); void emetteur_send_bytes(char* buf, int len);
void RF_OUTPUT_SendMessage(int rouli_bon, int alimentation_bon, float angle_voile); void emetteur_send_message(int rouli_bon, int alimentation_bon, float angle_voile);

Zobrazit soubor

@ -26,9 +26,9 @@
#include "IncrEncoder.h" #include "IncrEncoder.h"
#include "DcMotor.h" #include "DcMotor.h"
#include "Sail.h" #include "Sail.h"
#include "Alimentation.h" #include "alimentation.h"
#include "Accelerometer.h" #include "accelerometer.h"
#include "RFOutput.h" #include "emetteur_rf.h"
#define CONTROL_LOOP_PERIOD 250 #define CONTROL_LOOP_PERIOD 250
#define MSG_TRANSFER_PERIOD 3000 #define MSG_TRANSFER_PERIOD 3000
@ -37,7 +37,13 @@ void SystemClock_Config(void);
/* Private functions ---------------------------------------------------------*/ /* Private functions ---------------------------------------------------------*/
// global variables for monitoring in keil /**
* @brief Main program
* @param None
* @retval None
*/
int counter = 0; int counter = 0;
int battery_level_good = 0; int battery_level_good = 0;
int angle_roulis_good = 0; int angle_roulis_good = 0;
@ -46,34 +52,29 @@ int RF_Input_Duty = 0;
int TX_Flag = 0, CONTROL_LOOP_Flag = 0; int TX_Flag = 0, CONTROL_LOOP_Flag = 0;
char wait_for_girouette[] = "En attente d'initialisation de la girouette\r\n"; char wait_for_girouette[] = "En attente d'initialisation de la girouette\r\n";
/**
* @brief Main program
* @param None
* @retval None
*/
int main(void) int main(void)
{ {
/* Configure the system clock to 72 MHz */ /* Configure the system clock to 72 MHz */
SystemClock_Config(); SystemClock_Config();
ALIMENTATION_Init(); alimentation_init();
ACCELEROMETER_Init(); accelero_init();
RF_INPUT_Init(); RF_INPUT_Init();
DC_MOTOR_Init(); DC_MOTOR_Init();
SAIL_Init(); SAIL_Init();
RF_OUTPUT_Init(); emetteur_rf_init();
while(!INCR_ENCODER_IsAbsolute()) while(!INCR_ENCODER_IsAbsolute())
{ {
RF_OUTPUT_SendBytes(wait_for_girouette, sizeof(wait_for_girouette)); emetteur_send_bytes(wait_for_girouette, sizeof(wait_for_girouette));
LL_mDelay(500); LL_mDelay(500);
} }
/* Infinite loop */
while (1) while (1)
{ {
if(CONTROL_LOOP_Flag){ if(CONTROL_LOOP_Flag){
battery_level_good = ALIMENTATION_IsLevelEnough(); battery_level_good = is_level_enough();
angle_roulis_good = ACCELEROMETER_AngleGood(); angle_roulis_good = accelero_angle_bon();
if(!angle_roulis_good){ if(!angle_roulis_good){
SAIL_SetAngle(90); SAIL_SetAngle(90);
@ -87,7 +88,7 @@ int main(void)
CONTROL_LOOP_Flag = 0; CONTROL_LOOP_Flag = 0;
} }
if(TX_Flag){ if(TX_Flag){
RF_OUTPUT_SendMessage(angle_roulis_good, battery_level_good, angle_sail); emetteur_send_message(angle_roulis_good, battery_level_good, angle_sail);
TX_Flag = 0; TX_Flag = 0;
} }
} }
@ -106,6 +107,10 @@ void SysTick_Handler(void)
} }
/** /**
* @brief System Clock Configuration * @brief System Clock Configuration
* The system Clock is configured as follow : * The system Clock is configured as follow :