Merge de la branche anti-chavirement-v2
This commit is contained in:
commit
6eb0603fdf
9 changed files with 570 additions and 62 deletions
|
@ -3539,8 +3539,12 @@ __STATIC_INLINE uint32_t LL_ADC_INJ_ReadConversionData32(ADC_TypeDef *ADCx, uint
|
||||||
__STATIC_INLINE uint16_t LL_ADC_INJ_ReadConversionData12(ADC_TypeDef *ADCx, uint32_t Rank)
|
__STATIC_INLINE uint16_t LL_ADC_INJ_ReadConversionData12(ADC_TypeDef *ADCx, uint32_t Rank)
|
||||||
{
|
{
|
||||||
register __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->JDR1, __ADC_MASK_SHIFT(Rank, ADC_INJ_JDRX_REGOFFSET_MASK));
|
register __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->JDR1, __ADC_MASK_SHIFT(Rank, ADC_INJ_JDRX_REGOFFSET_MASK));
|
||||||
|
<<<<<<< HEAD
|
||||||
|
|
||||||
return (uint16_t)(READ_BIT(*preg,
|
return (uint16_t)(READ_BIT(*preg,
|
||||||
|
=======
|
||||||
|
return (uint16_t)(READ_BIT(*preg,
|
||||||
|
>>>>>>> origin/Anti-chavirement-v2
|
||||||
ADC_JDR1_JDATA)
|
ADC_JDR1_JDATA)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -3581,8 +3585,12 @@ __STATIC_INLINE uint32_t LL_ADC_IsActiveFlag_JEOS(ADC_TypeDef *ADCx)
|
||||||
/* end of unitary conversion. */
|
/* end of unitary conversion. */
|
||||||
/* Flag noted as "JEOC" is corresponding to flag "JEOS" */
|
/* Flag noted as "JEOC" is corresponding to flag "JEOS" */
|
||||||
/* in other STM32 families). */
|
/* in other STM32 families). */
|
||||||
|
<<<<<<< HEAD
|
||||||
return (READ_BIT(ADCx->SR, LL_ADC_FLAG_JEOS) == (LL_ADC_FLAG_JEOS));
|
return (READ_BIT(ADCx->SR, LL_ADC_FLAG_JEOS) == (LL_ADC_FLAG_JEOS));
|
||||||
}
|
}
|
||||||
|
=======
|
||||||
|
return (READ_BIT(ADCx->SR, LL_ADC_FLAG_JEOS) == (LL_ADC_FLAG_JEOS));}
|
||||||
|
>>>>>>> origin/Anti-chavirement-v2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get flag ADC analog watchdog 1 flag
|
* @brief Get flag ADC analog watchdog 1 flag
|
||||||
|
|
|
@ -75,7 +75,7 @@
|
||||||
<OPTFL>
|
<OPTFL>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<IsCurrentTarget>1</IsCurrentTarget>
|
<IsCurrentTarget>0</IsCurrentTarget>
|
||||||
</OPTFL>
|
</OPTFL>
|
||||||
<CpuCode>18</CpuCode>
|
<CpuCode>18</CpuCode>
|
||||||
<DebugOpt>
|
<DebugOpt>
|
||||||
|
@ -284,7 +284,7 @@
|
||||||
<OPTFL>
|
<OPTFL>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<IsCurrentTarget>0</IsCurrentTarget>
|
<IsCurrentTarget>1</IsCurrentTarget>
|
||||||
</OPTFL>
|
</OPTFL>
|
||||||
<CpuCode>18</CpuCode>
|
<CpuCode>18</CpuCode>
|
||||||
<DebugOpt>
|
<DebugOpt>
|
||||||
|
@ -432,12 +432,22 @@
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>0</count>
|
<count>0</count>
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>Chrono_Time</ItemText>
|
<ItemText>USART1</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>1</count>
|
<count>1</count>
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>USART1</ItemText>
|
<ItemText>res10,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>2</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>level,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>3</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>danger,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
</WatchWindow1>
|
</WatchWindow1>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
|
@ -448,7 +458,7 @@
|
||||||
<periodic>1</periodic>
|
<periodic>1</periodic>
|
||||||
<aLwin>1</aLwin>
|
<aLwin>1</aLwin>
|
||||||
<aCover>0</aCover>
|
<aCover>0</aCover>
|
||||||
<aSer1>0</aSer1>
|
<aSer1>1</aSer1>
|
||||||
<aSer2>0</aSer2>
|
<aSer2>0</aSer2>
|
||||||
<aPa>0</aPa>
|
<aPa>0</aPa>
|
||||||
<viewmode>1</viewmode>
|
<viewmode>1</viewmode>
|
||||||
|
@ -486,7 +496,7 @@
|
||||||
<Wi>
|
<Wi>
|
||||||
<IntNumber>0</IntNumber>
|
<IntNumber>0</IntNumber>
|
||||||
<FirstString>((TIM_TypeDef *)(0x40000000UL + 0x00000000UL))->CNT</FirstString>
|
<FirstString>((TIM_TypeDef *)(0x40000000UL + 0x00000000UL))->CNT</FirstString>
|
||||||
<SecondString>FF0000000000000000000000000000000000594000000000000000000000000000000000282854494D5F54797065446566202A292830783430303030303030554C202B2030783030303030303030554C29292D3E434E5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000001000000000000000000F03F1000000000000000000000000000000000000000B6020008</SecondString>
|
<SecondString>FF0000000000000000000000000000000000594000000000000000000000000000000000282854494D5F54797065446566202A292830783430303030303030554C202B2030783030303030303030554C29292D3E434E5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000001000000000000000000F03F1900000000000000000000000000000000000000B6020008</SecondString>
|
||||||
</Wi>
|
</Wi>
|
||||||
</LogicAnalyzers>
|
</LogicAnalyzers>
|
||||||
<DebugDescription>
|
<DebugDescription>
|
||||||
|
@ -556,18 +566,6 @@
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\Src\AntiCharvirement.c</PathWithFileName>
|
|
||||||
<FilenameWithoutPath>AntiCharvirement.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>
|
|
||||||
<PathWithFileName>..\Src\Batterie.c</PathWithFileName>
|
<PathWithFileName>..\Src\Batterie.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>Batterie.c</FilenameWithoutPath>
|
<FilenameWithoutPath>Batterie.c</FilenameWithoutPath>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
|
@ -575,7 +573,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>6</FileNumber>
|
<FileNumber>5</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -587,7 +585,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>7</FileNumber>
|
<FileNumber>6</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -599,7 +597,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>8</FileNumber>
|
<FileNumber>7</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -611,7 +609,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>9</FileNumber>
|
<FileNumber>8</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -621,6 +619,138 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>9</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Src\Allure.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>Allure.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>10</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Src\AntiChavirement.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>AntiChavirement.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>11</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Src\Batterie.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>Batterie.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>12</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Src\Gouvernail.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>Gouvernail.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>13</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Src\Heure.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>Heure.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>14</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Src\MyTimer.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>MyTimer.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>15</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Src\Transmission.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>Transmission.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>16</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Src\Voile.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>Voile.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>17</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Src\AntiChavirement.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>AntiChavirement.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>18</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Src\Securite.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>Securite.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>19</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Src\Securite.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>Securite.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>10</FileNumber>
|
<FileNumber>10</FileNumber>
|
||||||
|
|
|
@ -402,11 +402,6 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\Src\Allure.c</FilePath>
|
<FilePath>..\Src\Allure.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
|
||||||
<FileName>AntiCharvirement.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>..\Src\AntiCharvirement.c</FilePath>
|
|
||||||
</File>
|
|
||||||
<File>
|
<File>
|
||||||
<FileName>Batterie.c</FileName>
|
<FileName>Batterie.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
|
@ -908,11 +903,6 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\Src\Allure.c</FilePath>
|
<FilePath>..\Src\Allure.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
|
||||||
<FileName>AntiCharvirement.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>..\Src\AntiCharvirement.c</FilePath>
|
|
||||||
</File>
|
|
||||||
<File>
|
<File>
|
||||||
<FileName>Batterie.c</FileName>
|
<FileName>Batterie.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
|
|
63
Src/AntiChavirement.c
Normal file
63
Src/AntiChavirement.c
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
#include "AntiChavirement.h"
|
||||||
|
|
||||||
|
int CalculerDanger(int gamma){
|
||||||
|
}
|
||||||
|
|
||||||
|
int RecupRouli(){
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfAntiChavirement(){
|
||||||
|
//On est pas sûrs pour ADC 1, voir datasheet page 28
|
||||||
|
|
||||||
|
//Faire les horloges
|
||||||
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
|
||||||
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1);
|
||||||
|
|
||||||
|
|
||||||
|
//On configure les PINS
|
||||||
|
LL_GPIO_SetPinMode(GPIOC,LL_GPIO_PIN_0,LL_GPIO_MODE_ANALOG);
|
||||||
|
LL_GPIO_SetPinMode(GPIOC,LL_GPIO_PIN_2,LL_GPIO_MODE_ANALOG);
|
||||||
|
|
||||||
|
|
||||||
|
//ON se met en mode scan enable pour pouvoir à chaque trigger aller chercher sur plusieur voies.
|
||||||
|
LL_ADC_SetSequencersScanMode(ADC1,LL_ADC_SEQ_SCAN_ENABLE);
|
||||||
|
|
||||||
|
//Permet de faire en sorte d'aller chercher 2 voies (2 rangs) à chaque trigger
|
||||||
|
LL_ADC_INJ_SetSequencerLength(ADC1,LL_ADC_INJ_SEQ_SCAN_ENABLE_2RANKS);
|
||||||
|
|
||||||
|
//Permet de ne pas avoir d'intérruption dans le scan
|
||||||
|
LL_ADC_INJ_SetSequencerDiscont(ADC1,LL_ADC_INJ_SEQ_DISCONT_DISABLE);
|
||||||
|
|
||||||
|
//A chaque trigger, on va donc avoir voies de rang 1 puis de rang 2 de scannées
|
||||||
|
|
||||||
|
//On met le rang 1 pour la voie 10 (accéléro)
|
||||||
|
LL_ADC_INJ_SetSequencerRanks(ADC1,LL_ADC_INJ_RANK_1,LL_ADC_CHANNEL_10);
|
||||||
|
|
||||||
|
//On met rang 2 pour la voie 12 (surveillance batterie)
|
||||||
|
LL_ADC_INJ_SetSequencerRanks(ADC1,LL_ADC_INJ_RANK_2,LL_ADC_CHANNEL_12);
|
||||||
|
|
||||||
|
//Permet d'avoirdes registres indépendants pour chaque voie (chaque rangs en fait, au max 4 + 1 pour les regular)
|
||||||
|
LL_ADC_INJ_SetTrigAuto(ADC1,LL_ADC_INJ_TRIG_INDEPENDENT);
|
||||||
|
|
||||||
|
|
||||||
|
//Sampling time voie 10 et 12, à changer peut-être
|
||||||
|
LL_ADC_SetChannelSamplingTime(ADC1,LL_ADC_CHANNEL_10,LL_ADC_SAMPLINGTIME_28CYCLES_5);
|
||||||
|
|
||||||
|
LL_ADC_SetChannelSamplingTime(ADC1,LL_ADC_CHANNEL_12,LL_ADC_SAMPLINGTIME_28CYCLES_5);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
LL_ADC_INJ_SetTriggerSource(ADC1,LL_ADC_INJ_TRIG_SOFTWARE); //permet d'enable le trigger de l'adc par le software
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
LL_ADC_StartCalibration(ADC1);
|
||||||
|
|
||||||
|
|
||||||
|
//Tant que calibration par terminée on enable pas
|
||||||
|
while(LL_ADC_IsCalibrationOnGoing(ADC1)){
|
||||||
|
}
|
||||||
|
|
||||||
|
//Activation de l'ADC (???)
|
||||||
|
LL_ADC_Enable(ADC1);
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
#ifndef ANTI_CHAVIREMENT_H
|
||||||
|
#define ANTI_CHAVIREMENT_H
|
||||||
|
|
||||||
|
#include "stm32f103xb.h"
|
||||||
|
#include "stm32f1xx_ll_adc.h"
|
||||||
|
#include "stm32f1xx_ll_gpio.h"
|
||||||
|
#include "stm32f1xx_ll_bus.h"
|
||||||
|
#include "stm32f1xx_ll_utils.h" // utile dans la fonction SystemClock_Config
|
||||||
|
#include "stm32f1xx_ll_system.h" // utile dans la fonction SystemClock_Config
|
||||||
|
#include "stm32f1xx_ll_rcc.h" // utile dans la fonction SystemClock_Config
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @note
|
||||||
|
* @param
|
||||||
|
* @retval
|
||||||
|
*/
|
||||||
|
int CalculerDanger(int gamma);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @note
|
||||||
|
* @param
|
||||||
|
* @retval
|
||||||
|
*/
|
||||||
|
int RecupRouli();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @note Fonction à lancer avant toute autre.
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void ConfAntiChavirement();
|
||||||
|
|
||||||
|
#endif
|
225
Src/Securite.c
Normal file
225
Src/Securite.c
Normal file
|
@ -0,0 +1,225 @@
|
||||||
|
#include "Securite.h"
|
||||||
|
|
||||||
|
|
||||||
|
// Seuil represente la valeur (en %) en dessous de laquelle le niveau de batterie est consideree faible
|
||||||
|
#define Seuil (20)
|
||||||
|
|
||||||
|
// Seuil represente la valeur de l'angle au dessus de laquelle le chavirement est trop prononcé
|
||||||
|
#define SeuilAngle (40)
|
||||||
|
|
||||||
|
|
||||||
|
int drapeauRecupSecurite = 0; // Flag qui est mis à 1 toute les 10 sec pour recuperer niveau batterie/rouli et envoi régulier
|
||||||
|
int drapeauDangerBatterie = 0; //Flag qui est mis à 1 toute les 10 sec si batterie faible --> envoie message alarme
|
||||||
|
int drapeauDangerRouli = 0; //Flag qui est mis à 1 toute les 10 sec si rouli pas bon --> envoie message alarme
|
||||||
|
|
||||||
|
|
||||||
|
void ConfSecurite(){
|
||||||
|
//On est pas sûrs pour ADC 1, voir datasheet page 28
|
||||||
|
|
||||||
|
//Faire les horloges
|
||||||
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
|
||||||
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1);
|
||||||
|
|
||||||
|
|
||||||
|
//On configure les PINS
|
||||||
|
LL_GPIO_SetPinMode(GPIOC,LL_GPIO_PIN_0,LL_GPIO_MODE_ANALOG);
|
||||||
|
LL_GPIO_SetPinMode(GPIOC,LL_GPIO_PIN_2,LL_GPIO_MODE_ANALOG);
|
||||||
|
|
||||||
|
|
||||||
|
//ON se met en mode scan enable pour pouvoir à chaque trigger aller chercher sur plusieur voies.
|
||||||
|
LL_ADC_SetSequencersScanMode(ADC1,LL_ADC_SEQ_SCAN_ENABLE);
|
||||||
|
|
||||||
|
//Permet de faire en sorte d'aller chercher 2 voies (2 rangs) à chaque trigger
|
||||||
|
LL_ADC_INJ_SetSequencerLength(ADC1,LL_ADC_INJ_SEQ_SCAN_ENABLE_2RANKS);
|
||||||
|
|
||||||
|
//Permet de ne pas avoir d'intérruption dans le scan
|
||||||
|
LL_ADC_INJ_SetSequencerDiscont(ADC1,LL_ADC_INJ_SEQ_DISCONT_DISABLE);
|
||||||
|
|
||||||
|
//A chaque trigger, on va donc avoir voies de rang 1 puis de rang 2 de scannées
|
||||||
|
|
||||||
|
//On met le rang 1 pour la voie 10 (accéléro)
|
||||||
|
LL_ADC_INJ_SetSequencerRanks(ADC1,LL_ADC_INJ_RANK_1,LL_ADC_CHANNEL_10);
|
||||||
|
|
||||||
|
//On met rang 2 pour la voie 12 (surveillance batterie)
|
||||||
|
LL_ADC_INJ_SetSequencerRanks(ADC1,LL_ADC_INJ_RANK_2,LL_ADC_CHANNEL_12);
|
||||||
|
|
||||||
|
//Permet d'avoirdes registres indépendants pour chaque voie (chaque rangs en fait, au max 4 + 1 pour les regular)
|
||||||
|
LL_ADC_INJ_SetTrigAuto(ADC1,LL_ADC_INJ_TRIG_INDEPENDENT);
|
||||||
|
|
||||||
|
|
||||||
|
//Sampling time voie 10 et 12, à changer peut-être
|
||||||
|
LL_ADC_SetChannelSamplingTime(ADC1,LL_ADC_CHANNEL_10,LL_ADC_SAMPLINGTIME_28CYCLES_5);
|
||||||
|
|
||||||
|
LL_ADC_SetChannelSamplingTime(ADC1,LL_ADC_CHANNEL_12,LL_ADC_SAMPLINGTIME_28CYCLES_5);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
LL_ADC_INJ_SetTriggerSource(ADC1,LL_ADC_INJ_TRIG_SOFTWARE); //permet d'enable le trigger de l'adc par le software
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
LL_ADC_StartCalibration(ADC1);
|
||||||
|
|
||||||
|
|
||||||
|
//Tant que calibration par terminée on enable pas
|
||||||
|
while(LL_ADC_IsCalibrationOnGoing(ADC1)){
|
||||||
|
}
|
||||||
|
|
||||||
|
//Activation de l'ADC (???)
|
||||||
|
LL_ADC_Enable(ADC1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Recuperer le niveau de batterie
|
||||||
|
* @note ADC1 -> Channel 12 (Rang 2)
|
||||||
|
* @param None
|
||||||
|
* @retval niveau de batterie en pourcentage
|
||||||
|
*/
|
||||||
|
int RecupNiveauBatterie(void){
|
||||||
|
// Lancement de la conversion
|
||||||
|
LL_ADC_INJ_StartConversionSWStart(ADC1);
|
||||||
|
// Attente de la fin de conversion
|
||||||
|
while(!LL_ADC_IsActiveFlag_JEOS(ADC1)){}
|
||||||
|
// R?cuperation de la valeur apres conversion
|
||||||
|
int NiveauBatterie = LL_ADC_INJ_ReadConversionData12(ADC1,LL_ADC_INJ_RANK_2);
|
||||||
|
// Valeur code sur 12 bits : 0 a 4095 ; on veut Niveau de batterie en pourcentage
|
||||||
|
return NiveauBatterie * 100 / 4095 ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Met le flag de dangerBatterie à 1 si batterie faible.
|
||||||
|
* @note
|
||||||
|
* @param un entier representant le niveau de batterie en pourcentage
|
||||||
|
* @retval
|
||||||
|
*/
|
||||||
|
void CalculDangerNiveauBatterie(int niveau){
|
||||||
|
if ( niveau <= Seuil)
|
||||||
|
{
|
||||||
|
drapeauDangerBatterie = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
drapeauDangerBatterie = 0 ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @brief Mets le flag drapeauDangerRouli a 1 si l angle de rouli est mauvais
|
||||||
|
* @note Si le voilier prend un angle de roulis supe´rieur a` 40° -> MSG de danger + voiles sont imme´diatement rela^che´es
|
||||||
|
* @param un entier representant l angle de rouli
|
||||||
|
* @retval NONE
|
||||||
|
*/
|
||||||
|
void CalculerDangerChavirement(int gamma){
|
||||||
|
if ( gamma >= SeuilAngle)
|
||||||
|
{
|
||||||
|
drapeauDangerRouli = 1;
|
||||||
|
TendreVoile(90); //On lache les voiles si danger de chavirement
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
drapeauDangerRouli = 0 ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @brief Recuperer l angle de rouli
|
||||||
|
* @note ADC1 -> Channel 10 (Rang 1)
|
||||||
|
* @param None
|
||||||
|
* @retval angle de rouli
|
||||||
|
*/
|
||||||
|
int RecupRouli(){
|
||||||
|
// Lancement de la conversion
|
||||||
|
LL_ADC_INJ_StartConversionSWStart(ADC1);
|
||||||
|
// Attente de la fin de conversion
|
||||||
|
while(!LL_ADC_IsActiveFlag_JEOS(ADC1)){}
|
||||||
|
// R?cuperation de la valeur apres conversion
|
||||||
|
int NiveauChavirement = LL_ADC_INJ_ReadConversionData12(ADC1,LL_ADC_INJ_RANK_1);
|
||||||
|
return 0; // Trouver le calcul de l'angle
|
||||||
|
}
|
||||||
|
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
/* Set FLASH latency */
|
||||||
|
LL_FLASH_SetLatency(LL_FLASH_LATENCY_2);
|
||||||
|
|
||||||
|
/* Enable HSE oscillator */
|
||||||
|
// ********* Commenter la ligne ci-dessous pour MCBSTM32 *****************
|
||||||
|
// ********* Conserver la ligne si Nucléo*********************************
|
||||||
|
LL_RCC_HSE_EnableBypass();
|
||||||
|
LL_RCC_HSE_Enable();
|
||||||
|
while(LL_RCC_HSE_IsReady() != 1)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Main PLL configuration and activation */
|
||||||
|
LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE_DIV_1, LL_RCC_PLL_MUL_9);
|
||||||
|
|
||||||
|
LL_RCC_PLL_Enable();
|
||||||
|
while(LL_RCC_PLL_IsReady() != 1)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Sysclk activation on the main PLL */
|
||||||
|
LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
|
||||||
|
LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
|
||||||
|
while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Set APB1 & APB2 prescaler*/
|
||||||
|
LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_2);
|
||||||
|
LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
|
||||||
|
|
||||||
|
/* Set systick to 1ms in using frequency set to 72MHz */
|
||||||
|
LL_Init1msTick(72000000); // utile lorsqu'on utilise la fonction LL_mDelay
|
||||||
|
|
||||||
|
/* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
|
||||||
|
LL_SetSystemCoreClock(72000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
int res10;
|
||||||
|
int level ;
|
||||||
|
int danger;
|
||||||
|
int rouli;
|
||||||
|
|
||||||
|
//Dans le main voilier.c en theorie
|
||||||
|
int main(){
|
||||||
|
SystemClock_Config();
|
||||||
|
ConfSecurite();
|
||||||
|
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
|
||||||
|
/* Envoi message toute les 3 sec sur l'Allure et la tension voile */
|
||||||
|
if (drapeauTransimission){
|
||||||
|
//Envoi message régulier
|
||||||
|
drapeauTransmission = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Recuperation toute les 10 sec niveau batterie et angle chavirement, puis calcul des dangers */
|
||||||
|
if (drapeauRecupSecurite){
|
||||||
|
level = RecupNiveauBatterie();
|
||||||
|
CalculDangerNiveauBatterie( level );
|
||||||
|
rouli = RecupRouli()
|
||||||
|
CalculerDanger(rouli);
|
||||||
|
drapeauRecupSecurite = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Si batterie faible après recup (toute les 10 sec), envoi alerte batterie faible */
|
||||||
|
if (drapeauDangerBatterie){
|
||||||
|
char * msgBatterie = "Batterie faible";
|
||||||
|
EnvoiExcpetionnel(msgBatterie);
|
||||||
|
drapeauDangerBatterie = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Si angle chavirement pas bon après recup (toute les 10 sec), envoi alerte chavirement */
|
||||||
|
if (drapeauDangerRouli){
|
||||||
|
char * msgRouli = "Bateau chavire !";
|
||||||
|
EnvoiExcpetionnel(msgRouli);
|
||||||
|
drapeauDangerRouli = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
55
Src/Securite.h
Normal file
55
Src/Securite.h
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
#ifndef ANTI_CHAVIREMENT_H
|
||||||
|
#define ANTI_CHAVIREMENT_H
|
||||||
|
|
||||||
|
#include "stm32f103xb.h"
|
||||||
|
#include "stm32f1xx_ll_adc.h"
|
||||||
|
#include "stm32f1xx_ll_gpio.h"
|
||||||
|
#include "stm32f1xx_ll_bus.h"
|
||||||
|
#include "stm32f1xx_ll_utils.h" // utile dans la fonction SystemClock_Config
|
||||||
|
#include "stm32f1xx_ll_system.h" // utile dans la fonction SystemClock_Config
|
||||||
|
#include "stm32f1xx_ll_rcc.h" // utile dans la fonction SystemClock_Config
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @note
|
||||||
|
* @param
|
||||||
|
* @retval
|
||||||
|
*/
|
||||||
|
void CalculerDanger(int gamma);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @note
|
||||||
|
* @param
|
||||||
|
* @retval
|
||||||
|
*/
|
||||||
|
int RecupRouli();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @note
|
||||||
|
* @param
|
||||||
|
* @retval
|
||||||
|
*/
|
||||||
|
int RecupNiveauBatterie(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @note A lancer en 1er avant tout
|
||||||
|
* @param
|
||||||
|
* @retval
|
||||||
|
*/
|
||||||
|
void confSecurite(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @note
|
||||||
|
* @param
|
||||||
|
* @retval
|
||||||
|
*/
|
||||||
|
void CalculDangerNiveauBatterie(int niveau );
|
||||||
|
|
||||||
|
#endif
|
|
@ -15,9 +15,9 @@
|
||||||
void SystemClock_Config(void);
|
void SystemClock_Config(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief configure tous les periphs qu'on va utiliser en appelant les
|
* @brief configure tous les periphs qu'on va utiliser en appelant les
|
||||||
fonctions de config de chaque "module"
|
fonctions de config de chaque "module"
|
||||||
* @note
|
* @note
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
|
@ -26,58 +26,58 @@ void Setup(){
|
||||||
ConfAllure();
|
ConfAllure();
|
||||||
ConfVoile();
|
ConfVoile();
|
||||||
//ConfGouvernail();
|
//ConfGouvernail();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//on utilise EnvoiRegulier de Transmission
|
//on utilise EnvoiRegulier de Transmission
|
||||||
//TODO : récuperer les valeurs des params de EnvoiRegulier
|
//TODO : r<EFBFBD>cuperer les valeurs des params de EnvoiRegulier
|
||||||
//Interruption toute les 3s via un Timer qui déclenche cette fonction qui permet d'envoyer ce qu'il faut
|
//Interruption toute les 3s via un Timer qui d<EFBFBD>clenche cette fonction qui permet d'envoyer ce qu'il faut
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief
|
* @brief
|
||||||
* @note
|
* @note
|
||||||
* @param
|
* @param
|
||||||
* @retval
|
* @retval
|
||||||
*/
|
*/
|
||||||
void Envoi3s(){
|
void Envoi3s(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief tache qui va fonctionner en fond qui gere l'orientation
|
* @brief tache qui va fonctionner en fond qui gere l'orientation
|
||||||
des voiles, le gouvernail et aussi le systeme anti-chavirement
|
des voiles, le gouvernail et aussi le systeme anti-chavirement
|
||||||
* @note relacher les voiles <=> tendre les voiles avec un angle à 90°
|
* @note relacher les voiles <=> tendre les voiles avec un angle <EFBFBD> 90<EFBFBD>
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void Background(){
|
void Background(){
|
||||||
//Voiles
|
//Voiles
|
||||||
int allure = RecupAllure(); //on recupere l'allulre via la girouette
|
int allure = RecupAllure(); //on recupere l'allulre via la girouette
|
||||||
int tensionVoile = CalculerTension(allure); //grace à l'allure on peut calculer la tension à appliquer sur la voile
|
int tensionVoile = CalculerTension(allure); //grace <EFBFBD> l'allure on peut calculer la tension <20> appliquer sur la voile
|
||||||
TendreVoile(CalculerTension(RecupAllure())); //on tend la voile grâce à la tension obtenue
|
TendreVoile(CalculerTension(RecupAllure())); //on tend la voile gr<EFBFBD>ce <20> la tension obtenue
|
||||||
|
|
||||||
//Gouvernail
|
//Gouvernail
|
||||||
/*int valeurTelecommande = LireTelecommande(); //on lit la valeur renvoyée par la télécommande
|
/*int valeurTelecommande = LireTelecommande(); //on lit la valeur renvoy<EFBFBD>e par la t<>l<EFBFBD>commande
|
||||||
int vitesse = CalculerVitesse(valeurTelecommande);//gràace à la valeur de la telecommande on calcule la vitesse souhaitée
|
int vitesse = CalculerVitesse(valeurTelecommande);//gr<EFBFBD>ace <20> la valeur de la telecommande on calcule la vitesse souhait<69>e
|
||||||
CommanderMoteur(vitesse);//On commande le moteur pour aller à la vitesse voulue
|
CommanderMoteur(vitesse);//On commande le moteur pour aller <EFBFBD> la vitesse voulue
|
||||||
|
|
||||||
//Anti-Chavirement
|
//Anti-Chavirement
|
||||||
int rouli = RecupRouli();
|
int rouli = RecupRouli();
|
||||||
int danger = CalculerDanger(rouli);//renvoi boolean : int à 0 si faux et 1 si vrai
|
int danger = CalculerDanger(rouli);//renvoi boolean : int <EFBFBD> 0 si faux et 1 si vrai
|
||||||
if(danger){
|
if(danger){
|
||||||
TendreVoile(90); //si il y a danger on relache les voiles (relacher les voiles = les mettre à 90)
|
TendreVoile(90); //si il y a danger on relache les voiles (relacher les voiles = les mettre <EFBFBD> 90)
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
|
|
||||||
SystemClock_Config();
|
SystemClock_Config();
|
||||||
|
|
||||||
Setup();
|
Setup();
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
Background();
|
Background();
|
||||||
}
|
}
|
||||||
|
@ -106,7 +106,7 @@ void SystemClock_Config(void)
|
||||||
|
|
||||||
/* Enable HSE oscillator */
|
/* Enable HSE oscillator */
|
||||||
// ********* Commenter la ligne ci-dessous pour MCBSTM32 *****************
|
// ********* Commenter la ligne ci-dessous pour MCBSTM32 *****************
|
||||||
// ********* Conserver la ligne si Nucléo*********************************
|
// ********* Conserver la ligne si Nucl<EFBFBD>o*********************************
|
||||||
LL_RCC_HSE_EnableBypass();
|
LL_RCC_HSE_EnableBypass();
|
||||||
LL_RCC_HSE_Enable();
|
LL_RCC_HSE_Enable();
|
||||||
while(LL_RCC_HSE_IsReady() != 1)
|
while(LL_RCC_HSE_IsReady() != 1)
|
||||||
|
@ -133,7 +133,7 @@ void SystemClock_Config(void)
|
||||||
LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
|
LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
|
||||||
|
|
||||||
/* Set systick to 1ms in using frequency set to 72MHz */
|
/* Set systick to 1ms in using frequency set to 72MHz */
|
||||||
//LL_Init1msTick(72000000); !! décommenter que si l'IT est récupérée
|
//LL_Init1msTick(72000000); !! d<EFBFBD>commenter que si l'IT est r<>cup<75>r<EFBFBD>e
|
||||||
|
|
||||||
/* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
|
/* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
|
||||||
LL_SetSystemCoreClock(72000000);
|
LL_SetSystemCoreClock(72000000);
|
||||||
|
@ -173,4 +173,3 @@ void assert_failed(uint8_t *file, uint32_t line)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue