Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| be6f52fa8b | |||
| 6fee6323ea | |||
| 0df22b4186 | |||
| f0d3f51922 | |||
| afda00d8f2 | |||
| 72844ff821 | |||
| 70758b1c06 | |||
| de545c9919 | |||
| 9f200e2e83 | |||
| 73eccc6762 | |||
| d64379caf7 | |||
| 725e9ce1f2 | |||
| 6be01d6032 | |||
| 3faf9baf67 | |||
| 2efab2862f | |||
| cd594e3d69 | |||
| f3205e1cf7 | |||
| 9b06145341 |
@@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* Auto generated Run-Time-Environment Configuration File
|
||||||
|
* *** Do not modify ! ***
|
||||||
|
*
|
||||||
|
* Project: 'hc32l17x'
|
||||||
|
* Target: 'HC32L17X_boot'
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef RTE_COMPONENTS_H
|
||||||
|
#define RTE_COMPONENTS_H
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Define the Device Header File:
|
||||||
|
*/
|
||||||
|
#define CMSIS_device_header "HC32L170JATA.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* RTE_COMPONENTS_H */
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* Auto generated Run-Time-Environment Configuration File
|
||||||
|
* *** Do not modify ! ***
|
||||||
|
*
|
||||||
|
* Project: 'hc32l17x'
|
||||||
|
* Target: 'HC32L17X_debug'
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef RTE_COMPONENTS_H
|
||||||
|
#define RTE_COMPONENTS_H
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Define the Device Header File:
|
||||||
|
*/
|
||||||
|
#define CMSIS_device_header "HC32L170JATA.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* RTE_COMPONENTS_H */
|
||||||
+251
-8
@@ -22,7 +22,7 @@
|
|||||||
</DaveTm>
|
</DaveTm>
|
||||||
|
|
||||||
<Target>
|
<Target>
|
||||||
<TargetName>HC32L17X</TargetName>
|
<TargetName>HC32L17X_debug</TargetName>
|
||||||
<ToolsetNumber>0x4</ToolsetNumber>
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
<ToolsetName>ARM-ADS</ToolsetName>
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
<TargetOption>
|
<TargetOption>
|
||||||
@@ -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>255</CpuCode>
|
<CpuCode>255</CpuCode>
|
||||||
<DebugOpt>
|
<DebugOpt>
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>CMSIS_AGDI</Key>
|
<Key>CMSIS_AGDI</Key>
|
||||||
<Name>-X"Any" -UAny -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0FlashHC32L17X_128K.FLM -FS00 -FL020000 -FP0($$Device:HC32L170JATA$Flash\FlashHC32L17X_128K.FLM)</Name>
|
<Name>-X"Any" -UAny -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO31 -FD20000000 -FC1000 -FN1 -FF0FlashHC32L17X_128K.FLM -FS00 -FL020000 -FP0($$Device:HC32L170JATA$Flash\FlashHC32L17X_128K.FLM)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
@@ -250,6 +250,249 @@
|
|||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>App.LaserFlag,0x0A</ItemText>
|
<ItemText>App.LaserFlag,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>19</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>BLPara,0x10</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>20</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>argv1,0x10</ItemText>
|
||||||
|
</Ww>
|
||||||
|
</WatchWindow1>
|
||||||
|
<MemoryWindow1>
|
||||||
|
<Mm>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<SubType>0</SubType>
|
||||||
|
<ItemText>0x1fe00</ItemText>
|
||||||
|
<AccSizeX>0</AccSizeX>
|
||||||
|
</Mm>
|
||||||
|
</MemoryWindow1>
|
||||||
|
<MemoryWindow2>
|
||||||
|
<Mm>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<SubType>2</SubType>
|
||||||
|
<ItemText>0x20000f35</ItemText>
|
||||||
|
<AccSizeX>0</AccSizeX>
|
||||||
|
</Mm>
|
||||||
|
</MemoryWindow2>
|
||||||
|
<Tracepoint>
|
||||||
|
<THDelay>0</THDelay>
|
||||||
|
</Tracepoint>
|
||||||
|
<DebugFlag>
|
||||||
|
<trace>0</trace>
|
||||||
|
<periodic>1</periodic>
|
||||||
|
<aLwin>1</aLwin>
|
||||||
|
<aCover>0</aCover>
|
||||||
|
<aSer1>0</aSer1>
|
||||||
|
<aSer2>0</aSer2>
|
||||||
|
<aPa>0</aPa>
|
||||||
|
<viewmode>1</viewmode>
|
||||||
|
<vrSel>0</vrSel>
|
||||||
|
<aSym>0</aSym>
|
||||||
|
<aTbox>0</aTbox>
|
||||||
|
<AscS1>0</AscS1>
|
||||||
|
<AscS2>0</AscS2>
|
||||||
|
<AscS3>0</AscS3>
|
||||||
|
<aSer3>0</aSer3>
|
||||||
|
<eProf>0</eProf>
|
||||||
|
<aLa>0</aLa>
|
||||||
|
<aPa1>0</aPa1>
|
||||||
|
<AscS4>0</AscS4>
|
||||||
|
<aSer4>0</aSer4>
|
||||||
|
<StkLoc>0</StkLoc>
|
||||||
|
<TrcWin>0</TrcWin>
|
||||||
|
<newCpu>0</newCpu>
|
||||||
|
<uProt>0</uProt>
|
||||||
|
</DebugFlag>
|
||||||
|
<LintExecutable></LintExecutable>
|
||||||
|
<LintConfigFile></LintConfigFile>
|
||||||
|
<bLintAuto>0</bLintAuto>
|
||||||
|
<bAutoGenD>0</bAutoGenD>
|
||||||
|
<LntExFlags>0</LntExFlags>
|
||||||
|
<pMisraName></pMisraName>
|
||||||
|
<pszMrule></pszMrule>
|
||||||
|
<pSingCmds></pSingCmds>
|
||||||
|
<pMultCmds></pMultCmds>
|
||||||
|
<pMisraNamep></pMisraNamep>
|
||||||
|
<pszMrulep></pszMrulep>
|
||||||
|
<pSingCmdsp></pSingCmdsp>
|
||||||
|
<pMultCmdsp></pMultCmdsp>
|
||||||
|
<DebugDescription>
|
||||||
|
<Enable>1</Enable>
|
||||||
|
<EnableFlashSeq>0</EnableFlashSeq>
|
||||||
|
<EnableLog>0</EnableLog>
|
||||||
|
<Protocol>2</Protocol>
|
||||||
|
<DbgClock>10000000</DbgClock>
|
||||||
|
</DebugDescription>
|
||||||
|
</TargetOption>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target>
|
||||||
|
<TargetName>HC32L17X_boot</TargetName>
|
||||||
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
|
<TargetOption>
|
||||||
|
<CLKADS>12000000</CLKADS>
|
||||||
|
<OPTTT>
|
||||||
|
<gFlags>1</gFlags>
|
||||||
|
<BeepAtEnd>1</BeepAtEnd>
|
||||||
|
<RunSim>0</RunSim>
|
||||||
|
<RunTarget>1</RunTarget>
|
||||||
|
<RunAbUc>0</RunAbUc>
|
||||||
|
</OPTTT>
|
||||||
|
<OPTHX>
|
||||||
|
<HexSelection>1</HexSelection>
|
||||||
|
<FlashByte>65535</FlashByte>
|
||||||
|
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||||
|
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||||
|
<HexOffset>0</HexOffset>
|
||||||
|
</OPTHX>
|
||||||
|
<OPTLEX>
|
||||||
|
<PageWidth>79</PageWidth>
|
||||||
|
<PageLength>66</PageLength>
|
||||||
|
<TabStop>8</TabStop>
|
||||||
|
<ListingPath>.\output\release\</ListingPath>
|
||||||
|
</OPTLEX>
|
||||||
|
<ListingPage>
|
||||||
|
<CreateCListing>1</CreateCListing>
|
||||||
|
<CreateAListing>1</CreateAListing>
|
||||||
|
<CreateLListing>1</CreateLListing>
|
||||||
|
<CreateIListing>0</CreateIListing>
|
||||||
|
<AsmCond>1</AsmCond>
|
||||||
|
<AsmSymb>1</AsmSymb>
|
||||||
|
<AsmXref>0</AsmXref>
|
||||||
|
<CCond>1</CCond>
|
||||||
|
<CCode>0</CCode>
|
||||||
|
<CListInc>0</CListInc>
|
||||||
|
<CSymb>0</CSymb>
|
||||||
|
<LinkerCodeListing>0</LinkerCodeListing>
|
||||||
|
</ListingPage>
|
||||||
|
<OPTXL>
|
||||||
|
<LMap>1</LMap>
|
||||||
|
<LComments>1</LComments>
|
||||||
|
<LGenerateSymbols>1</LGenerateSymbols>
|
||||||
|
<LLibSym>1</LLibSym>
|
||||||
|
<LLines>1</LLines>
|
||||||
|
<LLocSym>1</LLocSym>
|
||||||
|
<LPubSym>1</LPubSym>
|
||||||
|
<LXref>0</LXref>
|
||||||
|
<LExpSel>0</LExpSel>
|
||||||
|
</OPTXL>
|
||||||
|
<OPTFL>
|
||||||
|
<tvExp>1</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<IsCurrentTarget>1</IsCurrentTarget>
|
||||||
|
</OPTFL>
|
||||||
|
<CpuCode>255</CpuCode>
|
||||||
|
<DebugOpt>
|
||||||
|
<uSim>0</uSim>
|
||||||
|
<uTrg>1</uTrg>
|
||||||
|
<sLdApp>1</sLdApp>
|
||||||
|
<sGomain>1</sGomain>
|
||||||
|
<sRbreak>1</sRbreak>
|
||||||
|
<sRwatch>1</sRwatch>
|
||||||
|
<sRmem>1</sRmem>
|
||||||
|
<sRfunc>1</sRfunc>
|
||||||
|
<sRbox>1</sRbox>
|
||||||
|
<tLdApp>1</tLdApp>
|
||||||
|
<tGomain>1</tGomain>
|
||||||
|
<tRbreak>1</tRbreak>
|
||||||
|
<tRwatch>1</tRwatch>
|
||||||
|
<tRmem>1</tRmem>
|
||||||
|
<tRfunc>0</tRfunc>
|
||||||
|
<tRbox>1</tRbox>
|
||||||
|
<tRtrace>1</tRtrace>
|
||||||
|
<sRSysVw>1</sRSysVw>
|
||||||
|
<tRSysVw>1</tRSysVw>
|
||||||
|
<sRunDeb>0</sRunDeb>
|
||||||
|
<sLrtime>0</sLrtime>
|
||||||
|
<bEvRecOn>1</bEvRecOn>
|
||||||
|
<bSchkAxf>0</bSchkAxf>
|
||||||
|
<bTchkAxf>0</bTchkAxf>
|
||||||
|
<nTsel>12</nTsel>
|
||||||
|
<sDll></sDll>
|
||||||
|
<sDllPa></sDllPa>
|
||||||
|
<sDlgDll></sDlgDll>
|
||||||
|
<sDlgPa></sDlgPa>
|
||||||
|
<sIfile></sIfile>
|
||||||
|
<tDll></tDll>
|
||||||
|
<tDllPa></tDllPa>
|
||||||
|
<tDlgDll></tDlgDll>
|
||||||
|
<tDlgPa></tDlgPa>
|
||||||
|
<tIfile></tIfile>
|
||||||
|
<pMon>BIN\CMSIS_AGDI.dll</pMon>
|
||||||
|
</DebugOpt>
|
||||||
|
<TargetDriverDllRegistry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>DLGUARM</Key>
|
||||||
|
<Name></Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>CMSIS_AGDI</Key>
|
||||||
|
<Name>-X"Any" -UAny -O206 -S9 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO14 -FD20000000 -FC1000 -FN1 -FF0FlashHC32L17X_128K.FLM -FS00 -FL020000 -FP0($$Device:HC32L170JATA$Flash\FlashHC32L17X_128K.FLM)</Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>UL2CM3</Key>
|
||||||
|
<Name>UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0FlashHC32L17X_128K -FL020000 -FS00 -FP0($$Device:HC32L170JATA$Flash\FlashHC32L17X_128K.FLM)</Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>JL2CM3</Key>
|
||||||
|
<Name>-U4294967295 -O78 -S1 -ZTIFSpeedSel10000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8027 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0FlashHC32L17X_128K.FLM -FS00 -FL020000 -FP0($$Device:HC32L170JATA$Flash\FlashHC32L17X_128K.FLM)</Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>ARMRTXEVENTFLAGS</Key>
|
||||||
|
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>DLGTARM</Key>
|
||||||
|
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
<SetRegEntry>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Key>ARMDBGFLAGS</Key>
|
||||||
|
<Name></Name>
|
||||||
|
</SetRegEntry>
|
||||||
|
</TargetDriverDllRegistry>
|
||||||
|
<Breakpoint/>
|
||||||
|
<WatchWindow1>
|
||||||
|
<Ww>
|
||||||
|
<count>0</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>App,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>1</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>LocalMAC</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>2</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>SGCP.LoginOk</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>3</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>SGCP.UploadOk</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>4</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>App.Login_LPTimer0</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>5</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>App.Upload_LPTimer0</ItemText>
|
||||||
|
</Ww>
|
||||||
</WatchWindow1>
|
</WatchWindow1>
|
||||||
<MemoryWindow1>
|
<MemoryWindow1>
|
||||||
<Mm>
|
<Mm>
|
||||||
@@ -314,7 +557,7 @@
|
|||||||
<EnableFlashSeq>0</EnableFlashSeq>
|
<EnableFlashSeq>0</EnableFlashSeq>
|
||||||
<EnableLog>0</EnableLog>
|
<EnableLog>0</EnableLog>
|
||||||
<Protocol>2</Protocol>
|
<Protocol>2</Protocol>
|
||||||
<DbgClock>10000000</DbgClock>
|
<DbgClock>5000000</DbgClock>
|
||||||
</DebugDescription>
|
</DebugDescription>
|
||||||
</TargetOption>
|
</TargetOption>
|
||||||
</Target>
|
</Target>
|
||||||
@@ -657,7 +900,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Debug</GroupName>
|
<GroupName>Debug</GroupName>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@@ -668,7 +911,7 @@
|
|||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\Module\Debug\UartDebug.c</PathWithFileName>
|
<PathWithFileName>..\Module\LaserTracing_Debug\UartDebug.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>UartDebug.c</FilenameWithoutPath>
|
<FilenameWithoutPath>UartDebug.c</FilenameWithoutPath>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
@@ -729,7 +972,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>LORA</GroupName>
|
<GroupName>LORA</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@@ -737,7 +980,7 @@
|
|||||||
<GroupNumber>7</GroupNumber>
|
<GroupNumber>7</GroupNumber>
|
||||||
<FileNumber>31</FileNumber>
|
<FileNumber>31</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\Module\LORA\sx127x.c</PathWithFileName>
|
<PathWithFileName>..\Module\LORA\sx127x.c</PathWithFileName>
|
||||||
|
|||||||
+636
-6
@@ -7,7 +7,598 @@
|
|||||||
|
|
||||||
<Targets>
|
<Targets>
|
||||||
<Target>
|
<Target>
|
||||||
<TargetName>HC32L17X</TargetName>
|
<TargetName>HC32L17X_debug</TargetName>
|
||||||
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
|
<pArmCC>6160000::V6.16::ARMCLANG</pArmCC>
|
||||||
|
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
|
||||||
|
<uAC6>1</uAC6>
|
||||||
|
<TargetOption>
|
||||||
|
<TargetCommonOption>
|
||||||
|
<Device>HC32L170JATA</Device>
|
||||||
|
<Vendor>HDSC</Vendor>
|
||||||
|
<PackID>HDSC.HC32L17X.1.0.1</PackID>
|
||||||
|
<PackURL>https://raw.githubusercontent.com/hdscmcu/pack/master/</PackURL>
|
||||||
|
<Cpu>IRAM(0x20000000,0x4000) IROM(0x00000000,0x20000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE</Cpu>
|
||||||
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
|
<StartupFile></StartupFile>
|
||||||
|
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0FlashHC32L17X_128K -FS00 -FL020000 -FP0($$Device:HC32L170JATA$Flash\FlashHC32L17X_128K.FLM))</FlashDriverDll>
|
||||||
|
<DeviceId>0</DeviceId>
|
||||||
|
<RegisterFile>$$Device:HC32L170JATA$Device\Include\HC32L170JATA.h</RegisterFile>
|
||||||
|
<MemoryEnv></MemoryEnv>
|
||||||
|
<Cmp></Cmp>
|
||||||
|
<Asm></Asm>
|
||||||
|
<Linker></Linker>
|
||||||
|
<OHString></OHString>
|
||||||
|
<InfinionOptionDll></InfinionOptionDll>
|
||||||
|
<SLE66CMisc></SLE66CMisc>
|
||||||
|
<SLE66AMisc></SLE66AMisc>
|
||||||
|
<SLE66LinkerMisc></SLE66LinkerMisc>
|
||||||
|
<SFDFile>$$Device:HC32L170JATA$SVD\HC32L170JATA.sfr</SFDFile>
|
||||||
|
<bCustSvd>1</bCustSvd>
|
||||||
|
<UseEnv>0</UseEnv>
|
||||||
|
<BinPath></BinPath>
|
||||||
|
<IncludePath></IncludePath>
|
||||||
|
<LibPath></LibPath>
|
||||||
|
<RegisterFilePath></RegisterFilePath>
|
||||||
|
<DBRegisterFilePath></DBRegisterFilePath>
|
||||||
|
<TargetStatus>
|
||||||
|
<Error>0</Error>
|
||||||
|
<ExitCodeStop>0</ExitCodeStop>
|
||||||
|
<ButtonStop>0</ButtonStop>
|
||||||
|
<NotGenerated>0</NotGenerated>
|
||||||
|
<InvalidFlash>1</InvalidFlash>
|
||||||
|
</TargetStatus>
|
||||||
|
<OutputDirectory>.\output\</OutputDirectory>
|
||||||
|
<OutputName>hc32l17x</OutputName>
|
||||||
|
<CreateExecutable>1</CreateExecutable>
|
||||||
|
<CreateLib>0</CreateLib>
|
||||||
|
<CreateHexFile>1</CreateHexFile>
|
||||||
|
<DebugInformation>1</DebugInformation>
|
||||||
|
<BrowseInformation>1</BrowseInformation>
|
||||||
|
<ListingPath>.\output\release\</ListingPath>
|
||||||
|
<HexFormatSelection>1</HexFormatSelection>
|
||||||
|
<Merge32K>0</Merge32K>
|
||||||
|
<CreateBatchFile>0</CreateBatchFile>
|
||||||
|
<BeforeCompile>
|
||||||
|
<RunUserProg1>0</RunUserProg1>
|
||||||
|
<RunUserProg2>0</RunUserProg2>
|
||||||
|
<UserProg1Name></UserProg1Name>
|
||||||
|
<UserProg2Name></UserProg2Name>
|
||||||
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||||
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||||
|
<nStopU1X>0</nStopU1X>
|
||||||
|
<nStopU2X>0</nStopU2X>
|
||||||
|
</BeforeCompile>
|
||||||
|
<BeforeMake>
|
||||||
|
<RunUserProg1>0</RunUserProg1>
|
||||||
|
<RunUserProg2>0</RunUserProg2>
|
||||||
|
<UserProg1Name></UserProg1Name>
|
||||||
|
<UserProg2Name></UserProg2Name>
|
||||||
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||||
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||||
|
<nStopB1X>0</nStopB1X>
|
||||||
|
<nStopB2X>0</nStopB2X>
|
||||||
|
</BeforeMake>
|
||||||
|
<AfterMake>
|
||||||
|
<RunUserProg1>0</RunUserProg1>
|
||||||
|
<RunUserProg2>1</RunUserProg2>
|
||||||
|
<UserProg1Name></UserProg1Name>
|
||||||
|
<UserProg2Name>D:\Keil5\ARM\ARMCC\bin\fromelf.exe --bin -o .\output\app.bin .\output\hc32l17x.axf</UserProg2Name>
|
||||||
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||||
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||||
|
<nStopA1X>0</nStopA1X>
|
||||||
|
<nStopA2X>0</nStopA2X>
|
||||||
|
</AfterMake>
|
||||||
|
<SelectedForBatchBuild>0</SelectedForBatchBuild>
|
||||||
|
<SVCSIdString></SVCSIdString>
|
||||||
|
</TargetCommonOption>
|
||||||
|
<CommonProperty>
|
||||||
|
<UseCPPCompiler>0</UseCPPCompiler>
|
||||||
|
<RVCTCodeConst>0</RVCTCodeConst>
|
||||||
|
<RVCTZI>0</RVCTZI>
|
||||||
|
<RVCTOtherData>0</RVCTOtherData>
|
||||||
|
<ModuleSelection>0</ModuleSelection>
|
||||||
|
<IncludeInBuild>1</IncludeInBuild>
|
||||||
|
<AlwaysBuild>0</AlwaysBuild>
|
||||||
|
<GenerateAssemblyFile>0</GenerateAssemblyFile>
|
||||||
|
<AssembleAssemblyFile>0</AssembleAssemblyFile>
|
||||||
|
<PublicsOnly>0</PublicsOnly>
|
||||||
|
<StopOnExitCode>3</StopOnExitCode>
|
||||||
|
<CustomArgument></CustomArgument>
|
||||||
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
|
</CommonProperty>
|
||||||
|
<DllOption>
|
||||||
|
<SimDllName>SARMCM3.DLL</SimDllName>
|
||||||
|
<SimDllArguments> </SimDllArguments>
|
||||||
|
<SimDlgDll>DARMCM1.DLL</SimDlgDll>
|
||||||
|
<SimDlgDllArguments>-pCM0+</SimDlgDllArguments>
|
||||||
|
<TargetDllName>SARMCM3.DLL</TargetDllName>
|
||||||
|
<TargetDllArguments> </TargetDllArguments>
|
||||||
|
<TargetDlgDll>TARMCM1.DLL</TargetDlgDll>
|
||||||
|
<TargetDlgDllArguments>-pCM0+</TargetDlgDllArguments>
|
||||||
|
</DllOption>
|
||||||
|
<DebugOption>
|
||||||
|
<OPTHX>
|
||||||
|
<HexSelection>1</HexSelection>
|
||||||
|
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||||
|
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||||
|
<HexOffset>0</HexOffset>
|
||||||
|
<Oh166RecLen>16</Oh166RecLen>
|
||||||
|
</OPTHX>
|
||||||
|
</DebugOption>
|
||||||
|
<Utilities>
|
||||||
|
<Flash1>
|
||||||
|
<UseTargetDll>1</UseTargetDll>
|
||||||
|
<UseExternalTool>0</UseExternalTool>
|
||||||
|
<RunIndependent>0</RunIndependent>
|
||||||
|
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
|
||||||
|
<Capability>1</Capability>
|
||||||
|
<DriverSelection>4096</DriverSelection>
|
||||||
|
</Flash1>
|
||||||
|
<bUseTDR>1</bUseTDR>
|
||||||
|
<Flash2>BIN\UL2CM3.DLL</Flash2>
|
||||||
|
<Flash3>"" ()</Flash3>
|
||||||
|
<Flash4></Flash4>
|
||||||
|
<pFcarmOut></pFcarmOut>
|
||||||
|
<pFcarmGrp></pFcarmGrp>
|
||||||
|
<pFcArmRoot></pFcArmRoot>
|
||||||
|
<FcArmLst>0</FcArmLst>
|
||||||
|
</Utilities>
|
||||||
|
<TargetArmAds>
|
||||||
|
<ArmAdsMisc>
|
||||||
|
<GenerateListings>0</GenerateListings>
|
||||||
|
<asHll>1</asHll>
|
||||||
|
<asAsm>1</asAsm>
|
||||||
|
<asMacX>1</asMacX>
|
||||||
|
<asSyms>1</asSyms>
|
||||||
|
<asFals>1</asFals>
|
||||||
|
<asDbgD>1</asDbgD>
|
||||||
|
<asForm>1</asForm>
|
||||||
|
<ldLst>0</ldLst>
|
||||||
|
<ldmm>1</ldmm>
|
||||||
|
<ldXref>1</ldXref>
|
||||||
|
<BigEnd>0</BigEnd>
|
||||||
|
<AdsALst>0</AdsALst>
|
||||||
|
<AdsACrf>0</AdsACrf>
|
||||||
|
<AdsANop>0</AdsANop>
|
||||||
|
<AdsANot>0</AdsANot>
|
||||||
|
<AdsLLst>1</AdsLLst>
|
||||||
|
<AdsLmap>1</AdsLmap>
|
||||||
|
<AdsLcgr>0</AdsLcgr>
|
||||||
|
<AdsLsym>1</AdsLsym>
|
||||||
|
<AdsLszi>1</AdsLszi>
|
||||||
|
<AdsLtoi>1</AdsLtoi>
|
||||||
|
<AdsLsun>0</AdsLsun>
|
||||||
|
<AdsLven>0</AdsLven>
|
||||||
|
<AdsLsxf>0</AdsLsxf>
|
||||||
|
<RvctClst>0</RvctClst>
|
||||||
|
<GenPPlst>0</GenPPlst>
|
||||||
|
<AdsCpuType>"Cortex-M0+"</AdsCpuType>
|
||||||
|
<RvctDeviceName></RvctDeviceName>
|
||||||
|
<mOS>0</mOS>
|
||||||
|
<uocRom>0</uocRom>
|
||||||
|
<uocRam>0</uocRam>
|
||||||
|
<hadIROM>1</hadIROM>
|
||||||
|
<hadIRAM>1</hadIRAM>
|
||||||
|
<hadXRAM>0</hadXRAM>
|
||||||
|
<uocXRam>0</uocXRam>
|
||||||
|
<RvdsVP>0</RvdsVP>
|
||||||
|
<RvdsMve>0</RvdsMve>
|
||||||
|
<RvdsCdeCp>0</RvdsCdeCp>
|
||||||
|
<nBranchProt>0</nBranchProt>
|
||||||
|
<hadIRAM2>0</hadIRAM2>
|
||||||
|
<hadIROM2>0</hadIROM2>
|
||||||
|
<StupSel>8</StupSel>
|
||||||
|
<useUlib>1</useUlib>
|
||||||
|
<EndSel>0</EndSel>
|
||||||
|
<uLtcg>0</uLtcg>
|
||||||
|
<nSecure>0</nSecure>
|
||||||
|
<RoSelD>3</RoSelD>
|
||||||
|
<RwSelD>3</RwSelD>
|
||||||
|
<CodeSel>0</CodeSel>
|
||||||
|
<OptFeed>0</OptFeed>
|
||||||
|
<NoZi1>0</NoZi1>
|
||||||
|
<NoZi2>0</NoZi2>
|
||||||
|
<NoZi3>0</NoZi3>
|
||||||
|
<NoZi4>0</NoZi4>
|
||||||
|
<NoZi5>0</NoZi5>
|
||||||
|
<Ro1Chk>0</Ro1Chk>
|
||||||
|
<Ro2Chk>0</Ro2Chk>
|
||||||
|
<Ro3Chk>0</Ro3Chk>
|
||||||
|
<Ir1Chk>1</Ir1Chk>
|
||||||
|
<Ir2Chk>0</Ir2Chk>
|
||||||
|
<Ra1Chk>0</Ra1Chk>
|
||||||
|
<Ra2Chk>0</Ra2Chk>
|
||||||
|
<Ra3Chk>0</Ra3Chk>
|
||||||
|
<Im1Chk>1</Im1Chk>
|
||||||
|
<Im2Chk>0</Im2Chk>
|
||||||
|
<OnChipMemories>
|
||||||
|
<Ocm1>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</Ocm1>
|
||||||
|
<Ocm2>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</Ocm2>
|
||||||
|
<Ocm3>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</Ocm3>
|
||||||
|
<Ocm4>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</Ocm4>
|
||||||
|
<Ocm5>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</Ocm5>
|
||||||
|
<Ocm6>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</Ocm6>
|
||||||
|
<IRAM>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x20000000</StartAddress>
|
||||||
|
<Size>0x4000</Size>
|
||||||
|
</IRAM>
|
||||||
|
<IROM>
|
||||||
|
<Type>1</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x20000</Size>
|
||||||
|
</IROM>
|
||||||
|
<XRAM>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</XRAM>
|
||||||
|
<OCR_RVCT1>
|
||||||
|
<Type>1</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT1>
|
||||||
|
<OCR_RVCT2>
|
||||||
|
<Type>1</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT2>
|
||||||
|
<OCR_RVCT3>
|
||||||
|
<Type>1</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT3>
|
||||||
|
<OCR_RVCT4>
|
||||||
|
<Type>1</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x20000</Size>
|
||||||
|
</OCR_RVCT4>
|
||||||
|
<OCR_RVCT5>
|
||||||
|
<Type>1</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT5>
|
||||||
|
<OCR_RVCT6>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT6>
|
||||||
|
<OCR_RVCT7>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT7>
|
||||||
|
<OCR_RVCT8>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT8>
|
||||||
|
<OCR_RVCT9>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x20000000</StartAddress>
|
||||||
|
<Size>0x4000</Size>
|
||||||
|
</OCR_RVCT9>
|
||||||
|
<OCR_RVCT10>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT10>
|
||||||
|
</OnChipMemories>
|
||||||
|
<RvctStartVector></RvctStartVector>
|
||||||
|
</ArmAdsMisc>
|
||||||
|
<Cads>
|
||||||
|
<interw>1</interw>
|
||||||
|
<Optim>1</Optim>
|
||||||
|
<oTime>0</oTime>
|
||||||
|
<SplitLS>0</SplitLS>
|
||||||
|
<OneElfS>1</OneElfS>
|
||||||
|
<Strict>0</Strict>
|
||||||
|
<EnumInt>1</EnumInt>
|
||||||
|
<PlainCh>0</PlainCh>
|
||||||
|
<Ropi>0</Ropi>
|
||||||
|
<Rwpi>0</Rwpi>
|
||||||
|
<wLevel>3</wLevel>
|
||||||
|
<uThumb>0</uThumb>
|
||||||
|
<uSurpInc>0</uSurpInc>
|
||||||
|
<uC99>1</uC99>
|
||||||
|
<uGnu>1</uGnu>
|
||||||
|
<useXO>0</useXO>
|
||||||
|
<v6Lang>4</v6Lang>
|
||||||
|
<v6LangP>5</v6LangP>
|
||||||
|
<vShortEn>0</vShortEn>
|
||||||
|
<vShortWch>0</vShortWch>
|
||||||
|
<v6Lto>0</v6Lto>
|
||||||
|
<v6WtE>0</v6WtE>
|
||||||
|
<v6Rtti>0</v6Rtti>
|
||||||
|
<VariousControls>
|
||||||
|
<MiscControls></MiscControls>
|
||||||
|
<Define></Define>
|
||||||
|
<Undefine></Undefine>
|
||||||
|
<IncludePath>..\mcu\common;..\source;..\driver\inc;..\source\inc;..\Module\LaserTracing_Debug;..\Module\lsm6dsl;..\Module\MMC5983;..\Module\LORA;..\Module\Imu</IncludePath>
|
||||||
|
</VariousControls>
|
||||||
|
</Cads>
|
||||||
|
<Aads>
|
||||||
|
<interw>1</interw>
|
||||||
|
<Ropi>0</Ropi>
|
||||||
|
<Rwpi>0</Rwpi>
|
||||||
|
<thumb>0</thumb>
|
||||||
|
<SplitLS>0</SplitLS>
|
||||||
|
<SwStkChk>0</SwStkChk>
|
||||||
|
<NoWarn>0</NoWarn>
|
||||||
|
<uSurpInc>0</uSurpInc>
|
||||||
|
<useXO>0</useXO>
|
||||||
|
<ClangAsOpt>4</ClangAsOpt>
|
||||||
|
<VariousControls>
|
||||||
|
<MiscControls></MiscControls>
|
||||||
|
<Define></Define>
|
||||||
|
<Undefine></Undefine>
|
||||||
|
<IncludePath></IncludePath>
|
||||||
|
</VariousControls>
|
||||||
|
</Aads>
|
||||||
|
<LDads>
|
||||||
|
<umfTarg>1</umfTarg>
|
||||||
|
<Ropi>0</Ropi>
|
||||||
|
<Rwpi>0</Rwpi>
|
||||||
|
<noStLib>0</noStLib>
|
||||||
|
<RepFail>1</RepFail>
|
||||||
|
<useFile>0</useFile>
|
||||||
|
<TextAddressRange>0x00000000</TextAddressRange>
|
||||||
|
<DataAddressRange>0x20000000</DataAddressRange>
|
||||||
|
<pXoBase></pXoBase>
|
||||||
|
<ScatterFile>template.sct</ScatterFile>
|
||||||
|
<IncludeLibs></IncludeLibs>
|
||||||
|
<IncludeLibsPath></IncludeLibsPath>
|
||||||
|
<Misc>--keep=*Handler</Misc>
|
||||||
|
<LinkerInputFile></LinkerInputFile>
|
||||||
|
<DisabledWarnings></DisabledWarnings>
|
||||||
|
</LDads>
|
||||||
|
</TargetArmAds>
|
||||||
|
</TargetOption>
|
||||||
|
<Groups>
|
||||||
|
<Group>
|
||||||
|
<GroupName>common</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>startup_hc32l17x.s</FileName>
|
||||||
|
<FileType>2</FileType>
|
||||||
|
<FilePath>.\startup_hc32l17x.s</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>system_hc32l17x.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\mcu\common\system_hc32l17x.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>interrupts_hc32l17x.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\mcu\common\interrupts_hc32l17x.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>source</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>main.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\source\Src\main.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>bsp.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\source\src\bsp.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>Algorithm.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\source\src\Algorithm.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>SGCP.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\source\src\SGCP.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>Update.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\source\src\Update.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>driver</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>dmac.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\dmac.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>flash.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\flash.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>gpio.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\gpio.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>lpm.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\lpm.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>lpuart.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\lpuart.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>spi.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\spi.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>uart.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\uart.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>wdt.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\wdt.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>ddl.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\ddl.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>sysctrl.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\sysctrl.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>reset.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\reset.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>lptim.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\lptim.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>rtc.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\rtc.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>trim.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\trim.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>i2c.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\i2c.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>bt.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\bt.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>adc.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\adc.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>bgr.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\driver\src\bgr.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>Debug</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>UartDebug.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\Module\LaserTracing_Debug\UartDebug.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>LSM6DSL</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>lsm6dsl_reg.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\Module\lsm6dsl\lsm6dsl_reg.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>lsm6dsl_app.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\Module\lsm6dsl\lsm6dsl_app.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>MMC5893</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>mmc5983.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\Module\MMC5983\mmc5983.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>LORA</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>sx127x.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\Module\LORA\sx127x.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>Imu</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>Imu.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\Module\Imu\Imu.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>ReadMe</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>ReadMe.txt</FileName>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<FilePath>..\ReadMe.txt</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>::CMSIS</GroupName>
|
||||||
|
</Group>
|
||||||
|
</Groups>
|
||||||
|
</Target>
|
||||||
|
<Target>
|
||||||
|
<TargetName>HC32L17X_boot</TargetName>
|
||||||
<ToolsetNumber>0x4</ToolsetNumber>
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
<ToolsetName>ARM-ADS</ToolsetName>
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
<pArmCC>6160000::V6.16::ARMCLANG</pArmCC>
|
<pArmCC>6160000::V6.16::ARMCLANG</pArmCC>
|
||||||
@@ -330,7 +921,7 @@
|
|||||||
<uC99>1</uC99>
|
<uC99>1</uC99>
|
||||||
<uGnu>0</uGnu>
|
<uGnu>0</uGnu>
|
||||||
<useXO>0</useXO>
|
<useXO>0</useXO>
|
||||||
<v6Lang>3</v6Lang>
|
<v6Lang>4</v6Lang>
|
||||||
<v6LangP>5</v6LangP>
|
<v6LangP>5</v6LangP>
|
||||||
<vShortEn>0</vShortEn>
|
<vShortEn>0</vShortEn>
|
||||||
<vShortWch>0</vShortWch>
|
<vShortWch>0</vShortWch>
|
||||||
@@ -339,9 +930,9 @@
|
|||||||
<v6Rtti>0</v6Rtti>
|
<v6Rtti>0</v6Rtti>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define>USE_BOOTLOADER,</Define>
|
||||||
<Undefine></Undefine>
|
<Undefine></Undefine>
|
||||||
<IncludePath>..\mcu\common;..\source;..\driver\inc;..\source\inc;..\Module\Debug;..\Module\lsm6dsl;..\Module\MMC5983;..\Module\LORA;..\Module\Imu</IncludePath>
|
<IncludePath>..\mcu\common;..\source;..\driver\inc;..\source\inc;..\Module\LaserTracing_Debug;..\Module\lsm6dsl;..\Module\MMC5983;..\Module\LORA;..\Module\Imu</IncludePath>
|
||||||
</VariousControls>
|
</VariousControls>
|
||||||
</Cads>
|
</Cads>
|
||||||
<Aads>
|
<Aads>
|
||||||
@@ -389,6 +980,44 @@
|
|||||||
<FileName>startup_hc32l17x.s</FileName>
|
<FileName>startup_hc32l17x.s</FileName>
|
||||||
<FileType>2</FileType>
|
<FileType>2</FileType>
|
||||||
<FilePath>.\startup_hc32l17x.s</FilePath>
|
<FilePath>.\startup_hc32l17x.s</FilePath>
|
||||||
|
<FileOption>
|
||||||
|
<CommonProperty>
|
||||||
|
<UseCPPCompiler>2</UseCPPCompiler>
|
||||||
|
<RVCTCodeConst>0</RVCTCodeConst>
|
||||||
|
<RVCTZI>0</RVCTZI>
|
||||||
|
<RVCTOtherData>0</RVCTOtherData>
|
||||||
|
<ModuleSelection>0</ModuleSelection>
|
||||||
|
<IncludeInBuild>2</IncludeInBuild>
|
||||||
|
<AlwaysBuild>2</AlwaysBuild>
|
||||||
|
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||||
|
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||||
|
<PublicsOnly>2</PublicsOnly>
|
||||||
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
|
<CustomArgument></CustomArgument>
|
||||||
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
|
</CommonProperty>
|
||||||
|
<FileArmAds>
|
||||||
|
<Aads>
|
||||||
|
<interw>2</interw>
|
||||||
|
<Ropi>2</Ropi>
|
||||||
|
<Rwpi>2</Rwpi>
|
||||||
|
<thumb>2</thumb>
|
||||||
|
<SplitLS>2</SplitLS>
|
||||||
|
<SwStkChk>2</SwStkChk>
|
||||||
|
<NoWarn>2</NoWarn>
|
||||||
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<useXO>2</useXO>
|
||||||
|
<ClangAsOpt>0</ClangAsOpt>
|
||||||
|
<VariousControls>
|
||||||
|
<MiscControls></MiscControls>
|
||||||
|
<Define>USE_BOOTLOADER</Define>
|
||||||
|
<Undefine></Undefine>
|
||||||
|
<IncludePath></IncludePath>
|
||||||
|
</VariousControls>
|
||||||
|
</Aads>
|
||||||
|
</FileArmAds>
|
||||||
|
</FileOption>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>system_hc32l17x.c</FileName>
|
<FileName>system_hc32l17x.c</FileName>
|
||||||
@@ -533,7 +1162,7 @@
|
|||||||
<File>
|
<File>
|
||||||
<FileName>UartDebug.c</FileName>
|
<FileName>UartDebug.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\Module\Debug\UartDebug.c</FilePath>
|
<FilePath>..\Module\LaserTracing_Debug\UartDebug.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
@@ -605,7 +1234,8 @@
|
|||||||
<component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.5.0" condition="ARMv6_7_8-M Device">
|
<component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.5.0" condition="ARMv6_7_8-M Device">
|
||||||
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.8.0"/>
|
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.8.0"/>
|
||||||
<targetInfos>
|
<targetInfos>
|
||||||
<targetInfo name="HC32L17X"/>
|
<targetInfo name="HC32L17X_boot"/>
|
||||||
|
<targetInfo name="HC32L17X_debug"/>
|
||||||
</targetInfos>
|
</targetInfos>
|
||||||
</component>
|
</component>
|
||||||
</components>
|
</components>
|
||||||
|
|||||||
@@ -162,7 +162,11 @@ Reset_Handler PROC
|
|||||||
RAMCODE
|
RAMCODE
|
||||||
; reset Vector table address.
|
; reset Vector table address.
|
||||||
LDR R0, =0xE000ED08
|
LDR R0, =0xE000ED08
|
||||||
LDR R2, =new_vect_table ;升级时打开
|
|
||||||
|
IF :DEF:USE_BOOTLOADER
|
||||||
|
LDR R2, =new_vect_table ;使用boot程序时
|
||||||
|
ENDIF
|
||||||
|
|
||||||
STR R2, [R0]
|
STR R2, [R0]
|
||||||
|
|
||||||
LDR R0, =SystemInit
|
LDR R0, =SystemInit
|
||||||
|
|||||||
+27
-27
@@ -1,23 +1,23 @@
|
|||||||
/************************************************************************************************
|
/************************************************************************************************
|
||||||
* 程序版本:V3.0
|
* 程序版本:V3.0
|
||||||
* 程序日期:2022-11-3
|
* 程序日期:2022-11-3
|
||||||
* 程序作者:
|
* 程序作者:
|
||||||
************************************************************************************************/
|
************************************************************************************************/
|
||||||
#include "Imu.h"
|
#include "Imu.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#define Kp_New 0.9f //互补滤波当前数据的权重
|
#define Kp_New 0.9f //互补滤波当前数据的权重
|
||||||
#define Kp_Old 0.1f //互补滤波历史数据的权重
|
#define Kp_Old 0.1f //互补滤波历史数据的权重
|
||||||
#define Acc_Gain 0.0001220f //加速度变成G (初始化加速度满量程-+4g LSBa = 2*4/65535.0)
|
#define Acc_Gain 0.0001220f //加速度变成G (初始化加速度满量程-+4g LSBa = 2*4/65535.0)
|
||||||
#define Gyro_Gain 0.0609756f //角速度变成度 (初始化陀螺仪满量程+-2000 LSBg = 2*2000/65535.0)
|
#define Gyro_Gain 0.0609756f //角速度变成度 (初始化陀螺仪满量程+-2000 LSBg = 2*2000/65535.0)
|
||||||
#define Gyro_Gr 0.0010641f //角速度变成弧度(3.1415/180 * LSBg)
|
#define Gyro_Gr 0.0010641f //角速度变成弧度(3.1415/180 * LSBg)
|
||||||
|
|
||||||
//kp=ki=0 就是完全相信陀螺仪
|
//kp=ki=0 就是完全相信陀螺仪
|
||||||
#define Kp 1.5f // proportional gain governs rate of convergence to accelerometer/magnetometer
|
#define Kp 1.5f // proportional gain governs rate of convergence to accelerometer/magnetometer
|
||||||
//比例增益控制加速度计,磁力计的收敛速率
|
//比例增益控制加速度计,磁力计的收敛速率
|
||||||
#define Ki 0.005f // integral gain governs rate of convergence of gyroscope biases
|
#define Ki 0.005f // integral gain governs rate of convergence of gyroscope biases
|
||||||
//积分增益控制陀螺偏差的收敛速度
|
//积分增益控制陀螺偏差的收敛速度
|
||||||
#define halfT 0.005f // half the sample period 采样周期的一半
|
#define halfT 0.005f // half the sample period 采样周期的一半
|
||||||
|
|
||||||
static volatile float q0 = 1, q1 = 0, q2 = 0, q3 = 0; // quaternion elements representing the estimated orientation
|
static volatile float q0 = 1, q1 = 0, q2 = 0, q3 = 0; // quaternion elements representing the estimated orientation
|
||||||
static volatile float exInt = 0, eyInt = 0, ezInt = 0; // scaled integral error
|
static volatile float exInt = 0, eyInt = 0, ezInt = 0; // scaled integral error
|
||||||
@@ -29,7 +29,7 @@ static float MedianValue(float *value_buf, unsigned int size)
|
|||||||
unsigned int i,j;
|
unsigned int i,j;
|
||||||
float temp;
|
float temp;
|
||||||
|
|
||||||
//排序采用冒泡法
|
//排序采用冒泡法
|
||||||
for (j=0;j<=size;j++){
|
for (j=0;j<=size;j++){
|
||||||
for (i=0;i<=size-j;i++){
|
for (i=0;i<=size-j;i++){
|
||||||
if (value_buf[i] > value_buf[i+1]){
|
if (value_buf[i] > value_buf[i+1]){
|
||||||
@@ -194,48 +194,48 @@ static void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az
|
|||||||
if(ax*ay*az==0)
|
if(ax*ay*az==0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//加速度计<测量>的重力加速度向量(机体坐标系)
|
//加速度计<测量>的重力加速度向量(机体坐标系)
|
||||||
norm = invSqrt(ax*ax + ay*ay + az*az);
|
norm = invSqrt(ax*ax + ay*ay + az*az);
|
||||||
ax = ax * norm;
|
ax = ax * norm;
|
||||||
ay = ay * norm;
|
ay = ay * norm;
|
||||||
az = az * norm;
|
az = az * norm;
|
||||||
// printf("ax=%0.2f ay=%0.2f az=%0.2f\r\n",ax,ay,az);
|
// printf("ax=%0.2f ay=%0.2f az=%0.2f\r\n",ax,ay,az);
|
||||||
|
|
||||||
//陀螺仪积分<估计>重力向量(机体坐标系)
|
//陀螺仪积分<估计>重力向量(机体坐标系)
|
||||||
vx = 2*(q1q3 - q0q2); //矩阵(3,1)项
|
vx = 2*(q1q3 - q0q2); //矩阵(3,1)项
|
||||||
vy = 2*(q0q1 + q2q3); //矩阵(3,2)项
|
vy = 2*(q0q1 + q2q3); //矩阵(3,2)项
|
||||||
vz = q0q0 - q1q1 - q2q2 + q3q3 ; //矩阵(3,3)项
|
vz = q0q0 - q1q1 - q2q2 + q3q3 ; //矩阵(3,3)项
|
||||||
|
|
||||||
|
|
||||||
//向量叉乘所得的值
|
//向量叉乘所得的值
|
||||||
ex = (ay*vz - az*vy);
|
ex = (ay*vz - az*vy);
|
||||||
ey = (az*vx - ax*vz);
|
ey = (az*vx - ax*vz);
|
||||||
ez = (ax*vy - ay*vx);
|
ez = (ax*vy - ay*vx);
|
||||||
|
|
||||||
//用上面求出误差进行积分
|
//用上面求出误差进行积分
|
||||||
exInt = exInt + ex * Ki;
|
exInt = exInt + ex * Ki;
|
||||||
eyInt = eyInt + ey * Ki;
|
eyInt = eyInt + ey * Ki;
|
||||||
ezInt = ezInt + ez * Ki;
|
ezInt = ezInt + ez * Ki;
|
||||||
|
|
||||||
//将误差PI后补偿到陀螺仪
|
//将误差PI后补偿到陀螺仪
|
||||||
gx = gx + Kp*ex + exInt;
|
gx = gx + Kp*ex + exInt;
|
||||||
gy = gy + Kp*ey + eyInt;
|
gy = gy + Kp*ey + eyInt;
|
||||||
gz = gz + Kp*ez + ezInt;//这里的gz由于没有观测者进行矫正会产生漂移,表现出来的就是积分自增或自减
|
gz = gz + Kp*ez + ezInt;//这里的gz由于没有观测者进行矫正会产生漂移,表现出来的就是积分自增或自减
|
||||||
|
|
||||||
//四元素的微分方程
|
//四元素的微分方程
|
||||||
q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
|
q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
|
||||||
q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
|
q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
|
||||||
q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
|
q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
|
||||||
q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;
|
q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;
|
||||||
|
|
||||||
//单位化四元数
|
//单位化四元数
|
||||||
norm = invSqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
|
norm = invSqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
|
||||||
q0 = q0 * norm;
|
q0 = q0 * norm;
|
||||||
q1 = q1 * norm;
|
q1 = q1 * norm;
|
||||||
q2 = q2 * norm;
|
q2 = q2 * norm;
|
||||||
q3 = q3 * norm;
|
q3 = q3 * norm;
|
||||||
|
|
||||||
// 矩阵表达式
|
// 矩阵表达式
|
||||||
// matrix[0] = q0q0 + q1q1 - q2q2 - q3q3; // 11
|
// matrix[0] = q0q0 + q1q1 - q2q2 - q3q3; // 11
|
||||||
// matrix[1] = 2.f * (q1q2 + q0q3); // 12
|
// matrix[1] = 2.f * (q1q2 + q0q3); // 12
|
||||||
// matrix[2] = 2.f * (q1q3 - q0q2); // 13
|
// matrix[2] = 2.f * (q1q3 - q0q2); // 13
|
||||||
@@ -246,7 +246,7 @@ static void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az
|
|||||||
// matrix[7] = 2.f * (q2q3 - q0q1); // 32
|
// matrix[7] = 2.f * (q2q3 - q0q1); // 32
|
||||||
// matrix[8] = q0q0 - q1q1 - q2q2 + q3q3; // 33
|
// matrix[8] = q0q0 - q1q1 - q2q2 + q3q3; // 33
|
||||||
|
|
||||||
//下一步是四元数转换成欧拉角(Z->Y->X)
|
//下一步是四元数转换成欧拉角(Z->Y->X)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -1,17 +1,17 @@
|
|||||||
#ifndef _IMU_H_
|
#ifndef _IMU_H_
|
||||||
#define _IMU_H_
|
#define _IMU_H_
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#define PI 3.14159265358979323846f
|
#define PI 3.14159265358979323846f
|
||||||
#define RAD_TO_DEG 57.2957795 // 弧度到度的转换系数
|
#define RAD_TO_DEG 57.2957795 // 弧度到度的转换系数
|
||||||
#define DEG_TO_RAD 0.0174533 // 度到弧度的转换系数
|
#define DEG_TO_RAD 0.0174533 // 度到弧度的转换系数
|
||||||
|
|
||||||
// 定义欧拉角结构体
|
// 定义欧拉角结构体
|
||||||
typedef struct {
|
typedef struct {
|
||||||
volatile float roll, pitch, yaw;//弧度
|
volatile float roll, pitch, yaw;//弧度
|
||||||
}Rad_T, *RadDp;
|
}Rad_T, *RadDp;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
volatile float roll, pitch, yaw;//角度
|
volatile float roll, pitch, yaw;//角度
|
||||||
}Deg_T, *DegDp;
|
}Deg_T, *DegDp;
|
||||||
|
|
||||||
#define Imu_AccFilterSize 10
|
#define Imu_AccFilterSize 10
|
||||||
|
|||||||
+95
-27
@@ -1,22 +1,16 @@
|
|||||||
#include "sx127x.h"
|
#include "sx127x.h"
|
||||||
#include "ddl.h"
|
#include "ddl.h"
|
||||||
#include "Debug.h"
|
#include "UartDebug.h"
|
||||||
#include "spi.h"
|
|
||||||
#include "bsp.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define LORAChannel 8
|
|
||||||
#define LORARegPreamble 10
|
|
||||||
|
|
||||||
#if (LORA_MODULE == SX1278W1)
|
#if (LORA_MODULE == SX1278W1)
|
||||||
Sx1276Type_t LoRaPara = {
|
Sx1276Type_t LoRaPara = {
|
||||||
.ucChannel = LORAChannel, //4 or 12
|
.ucChannel = 8, //4 or 12
|
||||||
.dwFreqHz = FREQ_CENT,
|
.dwFreqHz = FREQ_CENT,
|
||||||
.ucPower = 20,
|
.ucPower = 20,
|
||||||
.SignalBw = SX1276_BW_250K,
|
.SignalBw = SX1276_BW_250K,
|
||||||
.SpreadFactor = SX1276_SF_512,
|
.SpreadFactor = SX1276_SF_512,
|
||||||
.ErrorCoding = SX1276_EC_4_6,
|
.ErrorCoding = SX1276_EC_4_6,
|
||||||
.RegPreamble = LORARegPreamble,//10 or 16
|
.RegPreamble = 10,//10 or 16
|
||||||
.ucOpModePrev = RFLR_OPMODE_STANDBY,
|
.ucOpModePrev = RFLR_OPMODE_STANDBY,
|
||||||
.bAntSwPrev = RF_ANT_RECEIVER,
|
.bAntSwPrev = RF_ANT_RECEIVER,
|
||||||
.RegBuff = 0,
|
.RegBuff = 0,
|
||||||
@@ -70,6 +64,7 @@ void SX1276WriteBuffer(uint8_t ucAddr, uint8_t *pucBuff, uint8_t ucLen)
|
|||||||
}
|
}
|
||||||
LORA_SPI_NSS_SET();
|
LORA_SPI_NSS_SET();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SX1276Write(uint8_t ucAddr, uint8_t ucData)
|
void SX1276Write(uint8_t ucAddr, uint8_t ucData)
|
||||||
{
|
{
|
||||||
SX1276WriteBuffer(ucAddr, &ucData, 1);
|
SX1276WriteBuffer(ucAddr, &ucData, 1);
|
||||||
@@ -229,20 +224,18 @@ void SX1276LoRaSetOpMode(Sx1276OpModeType ucOpMode)
|
|||||||
LoRaPara.ucOpModePrev = LoRaPara.RegBuff.RegOpMode & ~RFLR_OPMODE_MASK;
|
LoRaPara.ucOpModePrev = LoRaPara.RegBuff.RegOpMode & ~RFLR_OPMODE_MASK;
|
||||||
if( ucOpMode != LoRaPara.ucOpModePrev){
|
if( ucOpMode != LoRaPara.ucOpModePrev){
|
||||||
if(ucOpMode == RFLR_OPMODE_TRANSMITTER){
|
if(ucOpMode == RFLR_OPMODE_TRANSMITTER){
|
||||||
|
|
||||||
//CLR_LORA_RXEN();
|
//CLR_LORA_RXEN();
|
||||||
//SET_LORA_TXEN();
|
//SET_LORA_TXEN();
|
||||||
|
|
||||||
|
|
||||||
bAntSwStatus = RF_ANT_TRANSMITTER;
|
bAntSwStatus = RF_ANT_TRANSMITTER;
|
||||||
}
|
}
|
||||||
else if(ucOpMode == RFLR_OPMODE_RECEIVER){
|
else if(ucOpMode == RFLR_OPMODE_RECEIVER){
|
||||||
bAntSwStatus = RF_ANT_RECEIVER;
|
|
||||||
|
|
||||||
//CLR_LORA_TXEN();
|
//CLR_LORA_TXEN();
|
||||||
//SET_LORA_RXEN();
|
//SET_LORA_RXEN();
|
||||||
|
bAntSwStatus = RF_ANT_RECEIVER;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
//CLR_LORA_TXEN();
|
||||||
|
//CLR_LORA_RXEN();
|
||||||
bAntSwStatus = RF_ANT_CLOSE;
|
bAntSwStatus = RF_ANT_CLOSE;
|
||||||
}
|
}
|
||||||
if( bAntSwStatus != LoRaPara.bAntSwPrev ){
|
if( bAntSwStatus != LoRaPara.bAntSwPrev ){
|
||||||
@@ -278,7 +271,7 @@ void Sx1276LoRaEnterRx(void)
|
|||||||
uint8_t temp;
|
uint8_t temp;
|
||||||
SX1276Read(REG_LR_IRQFLAGS, &temp);
|
SX1276Read(REG_LR_IRQFLAGS, &temp);
|
||||||
|
|
||||||
//设置接收模式
|
//设置接收模式
|
||||||
LORA_ANTRXEN();
|
LORA_ANTRXEN();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -305,8 +298,8 @@ void Sx1276LoRaInit(void (*RxCallBack)(uint8_t *rBuff, uint8_t rlen))
|
|||||||
LoRaPara.RegBuff.RegLna = RFLR_LNA_GAIN_G1;
|
LoRaPara.RegBuff.RegLna = RFLR_LNA_GAIN_G1;
|
||||||
SX1276WriteBuffer(REG_LR_OPMODE, (uint8_t*)&(LoRaPara.RegBuff) + 1, SIZE_OF_REGISTERS);
|
SX1276WriteBuffer(REG_LR_OPMODE, (uint8_t*)&(LoRaPara.RegBuff) + 1, SIZE_OF_REGISTERS);
|
||||||
//set the RF settings
|
//set the RF settings
|
||||||
SX1276LoRaWriteChannel(LoRaPara.ucChannel);
|
//SX1276LoRaWriteChannel(LoRaPara.ucChannel);
|
||||||
//SX1276LoRaSetFreqHz(LoRaPara.dwFreqHz);
|
SX1276LoRaSetFreqHz(LoRaPara.dwFreqHz);
|
||||||
//REG_LR_MODEMCONFIG1
|
//REG_LR_MODEMCONFIG1
|
||||||
SX1276Read(REG_LR_MODEMCONFIG1, &(LoRaPara.RegBuff.RegModemConfig1));
|
SX1276Read(REG_LR_MODEMCONFIG1, &(LoRaPara.RegBuff.RegModemConfig1));
|
||||||
//SignalBandwidth
|
//SignalBandwidth
|
||||||
@@ -321,20 +314,26 @@ void Sx1276LoRaInit(void (*RxCallBack)(uint8_t *rBuff, uint8_t rlen))
|
|||||||
//SpreadingFactor
|
//SpreadingFactor
|
||||||
if( LoRaPara.SpreadFactor == SX1276_SF_64){
|
if( LoRaPara.SpreadFactor == SX1276_SF_64){
|
||||||
SX1276LoRaSetNbTrigPeaks(5);
|
SX1276LoRaSetNbTrigPeaks(5);
|
||||||
SX1276LoRaSetLowDatarateOptimize(TRUE); //低数据速率设置
|
SX1276LoRaSetLowDatarateOptimize(TRUE); //低数据速率设置
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
SX1276LoRaSetNbTrigPeaks(3);
|
SX1276LoRaSetNbTrigPeaks(3);
|
||||||
SX1276LoRaSetLowDatarateOptimize(FALSE); //低数据速率设置
|
SX1276LoRaSetLowDatarateOptimize(FALSE); //低数据速率设置
|
||||||
}
|
}
|
||||||
LoRaPara.RegBuff.RegModemConfig2 = (LoRaPara.RegBuff.RegModemConfig2 & RFLR_MODEMCONFIG2_SF_MASK ) | LoRaPara.SpreadFactor;
|
LoRaPara.RegBuff.RegModemConfig2 = (LoRaPara.RegBuff.RegModemConfig2 & RFLR_MODEMCONFIG2_SF_MASK ) | LoRaPara.SpreadFactor;
|
||||||
//PacketCrcOn
|
//PacketCrcOn
|
||||||
LoRaPara.RegBuff.RegModemConfig2 = (LoRaPara.RegBuff.RegModemConfig2 & RFLR_MODEMCONFIG2_RXPAYLOADCRC_MASK ) | SX1276_CRC_ON; //SX1276_CRC_OFF
|
LoRaPara.RegBuff.RegModemConfig2 = (LoRaPara.RegBuff.RegModemConfig2 & RFLR_MODEMCONFIG2_RXPAYLOADCRC_MASK ) | SX1276_CRC_ON; //SX1276_CRC_OFF
|
||||||
|
|
||||||
//验证寄存器操作是否成功
|
//验证寄存器操作是否成功
|
||||||
SX1276Write(REG_LR_MODEMCONFIG2, LoRaPara.RegBuff.RegModemConfig2);
|
SX1276Write(REG_LR_MODEMCONFIG2, LoRaPara.RegBuff.RegModemConfig2);
|
||||||
LoRaPara.RegBuff.RegModemConfig2 = 0;
|
uint8_t Config2 = 0;
|
||||||
SX1276Read(REG_LR_MODEMCONFIG2, &(LoRaPara.RegBuff.RegModemConfig2));
|
SX1276Read(REG_LR_MODEMCONFIG2, &Config2);
|
||||||
|
if(LoRaPara.RegBuff.RegModemConfig2 == Config2) {
|
||||||
|
DBG_LOG("Lora OK!\r\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_LOG("Lora Error!\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
SX1276LoRaSetSymbTimeout(0x3FF);
|
SX1276LoRaSetSymbTimeout(0x3FF);
|
||||||
LoRaPara.RegBuff.RegPreambleMsb= (LoRaPara.RegPreamble >> 8) & 0x00ff;
|
LoRaPara.RegBuff.RegPreambleMsb= (LoRaPara.RegPreamble >> 8) & 0x00ff;
|
||||||
@@ -363,7 +362,8 @@ void Sx1276LoRaInit(void (*RxCallBack)(uint8_t *rBuff, uint8_t rlen))
|
|||||||
Sx1276LoRaEnterRx();
|
Sx1276LoRaEnterRx();
|
||||||
}
|
}
|
||||||
|
|
||||||
void IsrSx1276LoRaTxRx(void){
|
void IsrSx1276LoRaTxRx(void)
|
||||||
|
{
|
||||||
switch (LoRaPara.State){
|
switch (LoRaPara.State){
|
||||||
case SX1276_IDLE:
|
case SX1276_IDLE:
|
||||||
case SX1276_RX:
|
case SX1276_RX:
|
||||||
@@ -425,7 +425,7 @@ void Sx1276LoRaLoopHandler(void)
|
|||||||
void Sx1276LoRaSendBuffer(uint8_t* pucBuff, uint8_t ucLen)
|
void Sx1276LoRaSendBuffer(uint8_t* pucBuff, uint8_t ucLen)
|
||||||
{
|
{
|
||||||
|
|
||||||
//设置发送模式
|
//设置发送模式
|
||||||
LORA_ANTTXEN();
|
LORA_ANTTXEN();
|
||||||
|
|
||||||
LoRaPara.State = SX1276_BUSY;
|
LoRaPara.State = SX1276_BUSY;
|
||||||
@@ -473,8 +473,8 @@ void Sx1276LoRaWakeup(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////
|
////////////////////////////////////////
|
||||||
//配置本层参数的函数
|
//配置本层参数的函数
|
||||||
//频道表
|
//频道表
|
||||||
const uint32_t gdwSx1276ChannelTbl[SX1276_CHANNEL_MAX]={
|
const uint32_t gdwSx1276ChannelTbl[SX1276_CHANNEL_MAX]={
|
||||||
FREQ_CENT-FREQ_DEV*8, FREQ_CENT-FREQ_DEV*7, FREQ_CENT-FREQ_DEV*6, FREQ_CENT-FREQ_DEV*5,
|
FREQ_CENT-FREQ_DEV*8, FREQ_CENT-FREQ_DEV*7, FREQ_CENT-FREQ_DEV*6, FREQ_CENT-FREQ_DEV*5,
|
||||||
FREQ_CENT-FREQ_DEV*4, FREQ_CENT-FREQ_DEV*3, FREQ_CENT-FREQ_DEV*2, FREQ_CENT-FREQ_DEV*1,
|
FREQ_CENT-FREQ_DEV*4, FREQ_CENT-FREQ_DEV*3, FREQ_CENT-FREQ_DEV*2, FREQ_CENT-FREQ_DEV*1,
|
||||||
@@ -610,4 +610,72 @@ void SX1276LoCalcRssiSnr(int8_t *pswRssi, int8_t *psbSnr)
|
|||||||
}
|
}
|
||||||
*psbSnr= sbSnr;
|
*psbSnr= sbSnr;
|
||||||
}
|
}
|
||||||
|
int GetSx1276RxRetValue(void)
|
||||||
|
{
|
||||||
|
return LoRaPara.RxRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sx1276RxRetValue(void)
|
||||||
|
{
|
||||||
|
LoRaPara.RxRet = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LoraSetChannel(uint8_t Channel)
|
||||||
|
{
|
||||||
|
if(Channel > 16)
|
||||||
|
return false;
|
||||||
|
LoRaPara.ucChannel = Channel;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LoraSetPower(uint8_t Power)
|
||||||
|
{
|
||||||
|
if(Power > 20)
|
||||||
|
return false;
|
||||||
|
LoRaPara.ucPower = Power;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LoraSetSignalBw(uint8_t SignalBw)
|
||||||
|
{
|
||||||
|
if(SignalBw > 9)
|
||||||
|
return false;
|
||||||
|
LoRaPara.SignalBw = (SignalBw << 4);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LoraSetSpreadFactor(uint8_t SpreadFactor)
|
||||||
|
{
|
||||||
|
if(SpreadFactor < 4 || SpreadFactor > 12)
|
||||||
|
return false;
|
||||||
|
LoRaPara.SpreadFactor = (SpreadFactor << 4);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LoraSetErrorCoding(uint8_t ErrorCoding)
|
||||||
|
{
|
||||||
|
if(ErrorCoding == 0 || ErrorCoding > 4)
|
||||||
|
return false;
|
||||||
|
LoRaPara.ErrorCoding = ErrorCoding << 1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LoraSetRegPreamble(uint8_t RegPreamble)
|
||||||
|
{
|
||||||
|
LoRaPara.RegPreamble = RegPreamble;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool LoraSetFreqCent(uint32_t FreqCent)
|
||||||
|
{
|
||||||
|
if(FreqCent < 410000000 || FreqCent > 525000000)
|
||||||
|
return false;
|
||||||
|
LoRaPara.dwFreqHz = FreqCent;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
void LoraInit(void)
|
||||||
|
{
|
||||||
|
Sx1276LoRaInit(LORA_RxCallBack);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define __SX127X_H
|
#define __SX127X_H
|
||||||
|
|
||||||
#include "bsp.h"
|
#include "bsp.h"
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
//Constant values need to compute the RSSI value
|
//Constant values need to compute the RSSI value
|
||||||
#define RSSI_OFFSET_LF -155
|
#define RSSI_OFFSET_LF -155
|
||||||
@@ -733,6 +734,7 @@ typedef struct {
|
|||||||
uint8_t ucTxPacketSize;
|
uint8_t ucTxPacketSize;
|
||||||
uint8_t RxTxBuff[LORA_BUFF_SIZE];
|
uint8_t RxTxBuff[LORA_BUFF_SIZE];
|
||||||
void (*RxCallBack)(uint8_t *rBuff, uint8_t rlen);
|
void (*RxCallBack)(uint8_t *rBuff, uint8_t rlen);
|
||||||
|
int RxRet;
|
||||||
}Sx1276Type_t, *pSx1276Type;
|
}Sx1276Type_t, *pSx1276Type;
|
||||||
|
|
||||||
//ISM Freq In China
|
//ISM Freq In China
|
||||||
@@ -822,5 +824,14 @@ Sx1276StateType_t SX1276LoRaReadStatus(void);
|
|||||||
void SX1276LoCalcRssiSnr(int8_t *pswRssi, int8_t *psbSnr);
|
void SX1276LoCalcRssiSnr(int8_t *pswRssi, int8_t *psbSnr);
|
||||||
void Sx1276LoRaSleep(void);
|
void Sx1276LoRaSleep(void);
|
||||||
void Sx1276LoRaWakeup(void);
|
void Sx1276LoRaWakeup(void);
|
||||||
|
|
||||||
|
void LoraInit(void);
|
||||||
|
bool LoraSetChannel(uint8_t Channel);
|
||||||
|
bool LoraSetPower(uint8_t Power);
|
||||||
|
bool LoraSetSignalBw(uint8_t SignalBw);
|
||||||
|
bool LoraSetSpreadFactor(uint8_t SpreadFactor);
|
||||||
|
bool LoraSetErrorCoding(uint8_t ErrorCoding);
|
||||||
|
bool LoraSetRegPreamble(uint8_t RegPreamble);
|
||||||
|
bool LoraSetFreqCent(uint32_t FreqCent);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,130 @@
|
|||||||
|
# ---> IAR
|
||||||
|
# Compiled binaries
|
||||||
|
*.o
|
||||||
|
*.bin
|
||||||
|
*.elf
|
||||||
|
*.hex
|
||||||
|
*.map
|
||||||
|
*.out
|
||||||
|
*.obj
|
||||||
|
|
||||||
|
# Trash
|
||||||
|
*.bak
|
||||||
|
thumbs.db
|
||||||
|
*.~*
|
||||||
|
|
||||||
|
# IAR Settings
|
||||||
|
**/settings/*.crun
|
||||||
|
**/settings/*.dbgdt
|
||||||
|
**/settings/*.cspy
|
||||||
|
**/settings/*.cspy.*
|
||||||
|
**/settings/*.xcl
|
||||||
|
**/settings/*.dni
|
||||||
|
**/settings/*.wsdt
|
||||||
|
**/settings/*.wspos
|
||||||
|
|
||||||
|
# IAR Debug Exe
|
||||||
|
**/Exe/*.sim
|
||||||
|
|
||||||
|
# IAR Debug Obj
|
||||||
|
**/Obj/*.pbd
|
||||||
|
**/Obj/*.pbd.*
|
||||||
|
**/Obj/*.pbi
|
||||||
|
**/Obj/*.pbi.*
|
||||||
|
|
||||||
|
# IAR project "Debug" directory
|
||||||
|
Debug/
|
||||||
|
|
||||||
|
# IAR project "Release" directory
|
||||||
|
Release/
|
||||||
|
|
||||||
|
# IAR project settings directory
|
||||||
|
settings/
|
||||||
|
|
||||||
|
# IAR backup files
|
||||||
|
Backup*
|
||||||
|
|
||||||
|
# IAR .dep files
|
||||||
|
*.dep
|
||||||
|
# ---> IAR_EWARM
|
||||||
|
# gitignore template for the IAR EWARM
|
||||||
|
# website: https://www.iar.com/knowledge/support/technical-notes/ide/which-files-should-be-version-controlled/
|
||||||
|
|
||||||
|
# Some tools will put the EWARM files
|
||||||
|
# under a subdirectory with the same name
|
||||||
|
# as the configuration.
|
||||||
|
# Example
|
||||||
|
# EWARM/Config1/Obj /List /Exe
|
||||||
|
# EWARM/Config2/Obj /List /Exe
|
||||||
|
EWARM/**/Obj
|
||||||
|
EWARM/**/List
|
||||||
|
EWARM/**/Exe
|
||||||
|
|
||||||
|
# Autogenerated project files
|
||||||
|
*.dep
|
||||||
|
*.ewt
|
||||||
|
|
||||||
|
# Autogenerated folder for debugger
|
||||||
|
EWARM/settings
|
||||||
|
|
||||||
|
# ---> uVision
|
||||||
|
# git ignore file for Keil µVision Project
|
||||||
|
|
||||||
|
# µVision 5 and µVision 4 Project screen layout file
|
||||||
|
*.uvguix.*
|
||||||
|
*.uvgui.*
|
||||||
|
|
||||||
|
# Listing Files
|
||||||
|
*.i
|
||||||
|
*.lst
|
||||||
|
*.m51
|
||||||
|
*.m66
|
||||||
|
*.map
|
||||||
|
|
||||||
|
# Object Files
|
||||||
|
*.axf
|
||||||
|
*.b[0-2][0-9]
|
||||||
|
*.b3[0-1]
|
||||||
|
*.bak
|
||||||
|
*.build_log.htm
|
||||||
|
*.crf
|
||||||
|
*.d
|
||||||
|
*.dep
|
||||||
|
*.elf
|
||||||
|
*.htm
|
||||||
|
*.iex
|
||||||
|
*.lnp
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
*.sbr
|
||||||
|
|
||||||
|
# Firmware Files
|
||||||
|
*.bin
|
||||||
|
*.h86
|
||||||
|
*.hex
|
||||||
|
|
||||||
|
# Build Files
|
||||||
|
.bat
|
||||||
|
|
||||||
|
# Debugger Files
|
||||||
|
.ini
|
||||||
|
|
||||||
|
# JLink Files
|
||||||
|
JLinkLog.txt
|
||||||
|
|
||||||
|
# Other Files
|
||||||
|
|
||||||
|
# ---> VisualStudioCode
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
!.vscode/*.code-snippets
|
||||||
|
|
||||||
|
# Local History for Visual Studio Code
|
||||||
|
.history/
|
||||||
|
|
||||||
|
# Built Visual Studio Code Extensions
|
||||||
|
*.vsix
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# LaserTracing_Debug
|
||||||
|
# 适用于LaserTracing项目
|
||||||
|
# 单片机HC32L170
|
||||||
|
# 转换为模块仓库 2026-05-15
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,59 @@
|
|||||||
|
#ifndef __DEBUG_H
|
||||||
|
#define __DEBUG_H
|
||||||
|
|
||||||
|
#include "bsp.h"
|
||||||
|
|
||||||
|
#if (USE_DEBUG != 0)
|
||||||
|
|
||||||
|
#define DEBUG_BUFSIZE 200
|
||||||
|
#define DEBUG_BUFF_SIZE_MAX 512
|
||||||
|
|
||||||
|
#define DebugUartSend(X) LPUartSend(X)
|
||||||
|
|
||||||
|
void vcom_Send( char *format, ... );
|
||||||
|
void vcom_Send2(uint8_t *sData, uint16_t len);
|
||||||
|
|
||||||
|
#define DBG_LOG2(x, y) vcom_Send2(x, y) //打印长度超过缓存DEBUG_BUFF_SIZE_MAX的信息
|
||||||
|
#define DBG_LOG(...) vcom_Send(__VA_ARGS__)
|
||||||
|
#define DBG_LOG_F(fmt,arg...) LOG("[%s] "fmt,__FUNCTION__,##arg)
|
||||||
|
|
||||||
|
#define DBG_ARRAY(ARRAY,SIZE) { \
|
||||||
|
if(ARRAY != NULL) { \
|
||||||
|
for(int i = 0; i < SIZE; i++) { \
|
||||||
|
DBG_LOG("%02x ",ARRAY[i]); \
|
||||||
|
} \
|
||||||
|
DBG_LOG("\r\n"); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
DBG_CH_UART0 = 0, //默认串口调试方式 Uart0Init
|
||||||
|
DBG_CH_RS485_1, //RS485_1 (LPUART0)
|
||||||
|
}DebugChannel_e;
|
||||||
|
|
||||||
|
extern volatile DebugChannel_e gDebugChannel;
|
||||||
|
|
||||||
|
typedef void (*DebugExec)(int argc, char *argv[]);
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
char *DBGCmd;
|
||||||
|
DebugExec DBGExec;
|
||||||
|
}DBGFunType;
|
||||||
|
|
||||||
|
void DebugUartIRQ(uint8_t Data);
|
||||||
|
void DebugLoopHandler(void);
|
||||||
|
void Debug1mSRoutine(void);
|
||||||
|
|
||||||
|
|
||||||
|
//void ReadBootPara(BootPara rData);
|
||||||
|
//void WriteBootPara(BootPara wData);
|
||||||
|
//extern BootPara_t BLPara;
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define DBG_LOG2(x, y)
|
||||||
|
#define DBG_LOG(...)
|
||||||
|
#define DBG_LOG_F(fmt,arg...)
|
||||||
|
#define DBG_ARRAY(ARRAY,SIZE)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "lsm6dsl_app.h"
|
#include "lsm6dsl_app.h"
|
||||||
#include "lsm6dsl_reg.h"
|
#include "lsm6dsl_reg.h"
|
||||||
@@ -15,7 +15,7 @@ static bool InitFlag;
|
|||||||
|
|
||||||
#define ACC_CVTTIME (20 * 1000)
|
#define ACC_CVTTIME (20 * 1000)
|
||||||
#define ACC_COLL_CNT_MAX 6
|
#define ACC_COLL_CNT_MAX 6
|
||||||
#define ACC_FIFO_WATERMASK (ACC_COLL_CNT_MAX * 6) //采集一秒数据
|
#define ACC_FIFO_WATERMASK (ACC_COLL_CNT_MAX * 6) //采集一秒数据
|
||||||
#define TX_BUF_DIM 1000
|
#define TX_BUF_DIM 1000
|
||||||
#define BOOT_TIME 15 //ms
|
#define BOOT_TIME 15 //ms
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ static void Lsm6dsl_Init(void)
|
|||||||
/* Set Output Data Rate */
|
/* Set Output Data Rate */
|
||||||
lsm6dsl_xl_data_rate_set(&dev_ctx, LSM6DSL_XL_ODR_12Hz5);
|
lsm6dsl_xl_data_rate_set(&dev_ctx, LSM6DSL_XL_ODR_12Hz5);
|
||||||
lsm6dsl_gy_data_rate_set(&dev_ctx, LSM6DSL_GY_ODR_12Hz5);
|
lsm6dsl_gy_data_rate_set(&dev_ctx, LSM6DSL_GY_ODR_12Hz5);
|
||||||
//lsm6dsl_gy_data_rate_set(&left_dev_ctx, LSM6DSL_GY_ODR_OFF); //关闭地磁
|
//lsm6dsl_gy_data_rate_set(&left_dev_ctx, LSM6DSL_GY_ODR_OFF); //关闭地磁
|
||||||
/* Set full scale */
|
/* Set full scale */
|
||||||
lsm6dsl_xl_full_scale_set(&dev_ctx, LSM6DSL_2g);
|
lsm6dsl_xl_full_scale_set(&dev_ctx, LSM6DSL_2g);
|
||||||
lsm6dsl_gy_full_scale_set(&dev_ctx, LSM6DSL_2000dps);
|
lsm6dsl_gy_full_scale_set(&dev_ctx, LSM6DSL_2000dps);
|
||||||
@@ -110,26 +110,26 @@ static void Lsm6dsl_Init(void)
|
|||||||
/* Gyroscope - filtering chain */
|
/* Gyroscope - filtering chain */
|
||||||
lsm6dsl_gy_band_pass_set(&dev_ctx, LSM6DSL_HP_260mHz_LP1_STRONG);
|
lsm6dsl_gy_band_pass_set(&dev_ctx, LSM6DSL_HP_260mHz_LP1_STRONG);
|
||||||
|
|
||||||
//fifo模式设置
|
//fifo模式设置
|
||||||
lsm6dsl_fifo_xl_batch_set(&dev_ctx, LSM6DSL_FIFO_XL_NO_DEC);//fifo加速度写入频率设置
|
lsm6dsl_fifo_xl_batch_set(&dev_ctx, LSM6DSL_FIFO_XL_NO_DEC);//fifo加速度写入频率设置
|
||||||
lsm6dsl_fifo_gy_batch_set(&dev_ctx, LSM6DSL_FIFO_GY_NO_DEC);//fifo陀螺仪写入频率设置
|
lsm6dsl_fifo_gy_batch_set(&dev_ctx, LSM6DSL_FIFO_GY_NO_DEC);//fifo陀螺仪写入频率设置
|
||||||
lsm6dsl_fifo_data_rate_set(&dev_ctx, LSM6DSL_FIFO_12Hz5);//FIFO ODR选择
|
lsm6dsl_fifo_data_rate_set(&dev_ctx, LSM6DSL_FIFO_12Hz5);//FIFO ODR选择
|
||||||
|
|
||||||
//中断1设置,watermark full中断
|
//中断1设置,watermark full中断
|
||||||
lsm6dsl_int1_route_t int1val ={0, 0, 0};
|
lsm6dsl_int1_route_t int1val ={0, 0, 0};
|
||||||
int1val.int1_full_flag = 1; //开阀值中断,fifo存储到缓存深度时触发
|
int1val.int1_full_flag = 1; //开阀值中断,fifo存储到缓存深度时触发
|
||||||
lsm6dsl_pin_int1_route_set(&dev_ctx, int1val);
|
lsm6dsl_pin_int1_route_set(&dev_ctx, int1val);
|
||||||
lsm6dsl_fifo_watermark_set(&dev_ctx, ACC_FIFO_WATERMASK);//FIFO水印电平设置,阈值设置,缓存深度
|
lsm6dsl_fifo_watermark_set(&dev_ctx, ACC_FIFO_WATERMASK);//FIFO水印电平设置,阈值设置,缓存深度
|
||||||
lsm6dsl_fifo_stop_on_wtm_set(&dev_ctx, 1);//fifo缓存深度存满时,不再存储
|
lsm6dsl_fifo_stop_on_wtm_set(&dev_ctx, 1);//fifo缓存深度存满时,不再存储
|
||||||
//lsm6dsl_fifo_xl_gy_8bit_format_set(&left_dev_ctx, 1);//在FIFO中为XL和陀螺启用MSByte记忆,缓存宽度
|
//lsm6dsl_fifo_xl_gy_8bit_format_set(&left_dev_ctx, 1);//在FIFO中为XL和陀螺启用MSByte记忆,缓存宽度
|
||||||
lsm6dsl_block_data_update_set(&dev_ctx, 1); //fifo模式ctrl3_c bdu必须为1,直到读取MSB和LSB后才更新输出寄存器
|
lsm6dsl_block_data_update_set(&dev_ctx, 1); //fifo模式ctrl3_c bdu必须为1,直到读取MSB和LSB后才更新输出寄存器
|
||||||
lsm6dsl_auto_increment_set(&dev_ctx, 1); //fifo模式ctrl3_c if_inc必须为1,通过串行接口(I2C或SPI)进行多字节访问时自动增加寄存器地址。
|
lsm6dsl_auto_increment_set(&dev_ctx, 1); //fifo模式ctrl3_c if_inc必须为1,通过串行接口(I2C或SPI)进行多字节访问时自动增加寄存器地址。
|
||||||
lsm6dsl_ctrl3_c_t ctrl3_c;
|
lsm6dsl_ctrl3_c_t ctrl3_c;
|
||||||
platform_read(LSM6DSL_CTRL3_C, (uint8_t *)&ctrl3_c, 1);
|
platform_read(LSM6DSL_CTRL3_C, (uint8_t *)&ctrl3_c, 1);
|
||||||
//lsm6dsl_fifo_mode_set(&dev_ctx, LSM6DSL_FIFO_MODE);
|
//lsm6dsl_fifo_mode_set(&dev_ctx, LSM6DSL_FIFO_MODE);
|
||||||
|
|
||||||
//中断2设置,唤醒中断
|
//中断2设置,唤醒中断
|
||||||
// uint8_t temp = 0x90; //唤醒中断
|
// uint8_t temp = 0x90; //唤醒中断
|
||||||
// platform_write(LSM6DSL_TAP_CFG, &temp, 1);
|
// platform_write(LSM6DSL_TAP_CFG, &temp, 1);
|
||||||
// temp = 0;
|
// temp = 0;
|
||||||
// platform_write(LSM6DSL_WAKE_UP_DUR, &temp, 1);
|
// platform_write(LSM6DSL_WAKE_UP_DUR, &temp, 1);
|
||||||
|
|||||||
+70
-70
@@ -1,4 +1,4 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "mmc5983.h"
|
#include "mmc5983.h"
|
||||||
#include "UartDebug.h"
|
#include "UartDebug.h"
|
||||||
#include "i2c.h"
|
#include "i2c.h"
|
||||||
@@ -11,11 +11,11 @@ static bool MMC5983IntFlag;
|
|||||||
static MMC5983Var_t MMC5983Var;
|
static MMC5983Var_t MMC5983Var;
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: MMC5983_Write_Reg
|
* 函数名称: MMC5983_Write_Reg
|
||||||
* 功能描述: MMC5983写寄存器
|
* 功能描述: MMC5983写寄存器
|
||||||
* 参 数: reg 寄存器地址
|
* 参 数: reg 寄存器地址
|
||||||
val 寄存器数据
|
val 寄存器数据
|
||||||
* 返 回 值: 成功返回true,失败返回false
|
* 返 回 值: 成功返回true,失败返回false
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static bool MMC5983_Write_Reg(uint8_t reg, uint8_t val)
|
static bool MMC5983_Write_Reg(uint8_t reg, uint8_t val)
|
||||||
{
|
{
|
||||||
@@ -23,10 +23,10 @@ static bool MMC5983_Write_Reg(uint8_t reg, uint8_t val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: MMC5983_Read_Reg
|
* 函数名称: MMC5983_Read_Reg
|
||||||
* 功能描述: MMC5983读寄存器
|
* 功能描述: MMC5983读寄存器
|
||||||
* 参 数: reg 寄存器地址
|
* 参 数: reg 寄存器地址
|
||||||
* 返 回 值: 返回寄存器值
|
* 返 回 值: 返回寄存器值
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static uint8_t MMC5983_Read_Reg(uint8_t reg)
|
static uint8_t MMC5983_Read_Reg(uint8_t reg)
|
||||||
{
|
{
|
||||||
@@ -37,12 +37,12 @@ static uint8_t MMC5983_Read_Reg(uint8_t reg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: MMC5983_Read_Buffer
|
* 函数名称: MMC5983_Read_Buffer
|
||||||
* 功能描述: MMC5983读数据
|
* 功能描述: MMC5983读数据
|
||||||
* 参 数: reg 寄存器地址
|
* 参 数: reg 寄存器地址
|
||||||
buffer 读取数据输出缓存入口
|
buffer 读取数据输出缓存入口
|
||||||
len 读取长度
|
len 读取长度
|
||||||
* 返 回 值: 成功返回true,失败返回false
|
* 返 回 值: 成功返回true,失败返回false
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static bool MMC5983_Read_Buffer(uint8_t reg, void *buffer, uint8_t len)
|
static bool MMC5983_Read_Buffer(uint8_t reg, void *buffer, uint8_t len)
|
||||||
{
|
{
|
||||||
@@ -50,27 +50,27 @@ static bool MMC5983_Read_Buffer(uint8_t reg, void *buffer, uint8_t len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: MMC5983StartCov
|
* 函数名称: MMC5983StartCov
|
||||||
* 功能描述: MMC5983开启连续转换
|
* 功能描述: MMC5983开启连续转换
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void MMC5983StartCov(void)
|
static void MMC5983StartCov(void)
|
||||||
{
|
{
|
||||||
MMC5983RegCtrl2 Ctrl2Reg; //开启/关闭连续转换
|
MMC5983RegCtrl2 Ctrl2Reg; //开启/关闭连续转换
|
||||||
Ctrl2Reg.Byte = 0x00;
|
Ctrl2Reg.Byte = 0x00;
|
||||||
Ctrl2Reg.Bit.Cm_freq = 0x04;
|
Ctrl2Reg.Bit.Cm_freq = 0x04;
|
||||||
Ctrl2Reg.Bit.Cmm_en = 1; //连续设1,单次设0
|
Ctrl2Reg.Bit.Cmm_en = 1; //连续设1,单次设0
|
||||||
Ctrl2Reg.Bit.Prd_set = 3;
|
Ctrl2Reg.Bit.Prd_set = 3;
|
||||||
Ctrl2Reg.Bit.En_prd_set = 1; //连续设1,单次设0
|
Ctrl2Reg.Bit.En_prd_set = 1; //连续设1,单次设0
|
||||||
MMC5983_Write_Reg(MMC5983_CTRL_2, Ctrl2Reg.Byte);
|
MMC5983_Write_Reg(MMC5983_CTRL_2, Ctrl2Reg.Byte);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: MMC5983_Init
|
* 函数名称: MMC5983_Init
|
||||||
* 功能描述: MMC5983初始化
|
* 功能描述: MMC5983初始化
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void MMC5983_Init(void)
|
static void MMC5983_Init(void)
|
||||||
{
|
{
|
||||||
@@ -93,12 +93,12 @@ static void MMC5983_Init(void)
|
|||||||
MMC5983_Write_Reg(MMC5983_CTRL_1, Ctrl1Reg.Byte);
|
MMC5983_Write_Reg(MMC5983_CTRL_1, Ctrl1Reg.Byte);
|
||||||
MMC5983Delay(15);
|
MMC5983Delay(15);
|
||||||
|
|
||||||
MMC5983RegCtrl2 Ctrl2Reg; //开启/关闭连续转换
|
MMC5983RegCtrl2 Ctrl2Reg; //开启/关闭连续转换
|
||||||
Ctrl2Reg.Byte = 0x00;
|
Ctrl2Reg.Byte = 0x00;
|
||||||
Ctrl2Reg.Bit.Cm_freq = 0x04;
|
Ctrl2Reg.Bit.Cm_freq = 0x04;
|
||||||
Ctrl2Reg.Bit.Cmm_en = 0; //连续设1,单次设0
|
Ctrl2Reg.Bit.Cmm_en = 0; //连续设1,单次设0
|
||||||
Ctrl2Reg.Bit.Prd_set = 3;
|
Ctrl2Reg.Bit.Prd_set = 3;
|
||||||
Ctrl2Reg.Bit.En_prd_set = 0; //连续设1,单次设0
|
Ctrl2Reg.Bit.En_prd_set = 0; //连续设1,单次设0
|
||||||
MMC5983_Write_Reg(MMC5983_CTRL_2, Ctrl2Reg.Byte);
|
MMC5983_Write_Reg(MMC5983_CTRL_2, Ctrl2Reg.Byte);
|
||||||
|
|
||||||
MMC5983RegCtrl3 Ctrl3Reg;
|
MMC5983RegCtrl3 Ctrl3Reg;
|
||||||
@@ -121,12 +121,12 @@ static void MMC5983_Init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: MMC5983_Read
|
* 函数名称: MMC5983_Read
|
||||||
* 功能描述: MMC5983读取原始数据
|
* 功能描述: MMC5983读取原始数据
|
||||||
* 参 数: MagAdcX X轴数据
|
* 参 数: MagAdcX X轴数据
|
||||||
MagAdcY Y轴数据
|
MagAdcY Y轴数据
|
||||||
MagAdcZ Z轴数据
|
MagAdcZ Z轴数据
|
||||||
* 返 回 值: 成功返回true,失败返回false
|
* 返 回 值: 成功返回true,失败返回false
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static bool MMC5983_Read(int32_t *MagAdcX, int32_t *MagAdcY, int32_t *MagAdcZ)
|
static bool MMC5983_Read(int32_t *MagAdcX, int32_t *MagAdcY, int32_t *MagAdcZ)
|
||||||
{
|
{
|
||||||
@@ -142,10 +142,10 @@ static bool MMC5983_Read(int32_t *MagAdcX, int32_t *MagAdcY, int32_t *MagAdcZ)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: MMC5983_Get_Mag
|
* 函数名称: MMC5983_Get_Mag
|
||||||
* 功能描述: 外部获取MMC5983磁场强度数据
|
* 功能描述: 外部获取MMC5983磁场强度数据
|
||||||
* 参 数: mag 读取数据输出缓存入口
|
* 参 数: mag 读取数据输出缓存入口
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void MMC5983_Get_Mag(float *mag)
|
void MMC5983_Get_Mag(float *mag)
|
||||||
{
|
{
|
||||||
@@ -164,10 +164,10 @@ void MMC5983_Get_Mag(float *mag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: MMC5983LoopHandler
|
* 函数名称: MMC5983LoopHandler
|
||||||
* 功能描述: MMC5983循环处理函数
|
* 功能描述: MMC5983循环处理函数
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
extern void MmcDataProcessCallBack(float *Mag);
|
extern void MmcDataProcessCallBack(float *Mag);
|
||||||
|
|
||||||
@@ -251,16 +251,16 @@ void MMC5983LoopHandler(void)
|
|||||||
case MMC5983_STATUS_STOP:{
|
case MMC5983_STATUS_STOP:{
|
||||||
MMC5983Stop();
|
MMC5983Stop();
|
||||||
MMC5983Var.Status = MMC5983_STATUS_IDLE;
|
MMC5983Var.Status = MMC5983_STATUS_IDLE;
|
||||||
//MMC5983Var.Status = MMC5983_STATUS_START;//持续工作
|
//MMC5983Var.Status = MMC5983_STATUS_START;//持续工作
|
||||||
break;}
|
break;}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: LeftMMC59831mSRoutine
|
* 函数名称: LeftMMC59831mSRoutine
|
||||||
* 功能描述: MMC59831ms时基循环处理函数
|
* 功能描述: MMC59831ms时基循环处理函数
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void MMC59831mSRoutine(void)
|
void MMC59831mSRoutine(void)
|
||||||
{
|
{
|
||||||
@@ -269,10 +269,10 @@ void MMC59831mSRoutine(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: LeftMMC5983Init
|
* 函数名称: LeftMMC5983Init
|
||||||
* 功能描述: MMC5983初始化
|
* 功能描述: MMC5983初始化
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void MMC5983Init(void)
|
void MMC5983Init(void)
|
||||||
{
|
{
|
||||||
@@ -285,10 +285,10 @@ void MMC5983Init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: LeftMMC5983Start
|
* 函数名称: LeftMMC5983Start
|
||||||
* 功能描述: MMC5983启动
|
* 功能描述: MMC5983启动
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void MMC5983Start(void)
|
void MMC5983Start(void)
|
||||||
{
|
{
|
||||||
@@ -301,21 +301,21 @@ void MMC5983Start(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: LeftMMC5983StartRead
|
* 函数名称: LeftMMC5983StartRead
|
||||||
* 功能描述: MMC5983启动读取
|
* 功能描述: MMC5983启动读取
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void MMC5983StartRead(void)
|
void MMC5983StartRead(void)
|
||||||
{
|
{
|
||||||
MMC5983_Init();//读取时重新初始化
|
MMC5983_Init();//读取时重新初始化
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: MMC5983Stop
|
* 函数名称: MMC5983Stop
|
||||||
* 功能描述: MMC5983停止
|
* 功能描述: MMC5983停止
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void MMC5983Stop(void)
|
void MMC5983Stop(void)
|
||||||
{
|
{
|
||||||
@@ -331,10 +331,10 @@ void MMC5983Stop(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: LeftMMC5983IntCallBack
|
* 函数名称: LeftMMC5983IntCallBack
|
||||||
* 功能描述: MMC5983中断回调
|
* 功能描述: MMC5983中断回调
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void MMC5983IntCallBack(void)
|
void MMC5983IntCallBack(void)
|
||||||
{
|
{
|
||||||
|
|||||||
+29
-29
@@ -1,4 +1,4 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved.
|
* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved.
|
||||||
*
|
*
|
||||||
* This software is owned and published by:
|
* This software is owned and published by:
|
||||||
@@ -83,39 +83,39 @@ typedef enum en_opa_oenx
|
|||||||
OpaOen4 = 6u //OUT4
|
OpaOen4 = 6u //OUT4
|
||||||
}en_opa_oenx_t;
|
}en_opa_oenx_t;
|
||||||
|
|
||||||
typedef enum en_opa_clksrc // 自动校准脉冲宽度设置
|
typedef enum en_opa_clksrc // 鑷姩鏍″噯鑴夊啿瀹藉害璁剧疆
|
||||||
{
|
{
|
||||||
OpaM1Pclk = 0u, // 1个PCLK周期
|
OpaM1Pclk = 0u, // 1涓狿CLK鍛ㄦ湡
|
||||||
OpaM2Pclk = 1u, // 2个PCLK周期
|
OpaM2Pclk = 1u, // 2涓狿CLK鍛ㄦ湡
|
||||||
OpaM4Pclk = 2u, // 4个PCLK周期
|
OpaM4Pclk = 2u, // 4涓狿CLK鍛ㄦ湡
|
||||||
OpaM8Pclk = 3u, // 8个PCLK周期
|
OpaM8Pclk = 3u, // 8涓狿CLK鍛ㄦ湡
|
||||||
OpaM16Pclk = 4u, // 16个PCLK周期
|
OpaM16Pclk = 4u, // 16涓狿CLK鍛ㄦ湡
|
||||||
OpaM32Pclk = 5u, // 32个PCLK周期
|
OpaM32Pclk = 5u, // 32涓狿CLK鍛ㄦ湡
|
||||||
OpaM64Pclk = 6u, // 64个PCLK周期
|
OpaM64Pclk = 6u, // 64涓狿CLK鍛ㄦ湡
|
||||||
OpaM128Pclk = 7u, // 128个PCLK周期
|
OpaM128Pclk = 7u, // 128涓狿CLK鍛ㄦ湡
|
||||||
OpaM256Pclk = 8u, // 256个PCLK周期
|
OpaM256Pclk = 8u, // 256涓狿CLK鍛ㄦ湡
|
||||||
OpaM512Pclk = 9u, // 512个PCLK周期
|
OpaM512Pclk = 9u, // 512涓狿CLK鍛ㄦ湡
|
||||||
OpaM1024Pclk = 10u, // 1024个PCLK周期
|
OpaM1024Pclk = 10u, // 1024涓狿CLK鍛ㄦ湡
|
||||||
OpaM2048Pclk = 11u, // 2048个PCLK周期
|
OpaM2048Pclk = 11u, // 2048涓狿CLK鍛ㄦ湡
|
||||||
OpaM4096Pclk = 12u // 4096个PCLK周期
|
OpaM4096Pclk = 12u // 4096涓狿CLK鍛ㄦ湡
|
||||||
}en_opa_clksrc_t;
|
}en_opa_clksrc_t;
|
||||||
|
|
||||||
typedef enum en_opa_set0ctrl
|
typedef enum en_opa_set0ctrl
|
||||||
{
|
{
|
||||||
enClkSwSet = 3u, // 软件校准使能
|
enClkSwSet = 3u, // 杞欢鏍″噯浣胯兘
|
||||||
enAzPulse = 2u, // 软件校准
|
enAzPulse = 2u, // 杞欢鏍″噯
|
||||||
enTrigger = 1u, // 软件触发自动教零
|
enTrigger = 1u, // 杞欢瑙﹀彂鑷姩鏁欓浂
|
||||||
enAdctr = 1u // 使能ADC启动触发OPA自动校准功能
|
enAdctr = 1u // 浣胯兘ADC鍚姩瑙﹀彂OPA鑷姩鏍″噯鍔熻兘
|
||||||
}en_opa_set0ctrl_t;
|
}en_opa_set0ctrl_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
boolean_t bAzen; // 自动教零配置
|
boolean_t bAzen; // 鑷姩鏁欓浂閰嶇疆
|
||||||
boolean_t bClk_sw_set; // 自动教零选择
|
boolean_t bClk_sw_set; // 鑷姩鏁欓浂閫夋嫨
|
||||||
boolean_t bAz_pulse; // 软件校准设置
|
boolean_t bAz_pulse; // 杞欢鏍″噯璁剧疆
|
||||||
boolean_t bTrigger; // 软件触发校准设置
|
boolean_t bTrigger; // 杞欢瑙﹀彂鏍″噯璁剧疆
|
||||||
boolean_t bAdctr_en; // ADC启动触发OPA自动校准设置
|
boolean_t bAdctr_en; // ADC鍚姩瑙﹀彂OPA鑷姩鏍″噯璁剧疆
|
||||||
en_opa_clksrc_t enClksrc; // 自动校准脉冲宽度设置
|
en_opa_clksrc_t enClksrc; // 鑷姩鏍″噯鑴夊啿瀹藉害璁剧疆
|
||||||
}stc_opa_zcfg_t;
|
}stc_opa_zcfg_t;
|
||||||
|
|
||||||
|
|
||||||
@@ -126,17 +126,17 @@ typedef struct
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Global function prototypes (definition in C source)
|
* Global function prototypes (definition in C source)
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
//OPA 通道使能
|
//OPA 閫氶亾浣胯兘
|
||||||
extern void Opa_Cmd(boolean_t NewStatus);
|
extern void Opa_Cmd(boolean_t NewStatus);
|
||||||
extern void Opa_CmdBuf(boolean_t NewStatus);
|
extern void Opa_CmdBuf(boolean_t NewStatus);
|
||||||
|
|
||||||
//OPA零点校准配置
|
//OPA闆剁偣鏍″噯閰嶇疆
|
||||||
extern void Opa_SetZero(stc_opa_zcfg_t* InitZero);
|
extern void Opa_SetZero(stc_opa_zcfg_t* InitZero);
|
||||||
|
|
||||||
//使能输出OUTX
|
//浣胯兘杈撳嚭OUTX
|
||||||
extern void Opa_CmdOnex(en_opa_oenx_t onex, boolean_t NewState);
|
extern void Opa_CmdOnex(en_opa_oenx_t onex, boolean_t NewState);
|
||||||
|
|
||||||
//配置校零相关的位
|
//閰嶇疆鏍¢浂鐩稿叧鐨勪綅
|
||||||
extern void Opa_ZeroBitCtrl(en_opa_set0ctrl_t CtrlBit, boolean_t NewState);
|
extern void Opa_ZeroBitCtrl(en_opa_set0ctrl_t CtrlBit, boolean_t NewState);
|
||||||
|
|
||||||
//@} // OPA Group
|
//@} // OPA Group
|
||||||
|
|||||||
+7
-7
@@ -1,4 +1,4 @@
|
|||||||
/*************************************************************************************
|
/*************************************************************************************
|
||||||
* Copyright (C) 2016, Huada Semiconductor Co.,Ltd All rights reserved.
|
* Copyright (C) 2016, Huada Semiconductor Co.,Ltd All rights reserved.
|
||||||
*
|
*
|
||||||
* This software is owned and published by:
|
* This software is owned and published by:
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/** \file ram.h
|
/** \file ram.h
|
||||||
**
|
**
|
||||||
** RAM 数据结构及API声明.
|
** RAM 鏁版嵁缁撴瀯鍙夾PI澹版槑.
|
||||||
**
|
**
|
||||||
** - 2019-04-02 LuX V1.0
|
** - 2019-04-02 LuX V1.0
|
||||||
**
|
**
|
||||||
@@ -96,15 +96,15 @@ extern "C"
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
///<中断相关函数
|
///<涓柇鐩稿叧鍑芥暟
|
||||||
///<中断使能/禁止
|
///<涓柇浣胯兘/绂佹
|
||||||
void Ram_EnableIrq(void);
|
void Ram_EnableIrq(void);
|
||||||
void Ram_DisableIrq(void);
|
void Ram_DisableIrq(void);
|
||||||
///<中断标志获取
|
///<涓柇鏍囧織鑾峰彇
|
||||||
boolean_t Ram_GetIntFlag(void);
|
boolean_t Ram_GetIntFlag(void);
|
||||||
///<中断标志清除
|
///<涓柇鏍囧織娓呴櫎
|
||||||
void Ram_ClearIntFlag(void);
|
void Ram_ClearIntFlag(void);
|
||||||
///<奇偶校验出错地址获取
|
///<濂囧伓鏍¢獙鍑洪敊鍦板潃鑾峰彇
|
||||||
uint32_t Ram_ErrAddrGet(void);
|
uint32_t Ram_ErrAddrGet(void);
|
||||||
|
|
||||||
//@} // RamGroup
|
//@} // RamGroup
|
||||||
|
|||||||
+6
-6
@@ -1,4 +1,4 @@
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*Copyright(C)2018, Huada Semiconductor Co.,Ltd All rights reserved.
|
*Copyright(C)2018, Huada Semiconductor Co.,Ltd All rights reserved.
|
||||||
*
|
*
|
||||||
* This software is owned and published by:
|
* This software is owned and published by:
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
** \brief Ram奇偶校验出错地址获取
|
** \brief Ram濂囧伓鏍¢獙鍑洪敊鍦板潃鑾峰彇
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
** \retval ERROR ADDRESS
|
** \retval ERROR ADDRESS
|
||||||
@@ -97,7 +97,7 @@ uint32_t Ram_ErrAddrGet(void)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
** \brief Ram中断标志获取
|
** \brief Ram涓柇鏍囧織鑾峰彇
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
** \retval TRUE or FALSE
|
** \retval TRUE or FALSE
|
||||||
@@ -116,7 +116,7 @@ boolean_t Ram_GetIntFlag(void)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
** \brief Ram中断标志清除
|
** \brief Ram涓柇鏍囧織娓呴櫎
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
** \retval Null
|
** \retval Null
|
||||||
@@ -128,7 +128,7 @@ void Ram_ClearIntFlag(void)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
** \brief Ram中断使能
|
** \brief Ram涓柇浣胯兘
|
||||||
**
|
**
|
||||||
** \retval Null
|
** \retval Null
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
@@ -139,7 +139,7 @@ void Ram_EnableIrq (void)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
** \brief ram中断禁止
|
** \brief ram涓柇绂佹
|
||||||
**
|
**
|
||||||
** \retval Null
|
** \retval Null
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|||||||
+12
-12
@@ -1,4 +1,4 @@
|
|||||||
#ifndef __ALGORITHM_H
|
#ifndef __ALGORITHM_H
|
||||||
#define __ALGORITHM_H
|
#define __ALGORITHM_H
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
@@ -11,20 +11,20 @@
|
|||||||
#define CRC16_BASE 0xA001
|
#define CRC16_BASE 0xA001
|
||||||
|
|
||||||
|
|
||||||
// 峰值谷值检查结果结构体
|
// 峰值谷值检查结果结构体
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool peaks_positive; // 所有峰值是否大于0
|
bool peaks_positive; // 所有峰值是否大于0
|
||||||
bool valleys_negative; // 所有谷值是否小于0
|
bool valleys_negative; // 所有谷值是否小于0
|
||||||
int peak_count; // 检测到的峰值数量
|
int peak_count; // 检测到的峰值数量
|
||||||
int valley_count; // 检测到的谷值数量
|
int valley_count; // 检测到的谷值数量
|
||||||
} PeakValleyCheck;
|
} PeakValleyCheck;
|
||||||
|
|
||||||
// 趋势分析结果结构体
|
// 趋势分析结果结构体
|
||||||
typedef struct {
|
typedef struct {
|
||||||
double slope; // 线性斜率
|
double slope; // 线性斜率
|
||||||
int sign_changes; // 符号变化次数
|
int sign_changes; // 符号变化次数
|
||||||
char trend_type; // 趋势类型
|
char trend_type; // 趋势类型
|
||||||
char steepness; // 陡峭度
|
char steepness; // 陡峭度
|
||||||
} TrendResult;
|
} TrendResult;
|
||||||
|
|
||||||
PeakValleyCheck check_peaks_valleys(int data[], int length);
|
PeakValleyCheck check_peaks_valleys(int data[], int length);
|
||||||
@@ -48,7 +48,7 @@ bool count_greater(int32_t *arr, uint8_t size, int32_t target);
|
|||||||
bool count_smaller(int32_t *arr, uint8_t size, int32_t target);
|
bool count_smaller(int32_t *arr, uint8_t size, int32_t target);
|
||||||
uint16_t CRC_Modbus(uint16_t wBase, uint8_t *para, uint16_t length);
|
uint16_t CRC_Modbus(uint16_t wBase, uint8_t *para, uint16_t length);
|
||||||
uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen);
|
uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen);
|
||||||
bool isAllZero(uint8_t *arr, int size);
|
bool is_all_byte(const uint8_t *data, size_t len, uint8_t val);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+129
-128
@@ -1,19 +1,13 @@
|
|||||||
/* 传感器通用通讯协议V1.0*/
|
/* 传感器通用通讯协议V1.0*/
|
||||||
|
|
||||||
#ifndef __SGCP_H
|
#ifndef __SGCP_H
|
||||||
#define __SGCP_H
|
#define __SGCP_H
|
||||||
#include "bsp.h"
|
#include "bsp.h"
|
||||||
|
|
||||||
#define WORK_MODE 1 //工作模式选择,0、本机为查询模式,1、本机为上报模式(低功耗)
|
#define WORK_MODE 1 //工作模式选择,0、本机为查询模式,1、本机为上报模式(低功耗)
|
||||||
#define SGCP_SELECT 1 //协议选择,0、本机为单个主设备接多个子设备,1、本机为单个主设备不接子设备,2、本机为单个子设备
|
#define SGCP_SELECT 1 //协议选择,0、本机为单个主设备接多个子设备,1、本机为单个主设备不接子设备,2、本机为单个子设备
|
||||||
#define LocalDataLen sizeof(SGCP.DevData.LaserTracing)//本机设备数据长度
|
|
||||||
#define LocalType LASER_TRACING //本机设备类型
|
|
||||||
#define CommWay LORA //本机通讯方式
|
|
||||||
#define DeviceSign MASTER //本机设备标志
|
|
||||||
#define AddNumber (0x000017 + DeviceSign)//本机地址编号,数字部分对应唯一地址编号
|
|
||||||
//09 00 01 00 00 00
|
|
||||||
|
|
||||||
typedef struct {//网关与主设备固定帧
|
typedef struct {//网关与主设备固定帧
|
||||||
uint8_t Header;
|
uint8_t Header;
|
||||||
uint8_t GWAddr[6];
|
uint8_t GWAddr[6];
|
||||||
uint8_t MDAddr[6];
|
uint8_t MDAddr[6];
|
||||||
@@ -21,56 +15,56 @@ typedef struct {//
|
|||||||
uint16_t PayloadLen;
|
uint16_t PayloadLen;
|
||||||
}__attribute__ ((packed))GatewayFrameHeader_t,*GatewayFrameHeader;
|
}__attribute__ ((packed))GatewayFrameHeader_t,*GatewayFrameHeader;
|
||||||
|
|
||||||
typedef struct {//主设备与子设备固定帧
|
typedef struct {//主设备与子设备固定帧
|
||||||
uint8_t Header;
|
uint8_t Header;
|
||||||
uint8_t Addr;
|
uint8_t Addr;
|
||||||
uint8_t Cmd;
|
uint8_t Cmd;
|
||||||
uint8_t PayloadLen;
|
uint8_t PayloadLen;
|
||||||
}__attribute__ ((packed))SubsetFrameHeader_t,*SubsetFrameHeader;
|
}__attribute__ ((packed))SubsetFrameHeader_t,*SubsetFrameHeader;
|
||||||
|
|
||||||
typedef struct {//内部指令固定帧
|
typedef struct {//内部指令固定帧
|
||||||
uint8_t Header;
|
uint8_t Header;
|
||||||
uint8_t MAC[6];
|
uint8_t MAC[6];
|
||||||
uint8_t Cmd;
|
uint8_t Cmd;
|
||||||
uint8_t PayloadLen;
|
uint8_t PayloadLen;
|
||||||
}__attribute__ ((packed))InsideFrameHeader_t,*InsideFrameHeader;
|
}__attribute__ ((packed))InsideFrameHeader_t,*InsideFrameHeader;
|
||||||
|
|
||||||
typedef struct {//主设备固定包头
|
typedef struct {//主设备固定包头
|
||||||
uint8_t BatLevel; //电池电量
|
uint8_t BatLevel; //电池电量
|
||||||
int8_t RSSI; //信号强度
|
int8_t RSSI; //信号强度
|
||||||
int8_t Nsr; //信噪比
|
int8_t Nsr; //信噪比
|
||||||
}__attribute__ ((packed))MasterDev_T,*MasterDevDp;
|
}__attribute__ ((packed))MasterDev_T,*MasterDevDp;
|
||||||
|
|
||||||
typedef struct {//0x0006 三维连续变形
|
typedef struct {//0x0006 三维连续变形
|
||||||
int16_t PitchAngle; //俯仰角 (范围±900)单位0.1°
|
int16_t PitchAngle; //俯仰角 (范围±1800)单位0.1°
|
||||||
int16_t RollAngle; //横滚角 (范围±900)单位0.1°
|
int16_t RollAngle; //横滚角 (范围±1800)单位0.1°
|
||||||
int16_t YawAngle; //偏航角 (范围0~3600)单位0.1°
|
int16_t YawAngle; //偏航角 (范围0~3600)单位0.1°
|
||||||
}__attribute__ ((packed))ContDefor3D_T,*ContDefor3DDp;
|
}__attribute__ ((packed))ContDefor3D_T,*ContDefor3DDp;
|
||||||
|
|
||||||
typedef struct {//0x0007 通讯单元
|
typedef struct {//0x0007 通讯单元
|
||||||
MasterDev_T MasterDev;
|
MasterDev_T MasterDev;
|
||||||
}__attribute__ ((packed))CommUnit_T,*CommUnitDp;
|
}__attribute__ ((packed))CommUnit_T,*CommUnitDp;
|
||||||
|
|
||||||
typedef struct {//0x0008 三维应力
|
typedef struct {//0x0008 三维应力
|
||||||
int16_t PitchAngle; //俯仰角(范围±900)单位0.1°
|
int16_t PitchAngle; //俯仰角(范围±900)单位0.1°
|
||||||
int16_t RollAngle; //横滚角(范围±900)单位0.1°
|
int16_t RollAngle; //横滚角(范围±900)单位0.1°
|
||||||
int16_t YawAngle; //偏航角(范围0~3600)单位0.1°
|
int16_t YawAngle; //偏航角(范围0~3600)单位0.1°
|
||||||
int32_t Strain1; //X轴应力值(范围±10MPa,单位Pa)
|
int32_t Strain1; //X轴应力值(范围±10MPa,单位Pa)
|
||||||
int32_t Strain2; //Y轴应力值(范围±10MPa,单位Pa)
|
int32_t Strain2; //Y轴应力值(范围±10MPa,单位Pa)
|
||||||
int32_t Strain3; //Z轴应力值(范围±10MPa,单位Pa)
|
int32_t Strain3; //Z轴应力值(范围±10MPa,单位Pa)
|
||||||
}__attribute__ ((packed))Force3D_T,*Force3DDp;
|
}__attribute__ ((packed))Force3D_T,*Force3DDp;
|
||||||
|
|
||||||
typedef struct {//0x0009 激光示踪
|
typedef struct {//0x0009 激光示踪
|
||||||
MasterDev_T MasterDev;
|
MasterDev_T MasterDev;
|
||||||
int16_t PitchAngle; //俯仰角 (范围±900)单位0.1°
|
int16_t PitchAngle; //俯仰角 (范围±900)单位0.1°
|
||||||
int16_t RollAngle; //横滚角 (范围±900)单位0.1°
|
int16_t RollAngle; //横滚角 (范围±900)单位0.1°
|
||||||
int16_t YawAngle; //偏航角 (范围0~3600)单位0.1°
|
int16_t YawAngle; //偏航角 (范围0~3600)单位0.1°
|
||||||
}__attribute__ ((packed))LaserTracing_T,*LaserTracingDp;
|
}__attribute__ ((packed))LaserTracing_T,*LaserTracingDp;
|
||||||
|
|
||||||
typedef struct {//0x000E 裂缝仪
|
typedef struct {//0x000E 裂缝仪
|
||||||
int16_t XwiseDist; //横向位移量(范围0~150mm)
|
int16_t XwiseDist; //横向位移量(范围0~150mm)
|
||||||
int16_t LgthwysDist; //纵向位移距离(范围0~150mm)
|
int16_t LgthwysDist; //纵向位移距离(范围0~150mm)
|
||||||
int16_t RotationDist; //旋转位移距离(范围0~150mm)
|
int16_t RotationDist; //旋转位移距离(范围0~150mm)
|
||||||
}__attribute__ ((packed))Crack_T,*CrackDp;
|
}__attribute__ ((packed))Crack_T,*CrackDp;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -79,9 +73,9 @@ typedef struct {
|
|||||||
Force3D_T Force3D;
|
Force3D_T Force3D;
|
||||||
Crack_T Crack;
|
Crack_T Crack;
|
||||||
LaserTracing_T LaserTracing;
|
LaserTracing_T LaserTracing;
|
||||||
}__attribute__ ((packed))DeviceData_T,*DeviceDp; //设备数据
|
}__attribute__ ((packed))DeviceData_T,*DeviceDp; //设备数据
|
||||||
|
|
||||||
/*接收子设备数据状态机*/
|
/*接收子设备数据状态机*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SUB_STATUS_IDLE,
|
SUB_STATUS_IDLE,
|
||||||
SUB_STATUS_BROADCAST_CALI,
|
SUB_STATUS_BROADCAST_CALI,
|
||||||
@@ -95,7 +89,7 @@ typedef enum {
|
|||||||
SUB_STATUS_BROADCAST_SYNC_TIME,
|
SUB_STATUS_BROADCAST_SYNC_TIME,
|
||||||
}SubStatus_m;
|
}SubStatus_m;
|
||||||
|
|
||||||
/*接收网关数据状态机*/
|
/*接收网关数据状态机*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GW_STATUS_IDLE,
|
GW_STATUS_IDLE,
|
||||||
GW_STATUS_WAIT_SUBIDLE,
|
GW_STATUS_WAIT_SUBIDLE,
|
||||||
@@ -105,11 +99,13 @@ typedef enum {
|
|||||||
GW_STATUS_READ_SENSOR,
|
GW_STATUS_READ_SENSOR,
|
||||||
GW_STATUS_SET_COL_TIME,
|
GW_STATUS_SET_COL_TIME,
|
||||||
GW_STATUS_SYNC_TIME,
|
GW_STATUS_SYNC_TIME,
|
||||||
GW_STATUS_UPLOAD_SENSOR,//主动上报模式时会使用该状态
|
GW_STATUS_UPLOAD_SENSOR,//主动上报模式时会使用该状态
|
||||||
GW_STATUS_WAIT_UPLOAD,//主动上报模式时会使用该状态
|
GW_STATUS_WAIT_UPLOAD,//主动上报模式时会使用该状态
|
||||||
GW_STATUS_LASER_STARES,//激光状态回应
|
GW_STATUS_LASER_STARES,//激光状态回应
|
||||||
|
GW_STATUS_SIGNAL,
|
||||||
|
GW_STATUS_WAIT_SIGNAL,
|
||||||
}GWStatus_m;
|
}GWStatus_m;
|
||||||
/*接收主设备数据状态机*/
|
/*接收主设备数据状态机*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
MAS_STATUS_IDLE,
|
MAS_STATUS_IDLE,
|
||||||
MAS_STATUS_CALI,
|
MAS_STATUS_CALI,
|
||||||
@@ -118,80 +114,81 @@ typedef enum {
|
|||||||
MAS_STATUS_SET_COL_TIME,
|
MAS_STATUS_SET_COL_TIME,
|
||||||
MAS_STATUS_SYNC_TIME,
|
MAS_STATUS_SYNC_TIME,
|
||||||
}MasStatus_m;
|
}MasStatus_m;
|
||||||
/*内部指令数据状态机*/
|
/*内部指令数据状态机*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
IN_STATUS_IDLE,
|
IN_STATUS_IDLE,
|
||||||
IN_STATUS_UPDATE,
|
IN_STATUS_UPDATE,
|
||||||
IN_STATUS_ALTER_485ADDR,
|
IN_STATUS_ALTER_485ADDR,
|
||||||
}InStatus_m;
|
}InStatus_m;
|
||||||
/*网关到主设备命令集*/
|
/*网关到主设备命令集*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GWTOMD_CMD_LOGIN = 0x00, //0x00,设备注册
|
GWTOMD_CMD_LOGIN = 0x00, //0x00,设备注册
|
||||||
GWTOMD_CMD_CALI = 0x01, //0x01, 校准指令
|
GWTOMD_CMD_CALI = 0x01, //0x01, 校准指令
|
||||||
GWTOMD_CMD_READ_UPLOAD_SENSOR = 0x02, //0x02,读取数据指令or上传数据指令
|
GWTOMD_CMD_READ_UPLOAD_SENSOR = 0x02, //0x02,读取数据指令or上传数据指令
|
||||||
GWTOMD_CMD_SET_COL_TIME = 0x05, //0x05,设置采集时间间隔
|
GWTOMD_CMD_SET_COL_TIME = 0x05, //0x05,设置采集时间间隔
|
||||||
GWTOMD_CMD_SYNC_TIME = 0x06, //0x06,时间同步
|
GWTOMD_CMD_SYNC_TIME = 0x06, //0x06,时间同步
|
||||||
GWTOMD_CMD_SET_LASER = 0x08,//打开or关闭激光
|
GWTOMD_CMD_SET_LASER = 0x08,//打开or关闭激光
|
||||||
|
GWTOMD_CMD_SIGNAL = 0x09,
|
||||||
}GWTOMD_CMD_M;
|
}GWTOMD_CMD_M;
|
||||||
|
|
||||||
/*主设备到子设备命令集*/
|
/*主设备到子设备命令集*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
MDTOSD_CMD_CALI = 0x01, //0x01, 校准指令
|
MDTOSD_CMD_CALI = 0x01, //0x01, 校准指令
|
||||||
MDTOSD_CMD_READ_DATA = 0x02, //0x02,读取数据指令
|
MDTOSD_CMD_READ_DATA = 0x02, //0x02,读取数据指令
|
||||||
MDTOSD_CMD_INQUIRE = 0x03, //0x03, 设备查询指令
|
MDTOSD_CMD_INQUIRE = 0x03, //0x03, 设备查询指令
|
||||||
MDTOSD_CMD_SET_COL_TIME = 0x05, //0x05,设置采集时间间隔
|
MDTOSD_CMD_SET_COL_TIME = 0x05, //0x05,设置采集时间间隔
|
||||||
MDTOSD_CMD_SYNC_TIME = 0x06, //0x06,时间同步
|
MDTOSD_CMD_SYNC_TIME = 0x06, //0x06,时间同步
|
||||||
}MDTOSD_CMD_M;
|
}MDTOSD_CMD_M;
|
||||||
/*内部指令命令集*/
|
/*内部指令命令集*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
INSIDE_CMD_UPDATE = 0x81, //0x81,升级程序下发请求,由主机发起,从机应答
|
INSIDE_CMD_UPDATE = 0x81, //0x81,升级程序下发请求,由主机发起,从机应答
|
||||||
INSIDE_CMD_ALTER_485ADDR = 0x04, //0x04, 设置设备485地址
|
INSIDE_CMD_ALTER_485ADDR = 0x04, //0x04, 设置设备485地址
|
||||||
}INSIDE_CMD_M;
|
}INSIDE_CMD_M;
|
||||||
/*设备类型*/
|
/*设备类型*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NUL, //0x0000 空设备
|
NUL, //0x0000 空设备
|
||||||
FORCE_6D, //0x0001 六维应力
|
FORCE_6D, //0x0001 六维应力
|
||||||
OSMOTIC_PRESSURE, //0x0002 渗透压
|
OSMOTIC_PRESSURE, //0x0002 渗透压
|
||||||
ELASTIC_WAVEGUIDE, //0x0003 弹性波导
|
ELASTIC_WAVEGUIDE, //0x0003 弹性波导
|
||||||
DIELECTRIC_MASS, //0x0004 介电质普
|
DIELECTRIC_MASS, //0x0004 介电质普
|
||||||
_0x0005, //0x0005 保留
|
_0x0005, //0x0005 保留
|
||||||
CONT_DEFOR_3D, //0x0006 三维连续变形
|
CONT_DEFOR_3D, //0x0006 三维连续变形
|
||||||
COMM_UNIT, //0x0007 通讯单元
|
COMM_UNIT, //0x0007 通讯单元
|
||||||
FORCE_3D, //0x0008 三维应力
|
FORCE_3D, //0x0008 三维应力
|
||||||
LASER_TRACING, //0x0009 激光示踪
|
LASER_TRACING, //0x0009 激光示踪
|
||||||
_0x000A, //0x000A 保留
|
_0x000A, //0x000A 保留
|
||||||
_0x000B, //0x000B 保留
|
_0x000B, //0x000B 保留
|
||||||
_0x000C, //0x000C 保留
|
_0x000C, //0x000C 保留
|
||||||
MULTI_PARAMETER_FUSION, //0x000D 多参数融合
|
MULTI_PARAMETER_FUSION, //0x000D 多参数融合
|
||||||
CRACK_DETECTION, //0x000E 裂缝仪
|
CRACK_DETECTION, //0x000E 裂缝仪
|
||||||
_0x000F, //0x000F 保留
|
_0x000F, //0x000F 保留
|
||||||
ATTITUDE_MONITOR, //0x0010 姿态检测
|
ATTITUDE_MONITOR, //0x0010 姿态检测
|
||||||
LASER_DISPLACE, //0x0011 激光位移
|
LASER_DISPLACE, //0x0011 激光位移
|
||||||
REBAR_STRESS, //0x0012 钢筋应力
|
REBAR_STRESS, //0x0012 钢筋应力
|
||||||
ANCHOR_ROD_STRESS, //0x0013 锚杆轴力
|
ANCHOR_ROD_STRESS, //0x0013 锚杆轴力
|
||||||
SURFACE_STRESS, //0x0014 表面应力
|
SURFACE_STRESS, //0x0014 表面应力
|
||||||
PRESSURE, //0x0015 压力
|
PRESSURE, //0x0015 压力
|
||||||
MICROWAVE_DISPLACE, //0x0016 微波测距
|
MICROWAVE_DISPLACE, //0x0016 微波测距
|
||||||
}DEVICE_TYPE_M;
|
}DEVICE_TYPE_M;
|
||||||
/*通讯方式*/
|
/*通讯方式*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
LORA = 0x01, //0x01 LORA通讯
|
LORA = 0x01, //0x01 LORA通讯
|
||||||
RS485 = 0x02, //0x02 RS485通讯
|
RS485 = 0x02, //0x02 RS485通讯
|
||||||
RS232 = 0x03, //0x03 RS232通讯
|
RS232 = 0x03, //0x03 RS232通讯
|
||||||
CAN = 0x04, //0x04 CAN通讯
|
CAN = 0x04, //0x04 CAN通讯
|
||||||
_4G = 0x05, //0x05 _4G通讯
|
CATONE = 0x05, //0x05 _4G通讯
|
||||||
BLE = 0x06, //0x06 BLE通讯
|
BLE = 0x06, //0x06 BLE通讯
|
||||||
WIFI = 0x07, //0x07 WIFI通讯
|
WIFI = 0x07, //0x07 WIFI通讯
|
||||||
UART = 0x08, //0x08 UART通讯
|
UART = 0x08, //0x08 UART通讯
|
||||||
}COMM_WAY_M;
|
}COMM_WAY_M;
|
||||||
/*设备标志*/
|
/*设备标志*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
MASTER = 0x000000, //0x000000 主设备
|
MASTER = 0x000000, //0x000000 主设备
|
||||||
SUBSET = 0x800000, //0x800000 子设备
|
SUBSET = 0x800000, //0x800000 子设备
|
||||||
}DEVICE_SIGN_M;
|
}DEVICE_SIGN_M;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
__IO GWTOMD_CMD_M rCmdGWToMD; //网关下发命令
|
__IO GWTOMD_CMD_M rCmdGWToMD; //网关下发命令
|
||||||
__IO GWTOMD_CMD_M sCmdMDToGW; //主设备返回命令
|
__IO GWTOMD_CMD_M sCmdMDToGW; //主设备返回命令
|
||||||
__IO uint16_t rPayLen;
|
__IO uint16_t rPayLen;
|
||||||
__IO bool HeaderFrame;
|
__IO bool HeaderFrame;
|
||||||
__IO uint8_t RxLen;
|
__IO uint8_t RxLen;
|
||||||
@@ -199,8 +196,8 @@ typedef struct {
|
|||||||
}GWTOMD_Rx_T;
|
}GWTOMD_Rx_T;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
__IO MDTOSD_CMD_M rCmdSDToMD; //子设备返回命令
|
__IO MDTOSD_CMD_M rCmdSDToMD; //子设备返回命令
|
||||||
__IO MDTOSD_CMD_M sCmdMDToSD; //主设备下发命令
|
__IO MDTOSD_CMD_M sCmdMDToSD; //主设备下发命令
|
||||||
__IO uint8_t rPayLen;
|
__IO uint8_t rPayLen;
|
||||||
__IO bool HeaderFrame;
|
__IO bool HeaderFrame;
|
||||||
__IO uint8_t RxLen;
|
__IO uint8_t RxLen;
|
||||||
@@ -218,12 +215,12 @@ typedef struct {
|
|||||||
GWTOMD_Rx_T GWRS485Rx;
|
GWTOMD_Rx_T GWRS485Rx;
|
||||||
uint8_t GatewayBuffLen;
|
uint8_t GatewayBuffLen;
|
||||||
uint8_t GatewayBuff[256];
|
uint8_t GatewayBuff[256];
|
||||||
uint8_t GatewayRevTimeoutCnt; //网关串口接收超时计数
|
uint8_t GatewayRevTimeoutCnt; //网关串口接收超时计数
|
||||||
|
|
||||||
MDTOSD_Rx_T SDRS485Rx;
|
MDTOSD_Rx_T SDRS485Rx;
|
||||||
uint8_t SubsetBuffLen;
|
uint8_t SubsetBuffLen;
|
||||||
uint8_t SubsetBuff[256];
|
uint8_t SubsetBuff[256];
|
||||||
uint8_t SubsetRevTimeoutCnt; //子设备串口接收超时计数
|
uint8_t SubsetRevTimeoutCnt; //子设备串口接收超时计数
|
||||||
|
|
||||||
uint8_t InsidePayLen;
|
uint8_t InsidePayLen;
|
||||||
uint8_t InsideBuffLen;
|
uint8_t InsideBuffLen;
|
||||||
@@ -239,43 +236,47 @@ typedef struct {
|
|||||||
|
|
||||||
DeviceData_T DevData;
|
DeviceData_T DevData;
|
||||||
|
|
||||||
bool SubsetCaliOk; //子设备校准标志位
|
bool SubsetCaliOk; //子设备校准标志位
|
||||||
bool MasterCaliOk; //主设备标校标志位
|
bool MasterCaliOk; //主设备标校标志位
|
||||||
|
|
||||||
uint8_t ReadDataAdd; //获取数据地址
|
uint8_t ReadDataAdd; //获取数据地址
|
||||||
uint16_t DeviceDataLen; //在线设备采集到的数据长度总和
|
uint16_t DeviceDataLen; //在线设备采集到的数据长度总和
|
||||||
uint8_t DeviceDataBuff[512]; //在线设备采集到的数据缓存(主设备的数据永远排在最前面)
|
uint8_t DeviceDataBuff[512]; //在线设备采集到的数据缓存(主设备的数据永远排在最前面)
|
||||||
uint8_t DeviceData[512]; //在线设备采集到的数据(主设备的数据永远排在最前面)
|
uint8_t DeviceData[512]; //在线设备采集到的数据(主设备的数据永远排在最前面)
|
||||||
bool SubsetReadDataOk; //子设备读取数据成功标志位
|
bool SubsetReadDataOk; //子设备读取数据成功标志位
|
||||||
bool DeviceReadDataOk; //设备读取数据完成标志位
|
bool DeviceReadDataOk; //设备读取数据完成标志位
|
||||||
|
|
||||||
uint8_t DeviceN; //在线设备数量(最多32个子设备,1个主设备)
|
uint8_t DeviceN; //在线设备数量(最多32个子设备,1个主设备)
|
||||||
uint8_t Dev485Addr; //在线设备485地址(最多32个子设备,1个主设备)
|
uint8_t Dev485Addr; //在线设备485地址(最多32个子设备,1个主设备)
|
||||||
uint8_t Dev485Addrs[16]; //在线设备485地址缓存,0位为0x00广播地址
|
uint8_t Dev485Addrs[16]; //在线设备485地址缓存,0位为0x00广播地址
|
||||||
uint8_t DeviceMAC[16][6]; //在线设备的唯一MAC地址(主设备的MAC永远排在最前面)
|
uint8_t DeviceMAC[16][6]; //在线设备的唯一MAC地址(主设备的MAC永远排在最前面)
|
||||||
bool SubsetMACOk; //在线子设备MAC获取成功标志位
|
bool SubsetMACOk; //在线子设备MAC获取成功标志位
|
||||||
bool DeviceMACOk; //在线设备获取完成标志位
|
bool DeviceMACOk; //在线设备获取完成标志位
|
||||||
|
|
||||||
bool CollTimeSetOk; //采集时间设置成功标志位
|
bool CollTimeSetOk; //采集时间设置成功标志位
|
||||||
uint8_t CollTimeAdd; //设置采集时间地址
|
uint8_t CollTimeAdd; //设置采集时间地址
|
||||||
|
|
||||||
bool SyncTimeOk; //时间同步成功标志位
|
bool SyncTimeOk; //时间同步成功标志位
|
||||||
uint8_t SyncTimeAdd; //时间同步设备地址
|
uint8_t SyncTimeAdd; //时间同步设备地址
|
||||||
|
|
||||||
bool BroadCmd; //广播命令
|
bool BroadCmd; //广播命令
|
||||||
|
|
||||||
bool LoginOk; //注册成功标志位
|
bool LoginOk; //注册成功标志位
|
||||||
bool LoginMess;
|
bool LoginMess;
|
||||||
|
|
||||||
bool UploadOk; //上传成功标志位
|
bool UploadOk; //上传成功标志位
|
||||||
bool UploadMess;
|
bool UploadMess;
|
||||||
|
|
||||||
bool Gateway_IRQ_Status; //网关接收中断
|
bool Gateway_IRQ_Status; //网关接收中断
|
||||||
bool Subset_IRQ_Status; //子设备接收中断
|
bool Subset_IRQ_Status; //子设备接收中断
|
||||||
bool TimingAcquisition; //采集传感器数据
|
bool TimingAcquisition; //采集传感器数据
|
||||||
|
|
||||||
/**激光示踪私有**/
|
/**激光示踪私有**/
|
||||||
bool LaserOnOff; //打开与关闭激光标志位
|
bool LaserOnOff; //打开与关闭激光标志位
|
||||||
|
int8_t SignalRSSI;
|
||||||
|
int8_t SignalSNR;
|
||||||
|
uint8_t LaserTimerMinutes; //激光定时关闭分钟数
|
||||||
|
uint16_t LaserTimerCount; //激光定时计数(RTC 30s)
|
||||||
}SGCP_t;
|
}SGCP_t;
|
||||||
extern SGCP_t SGCP;
|
extern SGCP_t SGCP;
|
||||||
|
|
||||||
|
|||||||
+7
-16
@@ -1,9 +1,8 @@
|
|||||||
#ifndef __UPDATE_H
|
#ifndef __UPDATE_H
|
||||||
#define __UPDATE_H
|
#define __UPDATE_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "bsp.h"
|
#include "bsp.h"
|
||||||
#include "UartDebug.h"
|
|
||||||
|
|
||||||
#define APP_START_FLAG 0x55AA5A5A
|
#define APP_START_FLAG 0x55AA5A5A
|
||||||
#define APP_UPDATE_FLAG 0xA5A5AA55
|
#define APP_UPDATE_FLAG 0xA5A5AA55
|
||||||
@@ -24,22 +23,14 @@
|
|||||||
#define BOOT_PARA_ADDRESS (0x0001FC00)//(FLASH_BASE + BOOT_SIZE)
|
#define BOOT_PARA_ADDRESS (0x0001FC00)//(FLASH_BASE + BOOT_SIZE)
|
||||||
#define BOOT_PARA_SIZE (FLASH_SECTOR_SIZE)
|
#define BOOT_PARA_SIZE (FLASH_SECTOR_SIZE)
|
||||||
|
|
||||||
typedef struct {
|
//主机下发升级请求载荷结构体
|
||||||
uint32_t AppFlag;
|
|
||||||
uint32_t UpdateFlag;
|
|
||||||
uint32_t PackageCnt;
|
|
||||||
uint32_t AppSize;
|
|
||||||
uint32_t Crc32Check;
|
|
||||||
}BootPara_t, *BootPara;
|
|
||||||
|
|
||||||
//主机下发升级请求载荷结构体
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t PackageNum;
|
uint16_t PackageNum;
|
||||||
uint32_t AppSize;
|
uint32_t AppSize;
|
||||||
uint32_t AppCrc32;
|
uint32_t AppCrc32;
|
||||||
}__attribute__ ((packed))UpDataRequset_t, *UDReq;
|
}__attribute__ ((packed))UpDataRequset_t, *UDReq;
|
||||||
|
|
||||||
//帧头结构体
|
//帧头结构体
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t Header;
|
uint8_t Header;
|
||||||
uint8_t DevMac[6];
|
uint8_t DevMac[6];
|
||||||
@@ -48,14 +39,14 @@ typedef struct {
|
|||||||
}__attribute__((packed))UpdateFrameHeader_t,*pUpdateFrameHeader;
|
}__attribute__((packed))UpdateFrameHeader_t,*pUpdateFrameHeader;
|
||||||
|
|
||||||
|
|
||||||
//输入接口函数定义,需根据接口重新定义
|
//输入接口函数定义,需根据接口重新定义
|
||||||
#define U_DBG_LOG(...) DBG_LOG(__VA_ARGS__)
|
#define U_DBG_LOG(...) DBG_LOG(__VA_ARGS__)
|
||||||
#define U_DELAY_MS(x) delay_ms(x)
|
#define U_DELAY_MS(x) delay_ms(x)
|
||||||
#define U_SYSTEM_TESET() SystemReset()
|
#define U_SYSTEM_TESET() SystemReset()
|
||||||
#define SAVE_BOOT_PARA(addr) FlashWrite(BOOT_PARA_ADDRESS, addr, sizeof(BLPara) / 4)
|
#define SAVE_BOOT_PARA(addr) SAVE_APP_PARA(addr)
|
||||||
#define READ_BOOT_PARA(addr) FlashRead(BOOT_PARA_ADDRESS, addr, sizeof(BLPara) / 4)
|
#define READ_BOOT_PARA(addr) READ_APP_PARA(addr)
|
||||||
|
|
||||||
//输出接口
|
//输出接口
|
||||||
void Update(uint8_t *PayLoad);
|
void Update(uint8_t *PayLoad);
|
||||||
void UpdateInit(void);
|
void UpdateInit(void);
|
||||||
#endif
|
#endif
|
||||||
+149
-114
@@ -1,4 +1,4 @@
|
|||||||
#ifndef _BSP_H
|
#ifndef _BSP_H
|
||||||
#define _BSP_H
|
#define _BSP_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
@@ -6,25 +6,25 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
|
#include "Update.h"
|
||||||
|
|
||||||
/*模块启用与关闭*/
|
/*模块启用与关闭*/
|
||||||
#define USE_DEBUG 1 //调试串口选择,0、关闭,1、启用
|
#define USE_DEBUG 1 //调试串口选择,0、关闭,1、启用
|
||||||
#define USE_VBAT_AD 1 //电池电压AD获取选择,0、关闭,1、启用
|
#define USE_VBAT_AD 1 //电池电压AD获取选择,0、关闭,1、启用
|
||||||
#define USE_WDT 1 //看门狗选择,0、关闭,1启用
|
#define USE_WDT 1 //看门狗选择,0、关闭,1启用
|
||||||
#define USE_EXFALSE 0 //外部FALSE存储选择,0、关闭,1、启用
|
#define USE_EXFALSE 0 //外部FALSE存储选择,0、关闭,1、启用
|
||||||
#define USE_LED 1 //状态灯选择,0、关闭,1、启用
|
#define USE_LED 1 //状态灯选择,0、关闭,1、启用
|
||||||
#define USE_RTC 1 //RTC时钟开关,0、关闭,1、开启
|
#define USE_RTC 1 //RTC时钟开关,0、关闭,1、开启
|
||||||
|
|
||||||
#define USE_LPUART0 1 //LPUART0开关,0、关闭,1、启用
|
#define USE_LPUART0 1 //LPUART0开关,0、关闭,1、启用
|
||||||
#define USE_UART0 1 //UART0开关,0、关闭,1、启用
|
#define USE_UART0 1 //UART0开关,0、关闭,1、启用
|
||||||
#define USE_UART1 0 //UART0开关,0、关闭,1、启用
|
#define USE_UART1 0 //UART0开关,0、关闭,1、启用
|
||||||
#define USE_I2C0 1 //I2C0开关,0、关闭,1、启用
|
#define USE_I2C0 1 //I2C0开关,0、关闭,1、启用
|
||||||
#define USE_I2C1 1 //I2C1开关,0、关闭,1、启用
|
#define USE_I2C1 1 //I2C1开关,0、关闭,1、启用
|
||||||
#define USE_SPI0 1 //SPI1开关,0、关闭,1、启用
|
#define USE_SPI0 1 //SPI1开关,0、关闭,1、启用
|
||||||
#define USE_SPI1 0 //SPI1开关,0、关闭,1、启用
|
#define USE_SPI1 0 //SPI1开关,0、关闭,1、启用
|
||||||
|
|
||||||
#define USE_BOOTLOADER 1 //BOOTLOADER开关,0、关闭,1、启用
|
//#define USE_BOOTLOADER 1 //BOOTLOADER开关,0、关闭,1、启用
|
||||||
#define USE_LORA_CH 1 //0为测试通道
|
|
||||||
|
|
||||||
//<<---------------------------- MCU -------------------------------->>
|
//<<---------------------------- MCU -------------------------------->>
|
||||||
//< UART0
|
//< UART0
|
||||||
@@ -45,196 +45,230 @@
|
|||||||
#define UART1_RX_PIN GpioPin1
|
#define UART1_RX_PIN GpioPin1
|
||||||
#define UART1_RX_AF GpioAf3
|
#define UART1_RX_AF GpioAf3
|
||||||
|
|
||||||
//< 低功耗串口
|
//< 低功耗串口
|
||||||
#define LPUart0_TxPortx GpioPortB //低功耗串口0通道
|
#define LPUart0_TxPortx GpioPortB //低功耗串口0通道
|
||||||
#define LPUART0_TxPinx GpioPin10 //配置PB10为LPUART0_Tx
|
#define LPUART0_TxPinx GpioPin10 //配置PB10为LPUART0_Tx
|
||||||
#define LPUART0_TX_AF GpioAf4
|
#define LPUART0_TX_AF GpioAf4
|
||||||
|
|
||||||
#define LPUart0_RxPortx GpioPortB //低功耗串口0通道
|
#define LPUart0_RxPortx GpioPortB //低功耗串口0通道
|
||||||
#define LPUART0_RxPinx GpioPin11 //配置PB11为LPUART0_Rx
|
#define LPUART0_RxPinx GpioPin11 //配置PB11为LPUART0_Rx
|
||||||
#define LPUART0_RX_AF GpioAf3
|
#define LPUART0_RX_AF GpioAf3
|
||||||
|
|
||||||
//< SPI0
|
//< SPI0
|
||||||
#define SPI0_NSS_PORTx GpioPortA //NSSIO口
|
#define SPI0_NSS_PORTx GpioPortA //NSSIO口
|
||||||
#define SPI0_NSS_PINx GpioPin15 //配置PA04为NSS
|
#define SPI0_NSS_PINx GpioPin15 //配置PA04为NSS
|
||||||
#define SET_SPI0_NSS() Gpio_SetIO(SPI0_NSS_PORTx, SPI0_NSS_PINx) //NSS拉高
|
#define SET_SPI0_NSS() Gpio_SetIO(SPI0_NSS_PORTx, SPI0_NSS_PINx) //NSS拉高
|
||||||
#define CLR_SPI0_NSS() Gpio_ClrIO(SPI0_NSS_PORTx, SPI0_NSS_PINx) //NSS拉低
|
#define CLR_SPI0_NSS() Gpio_ClrIO(SPI0_NSS_PORTx, SPI0_NSS_PINx) //NSS拉低
|
||||||
#define SPI0_NSS_AF GpioAf1
|
#define SPI0_NSS_AF GpioAf1
|
||||||
|
|
||||||
#define SPI0_SCK_PORTx GpioPortB //SCKIO口
|
#define SPI0_SCK_PORTx GpioPortB //SCKIO口
|
||||||
#define SPI0_SCK_PINx GpioPin3 //配置PA05为SCK
|
#define SPI0_SCK_PINx GpioPin3 //配置PA05为SCK
|
||||||
#define SET_SPI0_SCK() Gpio_SetIO(SPI0_SCK_PORTx, SPI0_SCK_PINx) //SCK拉高
|
#define SET_SPI0_SCK() Gpio_SetIO(SPI0_SCK_PORTx, SPI0_SCK_PINx) //SCK拉高
|
||||||
#define CLR_SPI0_SCK() Gpio_ClrIO(SPI0_SCK_PORTx, SPI0_SCK_PINx) //SCK拉低
|
#define CLR_SPI0_SCK() Gpio_ClrIO(SPI0_SCK_PORTx, SPI0_SCK_PINx) //SCK拉低
|
||||||
#define SPI0_SCK_AF GpioAf1
|
#define SPI0_SCK_AF GpioAf1
|
||||||
|
|
||||||
#define SPI0_MISO_PORTx GpioPortB //MISOIO口
|
#define SPI0_MISO_PORTx GpioPortB //MISOIO口
|
||||||
#define SPI0_MISO_PINx GpioPin4 //配置PA06为MISO
|
#define SPI0_MISO_PINx GpioPin4 //配置PA06为MISO
|
||||||
#define SET_SPI0_MISO() Gpio_SetIO(SPI0_MISO_PORTx, SPI0_MISO_PINx) //MISO拉高
|
#define SET_SPI0_MISO() Gpio_SetIO(SPI0_MISO_PORTx, SPI0_MISO_PINx) //MISO拉高
|
||||||
#define CLR_SPI0_MISO() Gpio_ClrIO(SPI0_MISO_PORTx, SPI0_MISO_PINx) //MISO拉低
|
#define CLR_SPI0_MISO() Gpio_ClrIO(SPI0_MISO_PORTx, SPI0_MISO_PINx) //MISO拉低
|
||||||
#define SPI0_MISO_AF GpioAf1
|
#define SPI0_MISO_AF GpioAf1
|
||||||
|
|
||||||
#define SPI0_MOSI_PORTx GpioPortB //MOSIIO口
|
#define SPI0_MOSI_PORTx GpioPortB //MOSIIO口
|
||||||
#define SPI0_MOSI_PINx GpioPin5 //配置PA07为MOSI
|
#define SPI0_MOSI_PINx GpioPin5 //配置PA07为MOSI
|
||||||
#define SET_SPI0_MOSI() Gpio_SetIO(SPI0_MOSI_PORTx, SPI0_MOSI_PINx) //MOSI拉高
|
#define SET_SPI0_MOSI() Gpio_SetIO(SPI0_MOSI_PORTx, SPI0_MOSI_PINx) //MOSI拉高
|
||||||
#define CLR_SPI0_MOSI() Gpio_ClrIO(SPI0_MOSI_PORTx, SPI0_MOSI_PINx) //MOSI拉低
|
#define CLR_SPI0_MOSI() Gpio_ClrIO(SPI0_MOSI_PORTx, SPI0_MOSI_PINx) //MOSI拉低
|
||||||
#define SPI0_MOSI_AF GpioAf1
|
#define SPI0_MOSI_AF GpioAf1
|
||||||
|
|
||||||
//< SPI1
|
//< SPI1
|
||||||
#define SPI1_NSS_PORTx GpioPortB //NSSIO口
|
#define SPI1_NSS_PORTx GpioPortB //NSSIO口
|
||||||
#define SPI1_NSS_PINx GpioPin12 //配置PB12为NSS
|
#define SPI1_NSS_PINx GpioPin12 //配置PB12为NSS
|
||||||
#define SET_SPI1_NSS() Gpio_SetIO(SPI1_NSS_PORTx, SPI1_NSS_PINx) //NSS拉高
|
#define SET_SPI1_NSS() Gpio_SetIO(SPI1_NSS_PORTx, SPI1_NSS_PINx) //NSS拉高
|
||||||
#define CLR_SPI1_NSS() Gpio_ClrIO(SPI1_NSS_PORTx, SPI1_NSS_PINx) //NSS拉低
|
#define CLR_SPI1_NSS() Gpio_ClrIO(SPI1_NSS_PORTx, SPI1_NSS_PINx) //NSS拉低
|
||||||
#define SPI1_NSS_AF GpioAf1
|
#define SPI1_NSS_AF GpioAf1
|
||||||
|
|
||||||
#define SPI1_SCK_PORTx GpioPortB //SCKIO口
|
#define SPI1_SCK_PORTx GpioPortB //SCKIO口
|
||||||
#define SPI1_SCK_PINx GpioPin3 //配置PB13为SCK
|
#define SPI1_SCK_PINx GpioPin3 //配置PB13为SCK
|
||||||
#define SET_SPI1_SCK() Gpio_SetIO(SPI1_SCK_PORTx, SPI1_SCK_PINx) //SCK拉高
|
#define SET_SPI1_SCK() Gpio_SetIO(SPI1_SCK_PORTx, SPI1_SCK_PINx) //SCK拉高
|
||||||
#define CLR_SPI1_SCK() Gpio_ClrIO(SPI1_SCK_PORTx, SPI1_SCK_PINx) //SCK拉低
|
#define CLR_SPI1_SCK() Gpio_ClrIO(SPI1_SCK_PORTx, SPI1_SCK_PINx) //SCK拉低
|
||||||
#define SPI1_SCK_AF GpioAf1
|
#define SPI1_SCK_AF GpioAf1
|
||||||
|
|
||||||
#define SPI1_MISO_PORTx GpioPortB //MISOIO口
|
#define SPI1_MISO_PORTx GpioPortB //MISOIO口
|
||||||
#define SPI1_MISO_PINx GpioPin4 //配置PB14为MISO
|
#define SPI1_MISO_PINx GpioPin4 //配置PB14为MISO
|
||||||
#define SET_SPI1_MISO() Gpio_SetIO(SPI1_MISO_PORTx, SPI1_MISO_PINx) //MISO拉高
|
#define SET_SPI1_MISO() Gpio_SetIO(SPI1_MISO_PORTx, SPI1_MISO_PINx) //MISO拉高
|
||||||
#define CLR_SPI1_MISO() Gpio_ClrIO(SPI1_MISO_PORTx, SPI1_MISO_PINx) //MISO拉低
|
#define CLR_SPI1_MISO() Gpio_ClrIO(SPI1_MISO_PORTx, SPI1_MISO_PINx) //MISO拉低
|
||||||
#define SPI1_MISO_AF GpioAf1
|
#define SPI1_MISO_AF GpioAf1
|
||||||
|
|
||||||
#define SPI1_MOSI_PORTx GpioPortB //MOSIIO口
|
#define SPI1_MOSI_PORTx GpioPortB //MOSIIO口
|
||||||
#define SPI1_MOSI_PINx GpioPin5 //配置PB15为MOSI
|
#define SPI1_MOSI_PINx GpioPin5 //配置PB15为MOSI
|
||||||
#define SET_SPI1_MOSI() Gpio_SetIO(SPI1_MOSI_PORTx, SPI1_MOSI_PINx) //MOSI拉高
|
#define SET_SPI1_MOSI() Gpio_SetIO(SPI1_MOSI_PORTx, SPI1_MOSI_PINx) //MOSI拉高
|
||||||
#define CLR_SPI1_MOSI() Gpio_ClrIO(SPI1_MOSI_PORTx, SPI1_MOSI_PINx) //MOSI拉低
|
#define CLR_SPI1_MOSI() Gpio_ClrIO(SPI1_MOSI_PORTx, SPI1_MOSI_PINx) //MOSI拉低
|
||||||
#define SPI1_MOSI_AF GpioAf1
|
#define SPI1_MOSI_AF GpioAf1
|
||||||
|
|
||||||
//< I2C0
|
//< I2C0
|
||||||
#define I2C0_SCL_PORTx GpioPortF //SCL的GPIO通道
|
#define I2C0_SCL_PORTx GpioPortF //SCL的GPIO通道
|
||||||
#define I2C0_SCL_PINx GpioPin1 //SCL的通道位
|
#define I2C0_SCL_PINx GpioPin1 //SCL的通道位
|
||||||
#define I2C0_SCL_AF GpioAf1
|
#define I2C0_SCL_AF GpioAf1
|
||||||
#define SET_I2C0_SCL() Gpio_SetIO(I2C0_SCL_PORTx, I2C0_SCL_PINx)
|
#define SET_I2C0_SCL() Gpio_SetIO(I2C0_SCL_PORTx, I2C0_SCL_PINx)
|
||||||
#define CLR_I2C0_SCL() Gpio_ClrIO(I2C0_SCL_PORTx, I2C0_SCL_PINx)
|
#define CLR_I2C0_SCL() Gpio_ClrIO(I2C0_SCL_PORTx, I2C0_SCL_PINx)
|
||||||
|
|
||||||
#define I2C0_SDA_PORTx GpioPortF //SDA的GPIO通道
|
#define I2C0_SDA_PORTx GpioPortF //SDA的GPIO通道
|
||||||
#define I2C0_SDA_PINx GpioPin0 //SDA的通道位
|
#define I2C0_SDA_PINx GpioPin0 //SDA的通道位
|
||||||
#define I2C0_SDA_AF GpioAf1
|
#define I2C0_SDA_AF GpioAf1
|
||||||
#define SET_I2C0_SDA() Gpio_SetIO(I2C0_SDA_PORTx, I2C0_SDA_PINx)
|
#define SET_I2C0_SDA() Gpio_SetIO(I2C0_SDA_PORTx, I2C0_SDA_PINx)
|
||||||
#define CLR_I2C0_SDA() Gpio_ClrIO(I2C0_SDA_PORTx, I2C0_SDA_PINx)
|
#define CLR_I2C0_SDA() Gpio_ClrIO(I2C0_SDA_PORTx, I2C0_SDA_PINx)
|
||||||
|
|
||||||
//< I2C1
|
//< I2C1
|
||||||
#define I2C1_SCL_PORTx GpioPortA //SCL的GPIO通道
|
#define I2C1_SCL_PORTx GpioPortA //SCL的GPIO通道
|
||||||
#define I2C1_SCL_PINx GpioPin11 //SCL的通道位
|
#define I2C1_SCL_PINx GpioPin11 //SCL的通道位
|
||||||
#define I2C1_SCL_AF GpioAf3
|
#define I2C1_SCL_AF GpioAf3
|
||||||
#define SET_I2C1_SCL() Gpio_SetIO(I2C1_SCL_PORTx, I2C1_SCL_PINx)
|
#define SET_I2C1_SCL() Gpio_SetIO(I2C1_SCL_PORTx, I2C1_SCL_PINx)
|
||||||
#define CLR_I2C1_SCL() Gpio_ClrIO(I2C1_SCL_PORTx, I2C1_SCL_PINx)
|
#define CLR_I2C1_SCL() Gpio_ClrIO(I2C1_SCL_PORTx, I2C1_SCL_PINx)
|
||||||
|
|
||||||
#define I2C1_SDA_PORTx GpioPortA //SDA的GPIO通道
|
#define I2C1_SDA_PORTx GpioPortA //SDA的GPIO通道
|
||||||
#define I2C1_SDA_PINx GpioPin12 //SDA的通道位
|
#define I2C1_SDA_PINx GpioPin12 //SDA的通道位
|
||||||
#define I2C1_SDA_AF GpioAf3
|
#define I2C1_SDA_AF GpioAf3
|
||||||
#define SET_I2C1_SDA() Gpio_SetIO(I2C1_SDA_PORTx, I2C1_SDA_PINx)
|
#define SET_I2C1_SDA() Gpio_SetIO(I2C1_SDA_PORTx, I2C1_SDA_PINx)
|
||||||
#define CLR_I2C1_SDA() Gpio_ClrIO(I2C1_SDA_PORTx, I2C1_SDA_PINx)
|
#define CLR_I2C1_SDA() Gpio_ClrIO(I2C1_SDA_PORTx, I2C1_SDA_PINx)
|
||||||
|
|
||||||
//<<---------------------------- 485 -------------------------------->>
|
//<<---------------------------- 485 -------------------------------->>
|
||||||
//< LPUart0
|
//< LPUart0
|
||||||
#define RS485_CTRL_PORTx GpioPortB //RS485_1通信控制
|
#define RS485_CTRL_PORTx GpioPortB //RS485_1通信控制
|
||||||
#define RS485_CTRL_PINx GpioPin1 //配置PB02为RS485_1_CTRL
|
#define RS485_CTRL_PINx GpioPin1 //配置PB02为RS485_1_CTRL
|
||||||
#define RS485_CTRL_TX() Gpio_SetIO(RS485_CTRL_PORTx, RS485_CTRL_PINx) //RS485_1_CTRL拉高发送
|
#define RS485_CTRL_TX() Gpio_SetIO(RS485_CTRL_PORTx, RS485_CTRL_PINx) //RS485_1_CTRL拉高发送
|
||||||
#define RS485_CTRL_RX() Gpio_ClrIO(RS485_CTRL_PORTx, RS485_CTRL_PINx) //RS485_1_CTRL拉低接收
|
#define RS485_CTRL_RX() Gpio_ClrIO(RS485_CTRL_PORTx, RS485_CTRL_PINx) //RS485_1_CTRL拉低接收
|
||||||
|
|
||||||
//<<---------------------------- LED -------------------------------->>
|
//<<---------------------------- LED -------------------------------->>
|
||||||
//< LED_State
|
//< LED_State
|
||||||
#define LED_STATE_PORTx GpioPortF //状态指示灯IO通道
|
#define LED_STATE_PORTx GpioPortF //状态指示灯IO通道
|
||||||
#define LED_STATE_PINx GpioPin7 //状态指示灯脚位
|
#define LED_STATE_PINx GpioPin7 //状态指示灯脚位
|
||||||
#define LED_ON() Gpio_SetIO(LED_STATE_PORTx, LED_STATE_PINx);//状态指示灯亮
|
#define LED_ON() Gpio_SetIO(LED_STATE_PORTx, LED_STATE_PINx);//状态指示灯亮
|
||||||
#define LED_OFF() Gpio_ClrIO(LED_STATE_PORTx, LED_STATE_PINx);//状态指示灯灭
|
#define LED_OFF() Gpio_ClrIO(LED_STATE_PORTx, LED_STATE_PINx);//状态指示灯灭
|
||||||
|
|
||||||
//<<---------------------------- LORA --> SPI0 -------------------------------->>
|
//<<---------------------------- LORA --> SPI0 -------------------------------->>
|
||||||
//< LORA --> DIO0
|
//< LORA --> DIO0
|
||||||
#define LORA_DIO0_PORTx GpioPortB //LORA_DIO0口
|
#define LORA_DIO0_PORTx GpioPortB //LORA_DIO0口
|
||||||
#define LORA_DIO0_PINx GpioPin7 //配置PA01为DIO0
|
#define LORA_DIO0_PINx GpioPin7 //配置PA01为DIO0
|
||||||
#define GET_LORA_DIO0() Gpio_GetInputIO(LORA_DIO0_PORTx, LORA_DIO0_PINx) //获取LORA_DIO0电平状态
|
#define GET_LORA_DIO0() Gpio_GetInputIO(LORA_DIO0_PORTx, LORA_DIO0_PINx) //获取LORA_DIO0电平状态
|
||||||
//< LORA --> DIO1
|
//< LORA --> DIO1
|
||||||
#define LORA_DIO1_PORTx GpioPortB //LORA_DIO0口
|
#define LORA_DIO1_PORTx GpioPortB //LORA_DIO0口
|
||||||
#define LORA_DIO1_PINx GpioPin0 //配置PA01为DIO0
|
#define LORA_DIO1_PINx GpioPin0 //配置PA01为DIO0
|
||||||
#define GET_LORA_DIO1() Gpio_GetInputIO(LORA_DIO1_PORTx, LORA_DIO1_PINx) //获取LORA_DIO0电平状态
|
#define GET_LORA_DIO1() Gpio_GetInputIO(LORA_DIO1_PORTx, LORA_DIO1_PINx) //获取LORA_DIO0电平状态
|
||||||
|
|
||||||
//< LORA --> RST
|
//< LORA --> RST
|
||||||
#define LORA_RST_PORTx GpioPortB //LORA_RST口
|
#define LORA_RST_PORTx GpioPortB //LORA_RST口
|
||||||
#define LORA_RST_PINx GpioPin6 //配置PA00为RST
|
#define LORA_RST_PINx GpioPin6 //配置PA00为RST
|
||||||
#define SET_LORA_RST() Gpio_SetIO(LORA_RST_PORTx, LORA_RST_PINx) //LORA复位脚拉高
|
#define SET_LORA_RST() Gpio_SetIO(LORA_RST_PORTx, LORA_RST_PINx) //LORA复位脚拉高
|
||||||
#define CLR_LORA_RST() Gpio_ClrIO(LORA_RST_PORTx, LORA_RST_PINx) //LORA复位脚拉低
|
#define CLR_LORA_RST() Gpio_ClrIO(LORA_RST_PORTx, LORA_RST_PINx) //LORA复位脚拉低
|
||||||
|
|
||||||
//<<---------------------------- LSM6DSLTR --> I2C0 -------------------------------->>
|
//<<---------------------------- LSM6DSLTR --> I2C0 -------------------------------->>
|
||||||
//< ACC_INT1
|
//< ACC_INT1
|
||||||
#define LSM6DSLTR_INT1_PORTx GpioPortC //LSM6DSLTR中断1IO通道
|
#define LSM6DSLTR_INT1_PORTx GpioPortC //LSM6DSLTR中断1IO通道
|
||||||
#define LSM6DSLTR_INT1_PINx GpioPin15 //配置PB01为ACC_INT1
|
#define LSM6DSLTR_INT1_PINx GpioPin15 //配置PB01为ACC_INT1
|
||||||
#define GET_LSM6DSLTR_INT1() Gpio_GetInputIO(LSM6DSLTR_INT1_PORTx, LSM6DSLTR_INT1_PINx) //获取ACC_INT1电平状态
|
#define GET_LSM6DSLTR_INT1() Gpio_GetInputIO(LSM6DSLTR_INT1_PORTx, LSM6DSLTR_INT1_PINx) //获取ACC_INT1电平状态
|
||||||
|
|
||||||
//< ACC_INT2
|
//< ACC_INT2
|
||||||
#define LSM6DSLTR_INT2_PORTx GpioPortC //LSM6DSLTR中断1IO通道
|
#define LSM6DSLTR_INT2_PORTx GpioPortC //LSM6DSLTR中断1IO通道
|
||||||
#define LSM6DSLTR_INT2_PINx GpioPin13 //配置PA08为ACC_INT2
|
#define LSM6DSLTR_INT2_PINx GpioPin13 //配置PA08为ACC_INT2
|
||||||
#define GET_LSM6DSLTR_INT2() Gpio_GetInputIO(LSM6DSLTR_INT2_PORTx, LSM6DSLTR_INT2_PINx) //获取ACC_INT2电平状态
|
#define GET_LSM6DSLTR_INT2() Gpio_GetInputIO(LSM6DSLTR_INT2_PORTx, LSM6DSLTR_INT2_PINx) //获取ACC_INT2电平状态
|
||||||
|
|
||||||
//<<---------------------------- MMC5983MA --> I2C0 -------------------------------->>
|
//<<---------------------------- MMC5983MA --> I2C0 -------------------------------->>
|
||||||
//< MMC0_INT
|
//< MMC0_INT
|
||||||
#define MMC5983MA_INT_PORTx GpioPortC //MMC5983MA中断IO通道
|
#define MMC5983MA_INT_PORTx GpioPortC //MMC5983MA中断IO通道
|
||||||
#define MMC5983MA_INT_PINx GpioPin14 //配置PB00为MMC_INT
|
#define MMC5983MA_INT_PINx GpioPin14 //配置PB00为MMC_INT
|
||||||
#define GET_MMC5983MA_INT() Gpio_GetInputIO(MMC5983MA_INT_PORTx, MMC5983MA_INT_PINx) //获取ACC_INT2电平状态
|
#define GET_MMC5983MA_INT() Gpio_GetInputIO(MMC5983MA_INT_PORTx, MMC5983MA_INT_PINx) //获取ACC_INT2电平状态
|
||||||
|
|
||||||
//<<---------------------------- LASER -------------------------------->>
|
//<<---------------------------- LASER -------------------------------->>
|
||||||
//< LASER1
|
//< LASER1
|
||||||
#define LASER1_ON_OFF_PORTx GpioPortB
|
#define LASER1_ON_OFF_PORTx GpioPortB
|
||||||
#define LASER1_ON_OFF_PINx GpioPin14
|
#define LASER1_ON_OFF_PINx GpioPin14
|
||||||
#define LASER1_ON() Gpio_SetIO(LASER1_ON_OFF_PORTx, LASER1_ON_OFF_PINx) //LORA复位脚拉高
|
#define LASER1_ON() Gpio_SetIO(LASER1_ON_OFF_PORTx, LASER1_ON_OFF_PINx) //LORA复位脚拉高
|
||||||
#define LASER1_OFF() Gpio_ClrIO(LASER1_ON_OFF_PORTx, LASER1_ON_OFF_PINx) //LORA复位脚拉低
|
#define LASER1_OFF() Gpio_ClrIO(LASER1_ON_OFF_PORTx, LASER1_ON_OFF_PINx) //LORA复位脚拉低
|
||||||
//< LASER2
|
//< LASER2
|
||||||
#define LASER2_ON_OFF_PORTx GpioPortB
|
#define LASER2_ON_OFF_PORTx GpioPortB
|
||||||
#define LASER2_ON_OFF_PINx GpioPin13
|
#define LASER2_ON_OFF_PINx GpioPin13
|
||||||
#define LASER2_ON() Gpio_SetIO(LASER2_ON_OFF_PORTx, LASER2_ON_OFF_PINx) //LORA复位脚拉高
|
#define LASER2_ON() Gpio_SetIO(LASER2_ON_OFF_PORTx, LASER2_ON_OFF_PINx) //LORA复位脚拉高
|
||||||
#define LASER2_OFF() Gpio_ClrIO(LASER2_ON_OFF_PORTx, LASER2_ON_OFF_PINx) //LORA复位脚拉低
|
#define LASER2_OFF() Gpio_ClrIO(LASER2_ON_OFF_PORTx, LASER2_ON_OFF_PINx) //LORA复位脚拉低
|
||||||
//< LASER3
|
//< LASER3
|
||||||
#define LASER3_ON_OFF_PORTx GpioPortB
|
#define LASER3_ON_OFF_PORTx GpioPortB
|
||||||
#define LASER3_ON_OFF_PINx GpioPin12
|
#define LASER3_ON_OFF_PINx GpioPin12
|
||||||
#define LASER3_ON() Gpio_SetIO(LASER3_ON_OFF_PORTx, LASER3_ON_OFF_PINx) //LORA复位脚拉高
|
#define LASER3_ON() Gpio_SetIO(LASER3_ON_OFF_PORTx, LASER3_ON_OFF_PINx) //LORA复位脚拉高
|
||||||
#define LASER3_OFF() Gpio_ClrIO(LASER3_ON_OFF_PORTx, LASER3_ON_OFF_PINx) //LORA复位脚拉低
|
#define LASER3_OFF() Gpio_ClrIO(LASER3_ON_OFF_PORTx, LASER3_ON_OFF_PINx) //LORA复位脚拉低
|
||||||
|
|
||||||
//<<------------------------------ ADC ---------------------------------->>
|
//<<------------------------------ ADC ---------------------------------->>
|
||||||
#define AD_ON_OFF_PORTx GpioPortA
|
#define AD_ON_OFF_PORTx GpioPortA
|
||||||
#define AD_ON_OFF_PINx GpioPin3
|
#define AD_ON_OFF_PINx GpioPin3
|
||||||
#define AD_ON() Gpio_SetIO(AD_ON_OFF_PORTx, AD_ON_OFF_PINx) //LORA复位脚拉高
|
#define AD_ON() Gpio_SetIO(AD_ON_OFF_PORTx, AD_ON_OFF_PINx)
|
||||||
#define AD_OFF() Gpio_ClrIO(AD_ON_OFF_PORTx, AD_ON_OFF_PINx) //LORA复位脚拉低
|
#define AD_OFF() Gpio_ClrIO(AD_ON_OFF_PORTx, AD_ON_OFF_PINx)
|
||||||
|
|
||||||
#define VBAT_PORTx GpioPortA
|
#define VBAT_PORTx GpioPortA
|
||||||
#define VBAT_PINx GpioPin4
|
#define VBAT_PINx GpioPin4
|
||||||
#define VBAT_ADC_PORTx AdcExInputCH4//采样通道
|
#define VBAT_ADC_PORTx AdcExInputCH4//采样通道
|
||||||
#define VBAT_CAL 3.5 //电池电压校准
|
#define VBAT_CAL 3.5 //电池电压校准
|
||||||
|
|
||||||
//< 电池电压
|
//< 电池电压
|
||||||
extern float VBAT_8V4;
|
extern float VBAT_8V4;
|
||||||
extern uint8_t VBAT_Percentage;
|
extern uint8_t VBAT_Percentage;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t AppFlag;
|
||||||
|
uint32_t UpdateFlag;
|
||||||
|
uint32_t PackageCnt;
|
||||||
|
uint32_t AppSize;
|
||||||
|
uint32_t Crc32Check;
|
||||||
|
uint32_t FirstRunFlag;//第一次运行
|
||||||
|
uint8_t DevMac[6];//设备MAC
|
||||||
|
uint32_t LoraFreq;//Lora频率
|
||||||
|
}BootPara_t, *BootPara;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t CollectTime; //数据采集时间间隔,设置范围30*N秒,1<=N<=240,(默认5分钟,N=10)
|
uint16_t CollectTime; //数据采集时间间隔,设置范围30*N秒,1<=N<=240,(默认300秒,N=10)
|
||||||
uint16_t ReportInterval; //上报时间间隔,设置范围,30*N秒,10<=N<=1440(默认20分钟,N=40)
|
uint16_t ReportInterval; //上报时间间隔,设置范围,30*N秒,10<=N<=1440(默认1200秒,N=40)
|
||||||
uint8_t ERInterval; //紧急上报时间间隔,设置范围,30*N秒,2<=N<=10(默认2分钟,N=4)
|
uint8_t ERInterval; //紧急上报时间间隔,设置范围,30*N秒,2<=N<=10(默认120秒,N=4)
|
||||||
uint8_t ERTime; //紧急上报时长,设置范围,30*N秒,20<=N<=240(默认20分钟,N=40)
|
uint8_t ERTime; //紧急上报时长,设置范围,30*N秒,20<=N<=240(默认1200秒,N=40)
|
||||||
uint32_t TimeStamp; //网关返回RTC时间戳
|
uint32_t TimeStamp; //网关返回RTC时间戳
|
||||||
}__attribute__((packed))LayoutPara_t,*LayoutPara;//上位机下发的配置参数
|
}__attribute__((packed))LayoutPara_t,*LayoutPara;//上位机下发的配置参数
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int16_t PitchZero; //俯仰角零点
|
int16_t PitchZero; //俯仰角零点
|
||||||
int16_t RollZero; //横滚角零点
|
int16_t RollZero; //横滚角零点
|
||||||
int16_t YawZero; //偏航角零点
|
int16_t YawZero; //偏航角零点
|
||||||
}__attribute__ ((packed))CalibratePara_t, *CalibratePara;
|
}__attribute__ ((packed))CalibratePara_t, *CalibratePara;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
bool OnOff;
|
||||||
|
uint8_t ucChannel;
|
||||||
|
int8_t ucPower;
|
||||||
|
uint8_t SignalBw;
|
||||||
|
uint8_t SpreadFactor;
|
||||||
|
uint8_t ErrorCoding;
|
||||||
|
uint8_t RegPreamble;
|
||||||
|
uint32_t FreqCent;
|
||||||
|
}__attribute__ ((packed))LoraPara_t, *pLoraPara;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
bool Enable; //串口使能
|
||||||
|
bool UpgradeEnable;//升级功能使能
|
||||||
|
uint32_t Addr; //本机485地址
|
||||||
|
uint32_t BaudRate;
|
||||||
|
}__attribute__((packed))RS485Para_t, *RS485Para;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
BootPara_t BLPara;
|
||||||
LayoutPara_t Layout;
|
LayoutPara_t Layout;
|
||||||
CalibratePara_t CaliPara;
|
CalibratePara_t CaliPara;
|
||||||
uint32_t RS485Addr; //本机485地址
|
RS485Para_t Rs485Ch1;
|
||||||
uint32_t FactoryFlag;//出厂标志位
|
RS485Para_t Rs485Ch2;
|
||||||
|
uint32_t FactoryFlag;//出厂标志位
|
||||||
|
uint8_t LaserTimerMinutes; //激光定时关闭分钟数
|
||||||
|
LoraPara_t Lora;
|
||||||
}AppPara_T, *pAppPara;
|
}AppPara_T, *pAppPara;
|
||||||
#define APP_PARA_ADDRESS (0x0001FE00)
|
//#define APP_PARA_ADDRESS (0x0001FC00)
|
||||||
#define SAVE_APP_PARA(addr) FlashWrite(APP_PARA_ADDRESS, addr, sizeof(App.Para) / 4)
|
#define SAVE_APP_PARA(addr) FlashWrite(BOOT_PARA_ADDRESS, addr, sizeof(App.Para) / 4)
|
||||||
#define READ_APP_PARA(addr) FlashRead(APP_PARA_ADDRESS, addr, sizeof(App.Para) / 4)
|
#define READ_APP_PARA(addr) FlashRead(BOOT_PARA_ADDRESS, addr, sizeof(App.Para) / 4)
|
||||||
|
|
||||||
void BspInit(void);
|
void BspInit(void);
|
||||||
|
void LpUart0Init(uint32_t Baud);
|
||||||
|
void Uart0Init(uint32_t Baud);
|
||||||
void EnterDeepSleep(void);
|
void EnterDeepSleep(void);
|
||||||
void DBGUartSendByte(uint8_t sData);
|
void DBGUartSendByte(uint8_t sData);
|
||||||
void DBGUartSend(uint8_t *sData, int sLen);
|
void DBGUartSend(uint8_t *sData, int sLen);
|
||||||
@@ -269,3 +303,4 @@ void LORAIntDisable(void);
|
|||||||
void ACCandMMCIntEnable(void);
|
void ACCandMMCIntEnable(void);
|
||||||
void ACCandMMCIntDisable(void);
|
void ACCandMMCIntDisable(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
+50
-40
@@ -1,42 +1,50 @@
|
|||||||
#ifndef __MAIN_H
|
#ifndef __MAIN_H
|
||||||
#define __MAIN_H
|
#define __MAIN_H
|
||||||
#include "bsp.h"
|
#include "bsp.h"
|
||||||
#include "UartDebug.h"
|
#include "UartDebug.h"
|
||||||
|
#include "Update.h"
|
||||||
#include "Imu.h"
|
#include "Imu.h"
|
||||||
|
|
||||||
|
#define SOFTWARE_VERSION 12 //软件版本
|
||||||
|
#define HARDWARE_VERSION 11 //硬件版本
|
||||||
|
|
||||||
|
#define MAIN_DBG_LOG(...) { if(MainDispEn) DBG_LOG(__VA_ARGS__);}
|
||||||
|
#define DATA_DBG_LOG(...) { if(DataDispEn) DBG_LOG(__VA_ARGS__);}
|
||||||
|
|
||||||
|
|
||||||
#define X 0
|
#define X 0
|
||||||
#define Y 1
|
#define Y 1
|
||||||
#define Z 2
|
#define Z 2
|
||||||
#define XYZ 3
|
#define XYZ 3
|
||||||
|
|
||||||
#define SYSTEM_TIMING_LOGIN (86400 / 30) //系统定时注册时间(一天86400秒)
|
#define SYSTEM_TIMING_LOGIN (86400 / 30) //系统定时注册时间(一天86400秒)
|
||||||
#define ERR_TIMING_LOGIN (1800 / 30) //注册错误重新注册时间(半个小时1800秒)
|
#define ERR_TIMING_LOGIN (1800 / 30) //注册错误重新注册时间(半个小时1800秒)
|
||||||
|
|
||||||
#define TEST_TIME (60*60*1000)
|
#define TEST_TIME (60*60*1000)
|
||||||
|
|
||||||
#define ERINTERVAL_VPT 10 //紧急上报阈值,单位0.1°
|
#define ERINTERVAL_VPT 10 //紧急上报阈值,单位0.1°
|
||||||
#define ERINTERVAL_VPT 10 //紧急上报阈值,单位0.1°
|
#define ERINTERVAL_VPT 10 //紧急上报阈值,单位0.1°
|
||||||
|
|
||||||
typedef struct {//传感器原始数据
|
typedef struct {//传感器原始数据
|
||||||
float acce[XYZ];
|
float acce[XYZ];
|
||||||
float gy[XYZ];
|
float gy[XYZ];
|
||||||
float mag[XYZ];
|
float mag[XYZ];
|
||||||
}__attribute__ ((packed))SensorData_T,*SensorDp;//传感器数据
|
}__attribute__ ((packed))SensorData_T,*SensorDp;//传感器数据
|
||||||
|
|
||||||
typedef struct {//转换的数据
|
typedef struct {//转换的数据
|
||||||
int16_t Pitch; //俯仰角偏斜 (范围±900)单位0.1°
|
int16_t Pitch; //俯仰角偏斜 (范围±900)单位0.1°
|
||||||
int16_t Roll; //横滚角偏斜 (范围±900)单位0.1°
|
int16_t Roll; //横滚角偏斜 (范围±900)单位0.1°
|
||||||
int16_t Yaw; //偏航角偏斜 (范围0~3600)单位0.1°
|
int16_t Yaw; //偏航角偏斜 (范围0~3600)单位0.1°
|
||||||
// int16_t Temp; //温度值
|
// int16_t Temp; //温度值
|
||||||
// int32_t AD; //AD值
|
// int32_t AD; //AD值
|
||||||
}__attribute__ ((packed))ConvertedData_T, *ConvertedDp;
|
}__attribute__ ((packed))ConvertedData_T, *ConvertedDp;
|
||||||
|
|
||||||
typedef struct {// 姿态角数据
|
typedef struct {// 姿态角数据
|
||||||
Rad_T Rad;
|
Rad_T Rad;
|
||||||
Deg_T Deg;
|
Deg_T Deg;
|
||||||
}__attribute__ ((packed))AHRSData_T,*AHRSDp;
|
}__attribute__ ((packed))AHRSData_T,*AHRSDp;
|
||||||
|
|
||||||
/*主程序状态机*/
|
/*主程序状态机*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
APP_STATUS_IDLE,
|
APP_STATUS_IDLE,
|
||||||
APP_STATUS_SLEEP,
|
APP_STATUS_SLEEP,
|
||||||
@@ -47,7 +55,7 @@ typedef enum {
|
|||||||
APP_STATUS_WAIT_UPLOAD,
|
APP_STATUS_WAIT_UPLOAD,
|
||||||
}AppStatus_m;
|
}AppStatus_m;
|
||||||
|
|
||||||
/*数据读取状态机*/
|
/*数据读取状态机*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
READDATA_STATUS_IDLE,
|
READDATA_STATUS_IDLE,
|
||||||
READDATA_STATUS_UPDAING,
|
READDATA_STATUS_UPDAING,
|
||||||
@@ -56,8 +64,8 @@ typedef enum {
|
|||||||
}ReadDataStatus_m;
|
}ReadDataStatus_m;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
AppStatus_m Status;//状态
|
AppStatus_m Status;//状态
|
||||||
ReadDataStatus_m RDStatus;//读取数据状态
|
ReadDataStatus_m RDStatus;//读取数据状态
|
||||||
|
|
||||||
uint32_t TD1mSDelayCnt;
|
uint32_t TD1mSDelayCnt;
|
||||||
uint8_t FeedDogDlyCnt;
|
uint8_t FeedDogDlyCnt;
|
||||||
@@ -69,39 +77,41 @@ typedef struct {
|
|||||||
AHRSData_T AHRSData;
|
AHRSData_T AHRSData;
|
||||||
ConvertedData_T ConvertedData;
|
ConvertedData_T ConvertedData;
|
||||||
|
|
||||||
uint32_t RepeLoginCount; //24h重复注册计数
|
uint32_t RepeLoginCount; //24h重复注册计数
|
||||||
uint8_t Login30MinCount; //注册30分定时计数
|
uint8_t Login30MinCount; //注册30分定时计数
|
||||||
uint8_t Login2Min30SCount; //注册100ms~2分+30s定时计数
|
uint8_t Login2Min30SCount; //注册100ms~2分+30s定时计数
|
||||||
bool Login_RTC; //注册30分定时器启动标志位
|
bool Login_RTC; //注册30分定时器启动标志位
|
||||||
bool Login_LPTimer0; //注册100ms~2分+30s定时器启动标志位
|
bool Login_LPTimer0; //注册100ms~2分+30s定时器启动标志位
|
||||||
bool LoginFlag; //注册标志位
|
bool LoginFlag; //注册标志位
|
||||||
|
|
||||||
uint16_t Coll_N; //数据采集时间计数
|
uint16_t Coll_N; //数据采集时间计数
|
||||||
uint16_t Repor_N; //上报时间计数
|
uint16_t Repor_N; //上报时间计数
|
||||||
uint16_t ERInterval_N; //紧急上报时间间隔计数
|
uint16_t ERInterval_N; //紧急上报时间间隔计数
|
||||||
uint8_t ERTime_N; //紧急上报时间计数
|
uint8_t ERTime_N; //紧急上报时间计数
|
||||||
bool ERFlag; //紧急上报标志位
|
bool ERFlag; //紧急上报标志位
|
||||||
|
|
||||||
bool UploadFlag; //上传数据标志位
|
bool UploadFlag; //上传数据标志位
|
||||||
uint8_t Upload45S10SCount; //上传数据超时计数
|
uint8_t Upload45S10SCount; //上传数据超时计数
|
||||||
bool Upload_LPTimer0; //上传100~10000ms+45秒定时器启动标志位
|
bool Upload_LPTimer0; //上传100~10000ms+45秒定时器启动标志位
|
||||||
|
|
||||||
bool MagRead_EndFlag;
|
bool MagRead_EndFlag;
|
||||||
bool AccRead_EndFlag;
|
bool AccRead_EndFlag;
|
||||||
bool UpdateOk; //数据更新标志位
|
bool UpdateOk; //数据更新标志位
|
||||||
|
|
||||||
bool CaliFlag; //标校标志位
|
bool CaliFlag; //标校标志位
|
||||||
|
|
||||||
int16_t Nonce; //随机数
|
uint16_t Nonce; //随机数
|
||||||
|
bool AttTestMode; //姿态测试模式标志位
|
||||||
uint32_t TestTimeCnt;
|
uint32_t AttTestCnt; //姿态测试打印计数(ms)
|
||||||
uint8_t Tcnt;
|
|
||||||
bool LaserFlag;
|
|
||||||
}AppDetect_t;
|
}AppDetect_t;
|
||||||
|
|
||||||
extern AppDetect_t App;
|
extern AppDetect_t App;
|
||||||
|
|
||||||
|
void MainDBGOnOff(bool OnOff);
|
||||||
|
void DataDBGOnOff(bool OnOff);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+201
-201
@@ -1,50 +1,50 @@
|
|||||||
#include "bsp.h"
|
#include "bsp.h"
|
||||||
#include "Algorithm.h"
|
#include "Algorithm.h"
|
||||||
#include "UartDebug.h"
|
#include "UartDebug.h"
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: check_peaks_valleys_ratio
|
* 函数名称: check_peaks_valleys_ratio
|
||||||
* 功能描述: 检查数据的峰值是否大于0,谷值是否小于0(忽略0值)
|
* 功能描述: 检查数据的峰值是否大于0,谷值是否小于0(忽略0值)
|
||||||
* 参 数: data, 数据
|
* 参 数: data, 数据
|
||||||
length, 数据长度
|
length, 数据长度
|
||||||
* 返 回 值: 结果返回峰值谷值检查结果结构体
|
* 返 回 值: 结果返回峰值谷值检查结果结构体
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
PeakValleyCheck check_peaks_valleys(int data[], int length) {
|
PeakValleyCheck check_peaks_valleys(int data[], int length) {
|
||||||
PeakValleyCheck result = {true, true, 0, 0};
|
PeakValleyCheck result = {true, true, 0, 0};
|
||||||
|
|
||||||
// 如果数据长度小于3,无法形成有效的峰值/谷值
|
// 如果数据长度小于3,无法形成有效的峰值/谷值
|
||||||
if (length < 3) {
|
if (length < 3) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
// 跳过开头的0值
|
// 跳过开头的0值
|
||||||
while (i < length && data[i] == 0) {
|
while (i < length && data[i] == 0) {
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 遍历数据点
|
// 遍历数据点
|
||||||
while (i < length) {
|
while (i < length) {
|
||||||
// 1. 寻找下一个非零点作为起点
|
// 1. 寻找下一个非零点作为起点
|
||||||
int start = i;
|
int start = i;
|
||||||
while (i < length && data[i] == 0) {
|
while (i < length && data[i] == 0) {
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (i >= length) break;
|
if (i >= length) break;
|
||||||
|
|
||||||
// 2. 寻找当前非零段的结束点
|
// 2. 寻找当前非零段的结束点
|
||||||
int end = i;
|
int end = i;
|
||||||
while (end < length && data[end] != 0) {
|
while (end < length && data[end] != 0) {
|
||||||
end++;
|
end++;
|
||||||
}
|
}
|
||||||
end--; // 指向最后一个非零点
|
end--; // 指向最后一个非零点
|
||||||
|
|
||||||
// 3. 在当前非零段中检测峰值和谷值
|
// 3. 在当前非零段中检测峰值和谷值
|
||||||
for (int j = i; j <= end; j++) {
|
for (int j = i; j <= end; j++) {
|
||||||
// 跳过边界点
|
// 跳过边界点
|
||||||
if (j == i || j == end) continue;
|
if (j == i || j == end) continue;
|
||||||
|
|
||||||
// 检查是否为峰值(大于左右相邻的非零点)
|
// 检查是否为峰值(大于左右相邻的非零点)
|
||||||
if (data[j] > data[j-1] && data[j] > data[j+1]) {
|
if (data[j] > data[j-1] && data[j] > data[j+1]) {
|
||||||
result.peak_count++;
|
result.peak_count++;
|
||||||
if (data[j] <= 0) {
|
if (data[j] <= 0) {
|
||||||
@@ -52,7 +52,7 @@ PeakValleyCheck check_peaks_valleys(int data[], int length) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查是否为谷值(小于左右相邻的非零点)
|
// 检查是否为谷值(小于左右相邻的非零点)
|
||||||
if (data[j] < data[j-1] && data[j] < data[j+1]) {
|
if (data[j] < data[j-1] && data[j] < data[j+1]) {
|
||||||
result.valley_count++;
|
result.valley_count++;
|
||||||
if (data[j] >= 0) {
|
if (data[j] >= 0) {
|
||||||
@@ -61,33 +61,33 @@ PeakValleyCheck check_peaks_valleys(int data[], int length) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 移动到下一段
|
// 移动到下一段
|
||||||
i = end + 1;
|
i = end + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: analyze_trend
|
* 函数名称: analyze_trend
|
||||||
* 功能描述: 趋势分析函数
|
* 功能描述: 趋势分析函数
|
||||||
* 参 数: data, 数据
|
* 参 数: data, 数据
|
||||||
length, 数据长度
|
length, 数据长度
|
||||||
* 返 回 值: 结果返回趋势分析结构体
|
* 返 回 值: 结果返回趋势分析结构体
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
TrendResult analyze_trend(int data[], int length) {
|
TrendResult analyze_trend(int data[], int length) {
|
||||||
TrendResult result = {0};
|
TrendResult result = {0};
|
||||||
#if 1
|
#if 1
|
||||||
// 0. 检查有效数据长度
|
// 0. 检查有效数据长度
|
||||||
if (length < 2) {
|
if (length < 2) {
|
||||||
DBG_LOG("Data deficient\r\n");
|
DBG_LOG("Data deficient\r\n");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1. 计算线性回归斜率
|
// 1. 计算线性回归斜率
|
||||||
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_x2 = 0;
|
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_x2 = 0;
|
||||||
|
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
double x = i; // 时间序列 (0,1,2,...)
|
double x = i; // 时间序列 (0,1,2,...)
|
||||||
double y = data[i];
|
double y = data[i];
|
||||||
sum_x += x;
|
sum_x += x;
|
||||||
sum_y += y;
|
sum_y += y;
|
||||||
@@ -98,15 +98,15 @@ TrendResult analyze_trend(int data[], int length) {
|
|||||||
double numerator = length * sum_xy - sum_x * sum_y;
|
double numerator = length * sum_xy - sum_x * sum_y;
|
||||||
double denominator = length * sum_x2 - sum_x * sum_x;
|
double denominator = length * sum_x2 - sum_x * sum_x;
|
||||||
|
|
||||||
// 处理分母为零的情况
|
// 处理分母为零的情况
|
||||||
if (fabs(denominator) > 1e-10) {
|
if (fabs(denominator) > 1e-10) {
|
||||||
result.slope = numerator / denominator;
|
result.slope = numerator / denominator;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
#if 0
|
||||||
// 2. 计算振荡特征(差分符号变化次数)
|
// 2. 计算振荡特征(差分符号变化次数)
|
||||||
int sign_changes = 0;
|
int sign_changes = 0;
|
||||||
int prev_sign = 0; // 0=未初始化, 1=正, -1=负
|
int prev_sign = 0; // 0=未初始化, 1=正, -1=负
|
||||||
|
|
||||||
for (int i = 1; i < length; i++) {
|
for (int i = 1; i < length; i++) {
|
||||||
int diff = data[i] - data[i-1];
|
int diff = data[i] - data[i-1];
|
||||||
@@ -122,66 +122,66 @@ TrendResult analyze_trend(int data[], int length) {
|
|||||||
result.sign_changes = sign_changes;
|
result.sign_changes = sign_changes;
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
#if 0
|
||||||
// 3. 动态计算阈值(基于数据长度)
|
// 3. 动态计算阈值(基于数据长度)
|
||||||
int oscillation_threshold = (int)(0.4 * (length - 1)); // 40%的变化率
|
int oscillation_threshold = (int)(0.4 * (length - 1)); // 40%的变化率
|
||||||
double slope_threshold = 0.05 * (length / 20.0); // 长度标准化
|
double slope_threshold = 0.05 * (length / 20.0); // 长度标准化
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
#if 0
|
||||||
// 4. 趋势判断
|
// 4. 趋势判断
|
||||||
if (sign_changes >= oscillation_threshold) {
|
if (sign_changes >= oscillation_threshold) {
|
||||||
//DBG_LOG("Oscillating trend\r\n");//振荡趋势
|
//DBG_LOG("Oscillating trend\r\n");//振荡趋势
|
||||||
result.trend_type = 0;
|
result.trend_type = 0;
|
||||||
} else if (fabs(result.slope) < slope_threshold) {
|
} else if (fabs(result.slope) < slope_threshold) {
|
||||||
//DBG_LOG("Smooth trend\r\n");//平稳趋势
|
//DBG_LOG("Smooth trend\r\n");//平稳趋势
|
||||||
result.trend_type = 1;
|
result.trend_type = 1;
|
||||||
} else if (result.slope > 0) {
|
} else if (result.slope > 0) {
|
||||||
//DBG_LOG("Up trend\r\n");//上升趋势
|
//DBG_LOG("Up trend\r\n");//上升趋势
|
||||||
result.trend_type = 2;
|
result.trend_type = 2;
|
||||||
} else {
|
} else {
|
||||||
//DBG_LOG("Down trend\r\n");//下降趋势
|
//DBG_LOG("Down trend\r\n");//下降趋势
|
||||||
result.trend_type = 3;
|
result.trend_type = 3;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
#if 0
|
||||||
// 5. 陡峭判断
|
// 5. 陡峭判断
|
||||||
double abs_slope = fabs(result.slope);
|
double abs_slope = fabs(result.slope);
|
||||||
if (abs_slope > 0.8) {
|
if (abs_slope > 0.8) {
|
||||||
//DBG_LOG("Steeply");//陡峭
|
//DBG_LOG("Steeply");//陡峭
|
||||||
result.sign_changes = 0;
|
result.sign_changes = 0;
|
||||||
} else if (abs_slope > 0.3) {
|
} else if (abs_slope > 0.3) {
|
||||||
//DBG_LOG("Obvious");//明显
|
//DBG_LOG("Obvious");//明显
|
||||||
result.sign_changes = 1;
|
result.sign_changes = 1;
|
||||||
} else if (abs_slope > 0.1) {
|
} else if (abs_slope > 0.1) {
|
||||||
//DBG_LOG("Mild");//温和
|
//DBG_LOG("Mild");//温和
|
||||||
result.sign_changes = 2;
|
result.sign_changes = 2;
|
||||||
} else {
|
} else {
|
||||||
//DBG_LOG("gentle");//平缓
|
//DBG_LOG("gentle");//平缓
|
||||||
result.sign_changes = 3;
|
result.sign_changes = 3;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: calculateAverage
|
* 函数名称: calculateAverage
|
||||||
* 功能描述: 计算平均值
|
* 功能描述: 计算平均值
|
||||||
* 参 数: arr, 数据
|
* 参 数: arr, 数据
|
||||||
size, 数据长度
|
size, 数据长度
|
||||||
* 返 回 值: 结果返回 long long 防溢出
|
* 返 回 值: 结果返回 long long 防溢出
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
float calculateAverage(int *arr, int size)
|
float calculateAverage(int *arr, int size)
|
||||||
{
|
{
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
sum += arr[i]; // 累加数组中的每个元素
|
sum += arr[i]; // 累加数组中的每个元素
|
||||||
}
|
}
|
||||||
return (float)sum / size; // 返回平均值
|
return (float)sum / size; // 返回平均值
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: slope
|
* 函数名称: slope
|
||||||
* 功能描述: 计算斜率
|
* 功能描述: 计算斜率
|
||||||
* 参 数: x_data, x轴数据
|
* 参 数: x_data, x轴数据
|
||||||
y_data, y轴数据
|
y_data, y轴数据
|
||||||
* 返 回 值: 结果返回 long long 防溢出
|
* 返 回 值: 结果返回 long long 防溢出
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
double slope(int32_t *x_data, int32_t *y_data, int n)
|
double slope(int32_t *x_data, int32_t *y_data, int n)
|
||||||
{
|
{
|
||||||
@@ -196,30 +196,30 @@ double slope(int32_t *x_data, int32_t *y_data, int n)
|
|||||||
return sum_xy / sum_xx;
|
return sum_xy / sum_xx;
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: power
|
* 函数名称: power
|
||||||
* 功能描述: 快速幂算法
|
* 功能描述: 快速幂算法
|
||||||
* 参 数: base, 滤波数据
|
* 参 数: base, 滤波数据
|
||||||
exponent, 滤波数据长度
|
exponent, 滤波数据长度
|
||||||
* 返 回 值: 结果返回 long long 防溢出
|
* 返 回 值: 结果返回 long long 防溢出
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
long long power(int base, unsigned int exponent) {
|
long long power(int base, unsigned int exponent) {
|
||||||
long long result = 1;
|
long long result = 1;
|
||||||
while (exponent > 0) {
|
while (exponent > 0) {
|
||||||
if (exponent % 2 == 1) {
|
if (exponent % 2 == 1) {
|
||||||
result *= base; // 指数为奇数时累乘
|
result *= base; // 指数为奇数时累乘
|
||||||
}
|
}
|
||||||
base *= base; // 底数平方
|
base *= base; // 底数平方
|
||||||
exponent /= 2; // 指数折半
|
exponent /= 2; // 指数折半
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: IntFilter_16t
|
* 函数名称: IntFilter_16t
|
||||||
* 功能描述: 16位数据中值滤波函数
|
* 功能描述: 16位数据中值滤波函数
|
||||||
* 参 数: Data, 滤波数据
|
* 参 数: Data, 滤波数据
|
||||||
Cnt, 滤波数据长度
|
Cnt, 滤波数据长度
|
||||||
FilterCnt, 滤除的数据长度,必须为2的倍数
|
FilterCnt, 滤除的数据长度,必须为2的倍数
|
||||||
* 返 回 值: 滤波后的16位数据
|
* 返 回 值: 滤波后的16位数据
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int IntFilter_16t(int16_t *Data, uint8_t Cnt, uint8_t FilterCnt)
|
int IntFilter_16t(int16_t *Data, uint8_t Cnt, uint8_t FilterCnt)
|
||||||
{
|
{
|
||||||
@@ -245,12 +245,12 @@ int IntFilter_16t(int16_t *Data, uint8_t Cnt, uint8_t FilterCnt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: IntFilter_32t
|
* 函数名称: IntFilter_32t
|
||||||
* 功能描述: 32位数据中值滤波函数
|
* 功能描述: 32位数据中值滤波函数
|
||||||
* 参 数: Data, 滤波数据
|
* 参 数: Data, 滤波数据
|
||||||
Cnt, 滤波数据长度
|
Cnt, 滤波数据长度
|
||||||
FilterCnt, 滤除的数据长度,必须为2的倍数
|
FilterCnt, 滤除的数据长度,必须为2的倍数
|
||||||
* 返 回 值: 滤波后的32位数据
|
* 返 回 值: 滤波后的32位数据
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int IntFilter_32t(int32_t *Data, uint8_t Cnt, uint8_t FilterCnt)
|
int IntFilter_32t(int32_t *Data, uint8_t Cnt, uint8_t FilterCnt)
|
||||||
{
|
{
|
||||||
@@ -275,12 +275,12 @@ int IntFilter_32t(int32_t *Data, uint8_t Cnt, uint8_t FilterCnt)
|
|||||||
return (sum / (Cnt - FilterCnt));
|
return (sum / (Cnt - FilterCnt));
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: IntFilter_u32t
|
* 函数名称: IntFilter_u32t
|
||||||
* 功能描述: 32位无符号位数据中值滤波函数
|
* 功能描述: 32位无符号位数据中值滤波函数
|
||||||
* 参 数: Data, 滤波数据
|
* 参 数: Data, 滤波数据
|
||||||
Cnt, 滤波数据长度
|
Cnt, 滤波数据长度
|
||||||
FilterCnt, 滤除的数据长度,必须为2的倍数
|
FilterCnt, 滤除的数据长度,必须为2的倍数
|
||||||
* 返 回 值: 滤波后的32位数据
|
* 返 回 值: 滤波后的32位数据
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
uint32_t IntFilter_u32t(uint32_t *Data, uint8_t Cnt, uint8_t FilterCnt)
|
uint32_t IntFilter_u32t(uint32_t *Data, uint8_t Cnt, uint8_t FilterCnt)
|
||||||
{
|
{
|
||||||
@@ -305,12 +305,12 @@ uint32_t IntFilter_u32t(uint32_t *Data, uint8_t Cnt, uint8_t FilterCnt)
|
|||||||
return (sum / (Cnt - FilterCnt));
|
return (sum / (Cnt - FilterCnt));
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: IntFilter_Float
|
* 函数名称: IntFilter_Float
|
||||||
* 功能描述: 32位浮点数数据中值滤波函数
|
* 功能描述: 32位浮点数数据中值滤波函数
|
||||||
* 参 数: Data, 滤波数据
|
* 参 数: Data, 滤波数据
|
||||||
Cnt, 滤波数据长度
|
Cnt, 滤波数据长度
|
||||||
FilterCnt, 滤除的数据长度,必须为2的倍数
|
FilterCnt, 滤除的数据长度,必须为2的倍数
|
||||||
* 返 回 值: 滤波后的32位数据
|
* 返 回 值: 滤波后的32位数据
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
float IntFilter_Float(float *Data, uint8_t Cnt, uint8_t FilterCnt)
|
float IntFilter_Float(float *Data, uint8_t Cnt, uint8_t FilterCnt)
|
||||||
{
|
{
|
||||||
@@ -335,11 +335,11 @@ float IntFilter_Float(float *Data, uint8_t Cnt, uint8_t FilterCnt)
|
|||||||
return (sum / (Cnt - FilterCnt));
|
return (sum / (Cnt - FilterCnt));
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: AverageFilter_u32t
|
* 函数名称: AverageFilter_u32t
|
||||||
* 功能描述: 32位数据均值滤波函数,去除了最大值和最小值
|
* 功能描述: 32位数据均值滤波函数,去除了最大值和最小值
|
||||||
* 参 数: Data, 滤波数据
|
* 参 数: Data, 滤波数据
|
||||||
Cnt, 滤波数据长度
|
Cnt, 滤波数据长度
|
||||||
* 返 回 值: 滤波后的32位数据
|
* 返 回 值: 滤波后的32位数据
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
uint32_t AverageFilter_u32t(uint32_t *Data, uint8_t Cnt)
|
uint32_t AverageFilter_u32t(uint32_t *Data, uint8_t Cnt)
|
||||||
{
|
{
|
||||||
@@ -360,7 +360,7 @@ uint32_t AverageFilter_u32t(uint32_t *Data, uint8_t Cnt)
|
|||||||
return sum / 2;
|
return sum / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint8_t i = 0; i < Cnt; i++)//找出最大值
|
for (uint8_t i = 0; i < Cnt; i++)//找出最大值
|
||||||
{
|
{
|
||||||
if (Data[i] > max)
|
if (Data[i] > max)
|
||||||
{
|
{
|
||||||
@@ -368,7 +368,7 @@ uint32_t AverageFilter_u32t(uint32_t *Data, uint8_t Cnt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint8_t i = 0; i < Cnt; i++)//找出最小值
|
for (uint8_t i = 0; i < Cnt; i++)//找出最小值
|
||||||
{
|
{
|
||||||
if (Data[i] < min)
|
if (Data[i] < min)
|
||||||
{
|
{
|
||||||
@@ -376,7 +376,7 @@ uint32_t AverageFilter_u32t(uint32_t *Data, uint8_t Cnt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < Cnt; i++){//求和
|
for(int i = 0; i < Cnt; i++){//求和
|
||||||
sum += Data[i];
|
sum += Data[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -384,11 +384,11 @@ uint32_t AverageFilter_u32t(uint32_t *Data, uint8_t Cnt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: AverageFilter_32t
|
* 函数名称: AverageFilter_32t
|
||||||
* 功能描述: 32位数据均值滤波函数,去除了最大值和最小值
|
* 功能描述: 32位数据均值滤波函数,去除了最大值和最小值
|
||||||
* 参 数: Data, 滤波数据
|
* 参 数: Data, 滤波数据
|
||||||
Cnt, 滤波数据长度
|
Cnt, 滤波数据长度
|
||||||
* 返 回 值: 滤波后的32位数据
|
* 返 回 值: 滤波后的32位数据
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int AverageFilter_32t(int32_t *Data, uint8_t Cnt)
|
int AverageFilter_32t(int32_t *Data, uint8_t Cnt)
|
||||||
{
|
{
|
||||||
@@ -408,7 +408,7 @@ int AverageFilter_32t(int32_t *Data, uint8_t Cnt)
|
|||||||
return sum / 2;
|
return sum / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint8_t i = 0; i < Cnt; i++)//找出最大值
|
for (uint8_t i = 0; i < Cnt; i++)//找出最大值
|
||||||
{
|
{
|
||||||
if (Data[i] > max)
|
if (Data[i] > max)
|
||||||
{
|
{
|
||||||
@@ -416,7 +416,7 @@ int AverageFilter_32t(int32_t *Data, uint8_t Cnt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint8_t i = 0; i < Cnt; i++)//找出最小值
|
for (uint8_t i = 0; i < Cnt; i++)//找出最小值
|
||||||
{
|
{
|
||||||
if (Data[i] < min)
|
if (Data[i] < min)
|
||||||
{
|
{
|
||||||
@@ -424,24 +424,24 @@ int AverageFilter_32t(int32_t *Data, uint8_t Cnt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < Cnt; i++){//求和
|
for(int i = 0; i < Cnt; i++){//求和
|
||||||
sum += Data[i];
|
sum += Data[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
return (sum - max - min) / (Cnt - 2);
|
return (sum - max - min) / (Cnt - 2);
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: Fitting_Polynomial
|
* 函数名称: Fitting_Polynomial
|
||||||
* 功能描述: 根据数组AD[], Actual[]列出的一组数据,用最小二乘法求它的拟合曲线,默认3阶
|
* 功能描述: 根据数组AD[], Actual[]列出的一组数据,用最小二乘法求它的拟合曲线,默认3阶
|
||||||
近似解析表达式为y = a3*x^3 + a2*x^2 + a1*x + a0;
|
近似解析表达式为y = a3*x^3 + a2*x^2 + a1*x + a0;
|
||||||
* 参 数: AD, AD芯片采样值
|
* 参 数: AD, AD芯片采样值
|
||||||
Actual, 实际标校值
|
Actual, 实际标校值
|
||||||
Cnt, 拟合数据个数
|
Cnt, 拟合数据个数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void Fitting_Polynomial(double *AD, double *Actual, uint8_t Cnt)
|
void Fitting_Polynomial(double *AD, double *Actual, uint8_t Cnt)
|
||||||
{
|
{
|
||||||
static const uint8_t rank_ = 3;//拟合阶数3
|
static const uint8_t rank_ = 3;//拟合阶数3
|
||||||
double atemp[2 * (rank_ + 1)], b[rank_ + 1], a[rank_ + 1][rank_ + 1];
|
double atemp[2 * (rank_ + 1)], b[rank_ + 1], a[rank_ + 1][rank_ + 1];
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
|
|
||||||
@@ -460,22 +460,22 @@ void Fitting_Polynomial(double *AD, double *Actual, uint8_t Cnt)
|
|||||||
|
|
||||||
atemp[0] = Cnt;
|
atemp[0] = Cnt;
|
||||||
|
|
||||||
for(i = 0; i < rank_ + 1; i++){ //构建线性方程组系数矩阵,b[]不变
|
for(i = 0; i < rank_ + 1; i++){ //构建线性方程组系数矩阵,b[]不变
|
||||||
k = i;
|
k = i;
|
||||||
for(j = 0; j < rank_ + 1; j++) a[i][j] = atemp[k++];
|
for(j = 0; j < rank_ + 1; j++) a[i][j] = atemp[k++];
|
||||||
}
|
}
|
||||||
|
|
||||||
//以下为高斯列主元消去法解线性方程组
|
//以下为高斯列主元消去法解线性方程组
|
||||||
for(k = 0; k < rank_ + 1 - 1; k++){ //n - 1列
|
for(k = 0; k < rank_ + 1 - 1; k++){ //n - 1列
|
||||||
int column = k;
|
int column = k;
|
||||||
double mainelement = a[k][k];
|
double mainelement = a[k][k];
|
||||||
|
|
||||||
for(i = k; i < rank_ + 1; i++) //找主元素
|
for(i = k; i < rank_ + 1; i++) //找主元素
|
||||||
if(fabs(a[i][k]) > mainelement){
|
if(fabs(a[i][k]) > mainelement){
|
||||||
mainelement = fabs(a[i][k]);
|
mainelement = fabs(a[i][k]);
|
||||||
column = i;
|
column = i;
|
||||||
}
|
}
|
||||||
for(j = k; j < rank_ + 1; j++){ //交换两行
|
for(j = k; j < rank_ + 1; j++){ //交换两行
|
||||||
double atemp = a[k][j];
|
double atemp = a[k][j];
|
||||||
a[k][j] = a[column][j];
|
a[k][j] = a[column][j];
|
||||||
a[column][j] = atemp;
|
a[column][j] = atemp;
|
||||||
@@ -484,19 +484,19 @@ void Fitting_Polynomial(double *AD, double *Actual, uint8_t Cnt)
|
|||||||
b[k] = b[column];
|
b[k] = b[column];
|
||||||
b[column] = btemp;
|
b[column] = btemp;
|
||||||
|
|
||||||
for(i = k + 1; i < rank_ + 1; i++){ //消元过程
|
for(i = k + 1; i < rank_ + 1; i++){ //消元过程
|
||||||
double Mik = a[i][k] / a[k][k];
|
double Mik = a[i][k] / a[k][k];
|
||||||
for(j = k; j < rank_ + 1; j++) a[i][j] -= Mik * a[k][j];
|
for(j = k; j < rank_ + 1; j++) a[i][j] -= Mik * a[k][j];
|
||||||
b[i] -= Mik * b[k];
|
b[i] -= Mik * b[k];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
b[rank_ + 1 - 1] /= a[rank_ + 1 - 1][rank_ + 1 - 1]; //回代过程
|
b[rank_ + 1 - 1] /= a[rank_ + 1 - 1][rank_ + 1 - 1]; //回代过程
|
||||||
for(i = rank_ + 1 - 2; i >= 0; i--){
|
for(i = rank_ + 1 - 2; i >= 0; i--){
|
||||||
double sum = 0;
|
double sum = 0;
|
||||||
for(j = i + 1; j < rank_ + 1; j++) sum += a[i][j] * b[j];
|
for(j = i + 1; j < rank_ + 1; j++) sum += a[i][j] * b[j];
|
||||||
b[i] = (b[i] - sum) / a[i][i];
|
b[i] = (b[i] - sum) / a[i][i];
|
||||||
}//高斯列主元消去法结束
|
}//高斯列主元消去法结束
|
||||||
|
|
||||||
DBG_LOG("P(x) = %.16fx^3%+.16fx^2%+.16fx%+.16f\r\n", b[3], b[2], b[1], b[0]);
|
DBG_LOG("P(x) = %.16fx^3%+.16fx^2%+.16fx%+.16f\r\n", b[3], b[2], b[1], b[0]);
|
||||||
|
|
||||||
@@ -507,46 +507,46 @@ void Fitting_Polynomial(double *AD, double *Actual, uint8_t Cnt)
|
|||||||
|
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: get_K
|
* 函数名称: get_K
|
||||||
* 功能描述: 斜率计算
|
* 功能描述: 斜率计算
|
||||||
* 参 数: count,数据个数 数组行(列)的个数 数组的行列数目相等
|
* 参 数: count,数据个数 数组行(列)的个数 数组的行列数目相等
|
||||||
dataCol_X[count],数据的列数据
|
dataCol_X[count],数据的列数据
|
||||||
dataRow_Y[count],数据的行数据
|
dataRow_Y[count],数据的行数据
|
||||||
* 返 回 值: k 斜率
|
* 返 回 值: k 斜率
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
float get_K(uint8_t count , int32_t *dataCol_X, int32_t *dataRow_Y)
|
float get_K(uint8_t count , int32_t *dataCol_X, int32_t *dataRow_Y)
|
||||||
{
|
{
|
||||||
float k = 0;//斜率
|
float k = 0;//斜率
|
||||||
float aveCol_X = 0;//列的平均值x
|
float aveCol_X = 0;//列的平均值x
|
||||||
float aveRow_Y = 0;//行的平均值y
|
float aveRow_Y = 0;//行的平均值y
|
||||||
int32_t sum_XY = 0;//行列的总和xy
|
int32_t sum_XY = 0;//行列的总和xy
|
||||||
int32_t sumRow_Y = 0;//行的总和y
|
int32_t sumRow_Y = 0;//行的总和y
|
||||||
int32_t sumCol_X = 0;//列的总和x
|
int32_t sumCol_X = 0;//列的总和x
|
||||||
int32_t sumCol_X2 = 0;//列的总和x^2
|
int32_t sumCol_X2 = 0;//列的总和x^2
|
||||||
|
|
||||||
for(uint16_t i = 0 ; i < count ; i++)
|
for(uint16_t i = 0 ; i < count ; i++)
|
||||||
{
|
{
|
||||||
sumCol_X += dataCol_X[i];//求列x的总和
|
sumCol_X += dataCol_X[i];//求列x的总和
|
||||||
sumRow_Y += dataRow_Y[i];//求行y的总和
|
sumRow_Y += dataRow_Y[i];//求行y的总和
|
||||||
sumCol_X2 += dataCol_X[i] * dataCol_X[i];//求x^2的总和
|
sumCol_X2 += dataCol_X[i] * dataCol_X[i];//求x^2的总和
|
||||||
sum_XY += (dataCol_X[i] * dataRow_Y[i]);//求xy的总和
|
sum_XY += (dataCol_X[i] * dataRow_Y[i]);//求xy的总和
|
||||||
}
|
}
|
||||||
|
|
||||||
aveCol_X = 1.0 * sumCol_X / count;//求平均值
|
aveCol_X = 1.0 * sumCol_X / count;//求平均值
|
||||||
aveRow_Y = 1.0 * sumRow_Y / count;
|
aveRow_Y = 1.0 * sumRow_Y / count;
|
||||||
|
|
||||||
k = (sum_XY - aveCol_X * aveRow_Y * count) / //根据公式求斜率
|
k = (sum_XY - aveCol_X * aveRow_Y * count) / //根据公式求斜率
|
||||||
(sumCol_X2 - aveCol_X * aveCol_X * count);
|
(sumCol_X2 - aveCol_X * aveCol_X * count);
|
||||||
|
|
||||||
return k;
|
return k;
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: TrendAnalyse
|
* 函数名称: TrendAnalyse
|
||||||
* 功能描述: 判断数组中的值的总体趋势
|
* 功能描述: 判断数组中的值的总体趋势
|
||||||
* 参 数: Data,
|
* 参 数: Data,
|
||||||
Cnt,
|
Cnt,
|
||||||
VPT,
|
VPT,
|
||||||
* 返 回 值: true或false
|
* 返 回 值: true或false
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int8_t TrendAnalyse(int32_t *Data, uint8_t Cnt, int32_t VPT)
|
int8_t TrendAnalyse(int32_t *Data, uint8_t Cnt, int32_t VPT)
|
||||||
{
|
{
|
||||||
@@ -571,26 +571,26 @@ int8_t TrendAnalyse(int32_t *Data, uint8_t Cnt, int32_t VPT)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(zero > (Cnt-(Cnt / 5)))
|
if(zero > (Cnt-(Cnt / 5)))
|
||||||
Trend = 0;//振荡趋势
|
Trend = 0;//振荡趋势
|
||||||
else if(plus > (Cnt-(Cnt/ 5)))
|
else if(plus > (Cnt-(Cnt/ 5)))
|
||||||
Trend = 1;//上升趋势
|
Trend = 1;//上升趋势
|
||||||
else if(minus > (Cnt-(Cnt/ 5)))
|
else if(minus > (Cnt-(Cnt/ 5)))
|
||||||
Trend = -1;//下降趋势
|
Trend = -1;//下降趋势
|
||||||
|
|
||||||
return Trend;//总趋势
|
return Trend;//总趋势
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: Waveform_Up
|
* 函数名称: Waveform_Up
|
||||||
* 功能描述: 找出一段波形的波峰值
|
* 功能描述: 找出一段波形的波峰值
|
||||||
dCnt, 波形数据长度
|
dCnt, 波形数据长度
|
||||||
pCnt, 要查找波峰数
|
pCnt, 要查找波峰数
|
||||||
vlue, 返回的波峰值
|
vlue, 返回的波峰值
|
||||||
* 返 回 值: true或false
|
* 返 回 值: true或false
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void Waveform_Up(int32_t *Data, uint8_t dCnt, uint8_t pCnt, int32_t *vlue)
|
void Waveform_Up(int32_t *Data, uint8_t dCnt, uint8_t pCnt, int32_t *vlue)
|
||||||
{
|
{
|
||||||
uint8_t peak[pCnt];
|
uint8_t peak[pCnt];
|
||||||
for(uint8_t i = 0, j = 0; i < dCnt; i++)//找出峰值地址
|
for(uint8_t i = 0, j = 0; i < dCnt; i++)//找出峰值地址
|
||||||
{
|
{
|
||||||
if(Data[i] < Data[i + 1] && Data[i + 1] > Data[i + 2])
|
if(Data[i] < Data[i + 1] && Data[i + 1] > Data[i + 2])
|
||||||
{
|
{
|
||||||
@@ -605,17 +605,17 @@ void Waveform_Up(int32_t *Data, uint8_t dCnt, uint8_t pCnt, int32_t *vlue)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: Waveform_Down
|
* 函数名称: Waveform_Down
|
||||||
* 功能描述: 找出一段波形的波谷值
|
* 功能描述: 找出一段波形的波谷值
|
||||||
dCnt, 波形数据长度
|
dCnt, 波形数据长度
|
||||||
pCnt, 要查找波谷数
|
pCnt, 要查找波谷数
|
||||||
vlue, 返回的波谷值
|
vlue, 返回的波谷值
|
||||||
* 返 回 值: true或false
|
* 返 回 值: true或false
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void Waveform_Down(int32_t *Data, uint8_t dCnt, uint8_t pCnt, int32_t *vlue)
|
void Waveform_Down(int32_t *Data, uint8_t dCnt, uint8_t pCnt, int32_t *vlue)
|
||||||
{
|
{
|
||||||
uint8_t peak[pCnt];
|
uint8_t peak[pCnt];
|
||||||
for(uint8_t i = 0, j = 0; i < dCnt; i++)//找出峰值地址
|
for(uint8_t i = 0, j = 0; i < dCnt; i++)//找出峰值地址
|
||||||
{
|
{
|
||||||
if(Data[i] > Data[i + 1] && Data[i + 1] < Data[i + 2])
|
if(Data[i] > Data[i + 1] && Data[i + 1] < Data[i + 2])
|
||||||
{
|
{
|
||||||
@@ -630,12 +630,12 @@ void Waveform_Down(int32_t *Data, uint8_t dCnt, uint8_t pCnt, int32_t *vlue)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: count_most_greater
|
* 函数名称: count_most_greater
|
||||||
* 功能描述: 判断数组中的值是否大部分大于 target
|
* 功能描述: 判断数组中的值是否大部分大于 target
|
||||||
* 参 数: arr,
|
* 参 数: arr,
|
||||||
size,
|
size,
|
||||||
target,
|
target,
|
||||||
* 返 回 值: true或false
|
* 返 回 值: true或false
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
bool count_most_greater(int32_t *arr, uint8_t size, int32_t target)
|
bool count_most_greater(int32_t *arr, uint8_t size, int32_t target)
|
||||||
{
|
{
|
||||||
@@ -649,12 +649,12 @@ bool count_most_greater(int32_t *arr, uint8_t size, int32_t target)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: count_greater
|
* 函数名称: count_greater
|
||||||
* 功能描述: 判断数组中的值是否全部大于 target
|
* 功能描述: 判断数组中的值是否全部大于 target
|
||||||
* 参 数: arr,
|
* 参 数: arr,
|
||||||
size,
|
size,
|
||||||
target,
|
target,
|
||||||
* 返 回 值: true或false
|
* 返 回 值: true或false
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
bool count_greater(int32_t *arr, uint8_t size, int32_t target)
|
bool count_greater(int32_t *arr, uint8_t size, int32_t target)
|
||||||
{
|
{
|
||||||
@@ -665,12 +665,12 @@ bool count_greater(int32_t *arr, uint8_t size, int32_t target)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: count_smaller
|
* 函数名称: count_smaller
|
||||||
* 功能描述: 判断数组中的值是否全部小于 target
|
* 功能描述: 判断数组中的值是否全部小于 target
|
||||||
* 参 数: arr,
|
* 参 数: arr,
|
||||||
size,
|
size,
|
||||||
target,
|
target,
|
||||||
* 返 回 值: true或false
|
* 返 回 值: true或false
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
bool count_smaller(int32_t *arr, uint8_t size, int32_t target)
|
bool count_smaller(int32_t *arr, uint8_t size, int32_t target)
|
||||||
{
|
{
|
||||||
@@ -682,12 +682,12 @@ bool count_smaller(int32_t *arr, uint8_t size, int32_t target)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: CRC_Modbus
|
* 函数名称: CRC_Modbus
|
||||||
* 功能描述: CRC16计算函数
|
* 功能描述: CRC16计算函数
|
||||||
* 参 数: wBase, 多项式
|
* 参 数: wBase, 多项式
|
||||||
Para,校验数据入口
|
Para,校验数据入口
|
||||||
Data, 校验数据长度入口
|
Data, 校验数据长度入口
|
||||||
* 返 回 值: crc16校验值
|
* 返 回 值: crc16校验值
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
uint16_t CRC_Modbus(uint16_t wBase, uint8_t *para, uint16_t length)
|
uint16_t CRC_Modbus(uint16_t wBase, uint8_t *para, uint16_t length)
|
||||||
{
|
{
|
||||||
@@ -710,18 +710,18 @@ uint16_t CRC_Modbus(uint16_t wBase, uint8_t *para, uint16_t length)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: CRC_Sum
|
* 函数名称: CRC_Sum
|
||||||
* 功能描述: 从第二个字节开始,求和取反
|
* 功能描述: 从第二个字节开始,求和取反
|
||||||
* 参 数: _pbuff,校验数据入口
|
* 参 数: _pbuff,校验数据入口
|
||||||
_cmdLen,校验数据长度入口
|
_cmdLen,校验数据长度入口
|
||||||
* 返 回 值: cmd_sum,校验值(一个字节)
|
* 返 回 值: cmd_sum,校验值(一个字节)
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen)
|
uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen)
|
||||||
{
|
{
|
||||||
uint8_t cmd_sum=0;
|
uint8_t cmd_sum=0;
|
||||||
uint16_t i;
|
uint16_t i;
|
||||||
|
|
||||||
for(i=1;i<_cmdLen;i++)//从1开始,跳过第一个字节
|
for(i=1;i<_cmdLen;i++)//从1开始,跳过第一个字节
|
||||||
{
|
{
|
||||||
cmd_sum += _pbuff[i];
|
cmd_sum += _pbuff[i];
|
||||||
}
|
}
|
||||||
@@ -729,30 +729,30 @@ uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen)
|
|||||||
|
|
||||||
return cmd_sum;
|
return cmd_sum;
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/**
|
||||||
* 函数名称: isAllZero
|
* @brief 检查缓冲区是否全部等于指定字节值
|
||||||
* 功能描述: 判断一个数组的值是否全部为0
|
* @param data : 待检查的数据指针
|
||||||
* 参 数: arr,数组
|
* @param len : 数据长度(字节数)
|
||||||
size,长度
|
* @param val : 期望的字节值 (0x00 ~ 0xFF)
|
||||||
* 返 回 值: true或false
|
* @return true : 全部等于 val
|
||||||
*****************************************************************************************/
|
* false: 存在不等于 val 的字节
|
||||||
bool isAllZero(uint8_t *arr, int size)
|
*/
|
||||||
|
bool is_all_byte(const uint8_t *data, size_t len, uint8_t val)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < size; i++) {
|
for (size_t i = 0; i < len; i++) {
|
||||||
if (arr[i] != 0) {
|
if (data[i] != val) {
|
||||||
return false; // 如果数组中有一个元素不为0,则返回false
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true; // 遍历完数组后,若所有元素都为0,则返回true
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: HexToAscii
|
* 函数名称: HexToAscii
|
||||||
* 功能描述: 16进制转ASCII码
|
* 功能描述: 16进制转ASCII码
|
||||||
* 参 数: HexData,16进制数组
|
* 参 数: HexData,16进制数组
|
||||||
ASCData,ASCII码
|
ASCData,ASCII码
|
||||||
sLen,数据长度
|
sLen,数据长度
|
||||||
* 返 回 值: true或false
|
* 返 回 值: true或false
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void HexToAscii(uint8_t *HexData, char *ASCData, uint8_t sLen)
|
void HexToAscii(uint8_t *HexData, char *ASCData, uint8_t sLen)
|
||||||
{
|
{
|
||||||
|
|||||||
+286
-209
File diff suppressed because it is too large
Load Diff
+24
-24
@@ -1,48 +1,48 @@
|
|||||||
#include "Update.h"
|
#include "Update.h"
|
||||||
#include "UartDebug.h"
|
#include "UartDebug.h"
|
||||||
|
#include "main.h"
|
||||||
static BootPara_t BLPara;
|
#include "bsp.h"
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: Update
|
* 函数名称: Update
|
||||||
* 功能描述: 固件升级,此函数在解析到升级指令是调用
|
* 功能描述: 固件升级,此函数在解析到升级指令是调用
|
||||||
* 参 数: PayLoad 协议负载,需去除帧头等信息,只传负载数据
|
* 参 数: PayLoad 协议负载,需去除帧头等信息,只传负载数据
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void Update(uint8_t *PayLoad)
|
void Update(uint8_t *PayLoad)
|
||||||
{
|
{
|
||||||
UpDataRequset_t Req;
|
UpDataRequset_t Req;
|
||||||
|
|
||||||
memcpy(&Req, PayLoad, sizeof(UpDataRequset_t));
|
memcpy(&Req, PayLoad, sizeof(UpDataRequset_t));
|
||||||
BLPara.AppSize = Req.AppSize;
|
App.Para.BLPara.AppSize = Req.AppSize;
|
||||||
BLPara.Crc32Check = Req.AppCrc32;
|
App.Para.BLPara.Crc32Check = Req.AppCrc32;
|
||||||
BLPara.PackageCnt = Req.PackageNum;
|
App.Para.BLPara.PackageCnt = Req.PackageNum;
|
||||||
BLPara.AppFlag = 0;
|
App.Para.BLPara.AppFlag = 0;
|
||||||
BLPara.UpdateFlag = APP_UPDATE_FLAG;
|
App.Para.BLPara.UpdateFlag = APP_UPDATE_FLAG;
|
||||||
|
|
||||||
U_DBG_LOG("Receive upgrade command:\r\n");
|
U_DBG_LOG("Receive upgrade command:\r\n");
|
||||||
U_DBG_LOG("PackageNum: %d\r\n", BLPara.PackageCnt);
|
U_DBG_LOG("PackageNum: %d\r\n", App.Para.BLPara.PackageCnt);
|
||||||
U_DBG_LOG("AppSize: %d\r\n", BLPara.AppSize);
|
U_DBG_LOG("AppSize: %d\r\n", App.Para.BLPara.AppSize);
|
||||||
U_DBG_LOG("AppCrc32: 0x%08x\r\n", BLPara.Crc32Check);
|
U_DBG_LOG("AppCrc32: 0x%08x\r\n", App.Para.BLPara.Crc32Check);
|
||||||
U_DBG_LOG("System Reset!\r\n");
|
U_DBG_LOG("System Reset!\r\n");
|
||||||
|
|
||||||
SAVE_BOOT_PARA((uint32_t *)&BLPara);
|
SAVE_BOOT_PARA((uint32_t *)&App.Para);
|
||||||
U_DELAY_MS(200);
|
U_DELAY_MS(200);
|
||||||
U_SYSTEM_TESET();
|
U_SYSTEM_TESET();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: UpdateInit
|
* 函数名称: UpdateInit
|
||||||
* 功能描述: 升级参数初始化,需要在程序启动,外设初试完后调用
|
* 功能描述: 升级参数初始化,需要在程序启动,外设初试完后调用
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void UpdateInit(void)
|
void UpdateInit(void)
|
||||||
{
|
{
|
||||||
READ_BOOT_PARA((uint32_t *)&BLPara);
|
READ_BOOT_PARA((uint32_t *)&App.Para);
|
||||||
if(BLPara.AppFlag != APP_START_FLAG) {
|
if(App.Para.BLPara.AppFlag != APP_START_FLAG) {
|
||||||
BLPara.AppFlag = APP_START_FLAG;
|
App.Para.BLPara.AppFlag = APP_START_FLAG;
|
||||||
SAVE_BOOT_PARA((uint32_t *)&BLPara);
|
SAVE_BOOT_PARA((uint32_t *)&App.Para);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+231
-215
@@ -32,51 +32,51 @@ extern void LORA_RxCallBack(uint8_t *rBuff, uint8_t rlen);
|
|||||||
static __IO uint32_t SysTickCnt = 0;
|
static __IO uint32_t SysTickCnt = 0;
|
||||||
static volatile uint32_t u32AdcRestult;
|
static volatile uint32_t u32AdcRestult;
|
||||||
|
|
||||||
static void SystemClkDivInit(void)//系统时钟分频设置
|
static void SystemClkDivInit(void)//系统时钟分频设置
|
||||||
{
|
{
|
||||||
//时钟分频设置
|
//时钟分频设置
|
||||||
Sysctrl_SetHCLKDiv(SysctrlHclkDiv1);
|
Sysctrl_SetHCLKDiv(SysctrlHclkDiv1);
|
||||||
Sysctrl_SetPCLKDiv(SysctrlPclkDiv1);
|
Sysctrl_SetPCLKDiv(SysctrlPclkDiv1);
|
||||||
}
|
}
|
||||||
static void SystemClkInit(en_sysctrl_rch_freq_t enRchFreq)//时钟初始化
|
static void SystemClkInit(en_sysctrl_rch_freq_t enRchFreq)//时钟初始化
|
||||||
{
|
{
|
||||||
///< RCH时钟不同频率的切换,需要先将时钟切换到RCL
|
///< RCH时钟不同频率的切换,需要先将时钟切换到RCL
|
||||||
Sysctrl_SetRCLTrim(SysctrlRclFreq38400);
|
Sysctrl_SetRCLTrim(SysctrlRclFreq38400);
|
||||||
Sysctrl_SetRCLStableTime(SysctrlRclStableCycle64);
|
Sysctrl_SetRCLStableTime(SysctrlRclStableCycle64);
|
||||||
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
|
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
|
||||||
|
|
||||||
/*内部高速时钟初始化 24MHZ*/
|
/*内部高速时钟初始化 24MHZ*/
|
||||||
/*Sysctrl_SetRCHTrim(enRchFreq);
|
/*Sysctrl_SetRCHTrim(enRchFreq);
|
||||||
Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE);
|
Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE);
|
||||||
//< HCLK不超过24M:此处设置FLASH读等待周期为0 cycle
|
//< HCLK不超过24M:此处设置FLASH读等待周期为0 cycle
|
||||||
Flash_WaitCycle(FlashWaitCycle0);
|
Flash_WaitCycle(FlashWaitCycle0);
|
||||||
|
|
||||||
Sysctrl_SysClkSwitch(SysctrlClkRCH);//系统时钟源选择
|
Sysctrl_SysClkSwitch(SysctrlClkRCH);//系统时钟源选择
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*内部高速时钟初始化 48MHZ*/
|
/*内部高速时钟初始化 48MHZ*/
|
||||||
stc_sysctrl_pll_cfg_t stcPLLCfg;
|
stc_sysctrl_pll_cfg_t stcPLLCfg;
|
||||||
|
|
||||||
///< 加载目标频率的RCH的TRIM值
|
///< 加载目标频率的RCH的TRIM值
|
||||||
Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz);
|
Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz);
|
||||||
///< 使能RCH
|
///< 使能RCH
|
||||||
Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE);
|
Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE);
|
||||||
|
|
||||||
stcPLLCfg.enInFreq = SysctrlPllInFreq4_6MHz; //RCH 4MHz
|
stcPLLCfg.enInFreq = SysctrlPllInFreq4_6MHz; //RCH 4MHz
|
||||||
stcPLLCfg.enOutFreq = SysctrlPllOutFreq36_48MHz; //PLL 输出
|
stcPLLCfg.enOutFreq = SysctrlPllOutFreq36_48MHz; //PLL 输出
|
||||||
stcPLLCfg.enPllClkSrc = SysctrlPllRch; //输入时钟源选择RCH
|
stcPLLCfg.enPllClkSrc = SysctrlPllRch; //输入时钟源选择RCH
|
||||||
stcPLLCfg.enPllMul = SysctrlPllMul12; //4MHz x 12 = 48MHz
|
stcPLLCfg.enPllMul = SysctrlPllMul12; //4MHz x 12 = 48MHz
|
||||||
Sysctrl_SetPLLFreq(&stcPLLCfg);
|
Sysctrl_SetPLLFreq(&stcPLLCfg);
|
||||||
|
|
||||||
///< 当使用的时钟源HCLK大于24M:设置FLASH 读等待周期为1 cycle(默认值也为1 cycle)
|
///< 当使用的时钟源HCLK大于24M:设置FLASH 读等待周期为1 cycle(默认值也为1 cycle)
|
||||||
Flash_WaitCycle(FlashWaitCycle1);
|
Flash_WaitCycle(FlashWaitCycle1);
|
||||||
|
|
||||||
///< 使能PLL
|
///< 使能PLL
|
||||||
Sysctrl_ClkSourceEnable(SysctrlClkPLL, TRUE);
|
Sysctrl_ClkSourceEnable(SysctrlClkPLL, TRUE);
|
||||||
///< 时钟切换到PLL
|
///< 时钟切换到PLL
|
||||||
Sysctrl_SysClkSwitch(SysctrlClkPLL);
|
Sysctrl_SysClkSwitch(SysctrlClkPLL);
|
||||||
|
|
||||||
/*外部低速晶振初始化 32.768KHz*/
|
/*外部低速晶振初始化 32.768KHz*/
|
||||||
/* Sysctrl_XTLDriverCfg(SysctrlXtlAmp3, SysctrlXtalDriver3);
|
/* Sysctrl_XTLDriverCfg(SysctrlXtlAmp3, SysctrlXtalDriver3);
|
||||||
Sysctrl_SetXTLStableTime(SysctrlXtlStableCycle16384);
|
Sysctrl_SetXTLStableTime(SysctrlXtlStableCycle16384);
|
||||||
Sysctrl_ClkSourceEnable(SysctrlClkXTL, TRUE);
|
Sysctrl_ClkSourceEnable(SysctrlClkXTL, TRUE);
|
||||||
@@ -84,12 +84,12 @@ static void SystemClkInit(en_sysctrl_rch_freq_t enRchFreq)//ʱ
|
|||||||
}
|
}
|
||||||
static void SystemRCLInit(void)
|
static void SystemRCLInit(void)
|
||||||
{
|
{
|
||||||
Sysctrl_SetRCLTrim(SysctrlRclFreq38400); ///< 配置RCL时钟为38400kHz
|
Sysctrl_SetRCLTrim(SysctrlRclFreq38400); ///< 配置RCL时钟为38400kHz
|
||||||
Sysctrl_SetRCLStableTime(SysctrlRclStableCycle256);
|
Sysctrl_SetRCLStableTime(SysctrlRclStableCycle256);
|
||||||
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE); ///< 使能RCL时钟
|
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE); ///< 使能RCL时钟
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Uart0Init(void)
|
void Uart0Init(uint32_t Baud)
|
||||||
{
|
{
|
||||||
stc_gpio_cfg_t stcGpioCfg;
|
stc_gpio_cfg_t stcGpioCfg;
|
||||||
stc_uart_cfg_t stcCfg;
|
stc_uart_cfg_t stcCfg;
|
||||||
@@ -111,21 +111,21 @@ static void Uart0Init(void)
|
|||||||
DDL_ZERO_STRUCT(stcCfg);
|
DDL_ZERO_STRUCT(stcCfg);
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,TRUE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,TRUE);
|
||||||
|
|
||||||
///<UART 初始化
|
///<UART 初始化
|
||||||
stcCfg.enStopBit = UartMsk1bit; ///<1停止位
|
stcCfg.enStopBit = UartMsk1bit; ///<1停止位
|
||||||
stcCfg.enMmdorCk = UartMskEven; ///<偶校验
|
// stcCfg.enMmdorCk = UartMskEven; ///<偶校验
|
||||||
stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); ///<PCLK获取
|
stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); ///<PCLK获取
|
||||||
stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div; ///<采样分频
|
stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div; ///<采样分频
|
||||||
stcCfg.stcBaud.u32Baud = 500000; ///<波特率
|
stcCfg.stcBaud.u32Baud = Baud; ///<波特率
|
||||||
stcCfg.enRunMode = UartMskMode1; ///<工作模式
|
stcCfg.enRunMode = UartMskMode1; ///<工作模式
|
||||||
Uart_Init(M0P_UART0, &stcCfg);
|
Uart_Init(M0P_UART0, &stcCfg);
|
||||||
|
|
||||||
///<UART 中断使能
|
///<UART 中断使能
|
||||||
Uart_ClrStatus(M0P_UART0, UartRC); ///<清接收中断请求
|
Uart_ClrStatus(M0P_UART0, UartRC); ///<清接收中断请求
|
||||||
Uart_ClrStatus(M0P_UART0, UartTC); ///<清发送中断请求
|
Uart_ClrStatus(M0P_UART0, UartTC); ///<清发送中断请求
|
||||||
//Uart_EnableIrq(M0P_UART1,UartTxIrq); ///<使能发送中断
|
//Uart_EnableIrq(M0P_UART1,UartTxIrq); ///<使能发送中断
|
||||||
Uart_EnableIrq(M0P_UART0, UartRxIrq); ///<使能接收中断
|
Uart_EnableIrq(M0P_UART0, UartRxIrq); ///<使能接收中断
|
||||||
EnableNvic(UART0_2_IRQn, IrqLevel3, TRUE); ///<系统中断使能
|
EnableNvic(UART0_2_IRQn, IrqLevel3, TRUE); ///<系统中断使能
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Uart1Init(void)
|
static void Uart1Init(void)
|
||||||
@@ -150,23 +150,23 @@ static void Uart1Init(void)
|
|||||||
DDL_ZERO_STRUCT(stcCfg);
|
DDL_ZERO_STRUCT(stcCfg);
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE);
|
||||||
|
|
||||||
///<UART 初始化
|
///<UART 初始化
|
||||||
stcCfg.enStopBit = UartMsk1bit; ///<1停止位
|
stcCfg.enStopBit = UartMsk1bit; ///<1停止位
|
||||||
//stcCfg.enMmdorCk = UartMskEven; ///<偶校验
|
//stcCfg.enMmdorCk = UartMskEven; ///<偶校验
|
||||||
stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); ///<PCLK获取
|
stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); ///<PCLK获取
|
||||||
stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div; ///<采样分频
|
stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div; ///<采样分频
|
||||||
stcCfg.stcBaud.u32Baud = 115200; ///<波特率
|
stcCfg.stcBaud.u32Baud = 115200; ///<波特率
|
||||||
stcCfg.enRunMode = UartMskMode1; ///<工作模式
|
stcCfg.enRunMode = UartMskMode1; ///<工作模式
|
||||||
Uart_Init(M0P_UART1, &stcCfg);
|
Uart_Init(M0P_UART1, &stcCfg);
|
||||||
|
|
||||||
///<UART 中断使能
|
///<UART 中断使能
|
||||||
Uart_ClrStatus(M0P_UART1, UartRC); ///<清接收中断请求
|
Uart_ClrStatus(M0P_UART1, UartRC); ///<清接收中断请求
|
||||||
Uart_ClrStatus(M0P_UART1, UartTC); ///<清发送中断请求
|
Uart_ClrStatus(M0P_UART1, UartTC); ///<清发送中断请求
|
||||||
//Uart_EnableIrq(M0P_UART1,UartTxIrq); ///<使能发送中断
|
//Uart_EnableIrq(M0P_UART1,UartTxIrq); ///<使能发送中断
|
||||||
Uart_EnableIrq(M0P_UART1, UartRxIrq); ///<使能接收中断
|
Uart_EnableIrq(M0P_UART1, UartRxIrq); ///<使能接收中断
|
||||||
EnableNvic(UART1_3_IRQn, IrqLevel3, TRUE); ///<系统中断使能
|
EnableNvic(UART1_3_IRQn, IrqLevel3, TRUE); ///<系统中断使能
|
||||||
}
|
}
|
||||||
static void LpUart0Init(void)
|
void LpUart0Init(uint32_t Baud)
|
||||||
{
|
{
|
||||||
stc_gpio_cfg_t stcGpioCfg;
|
stc_gpio_cfg_t stcGpioCfg;
|
||||||
stc_lpuart_cfg_t stcCfg;
|
stc_lpuart_cfg_t stcCfg;
|
||||||
@@ -177,42 +177,42 @@ static void LpUart0Init(void)
|
|||||||
///<TX
|
///<TX
|
||||||
stcGpioCfg.enDir = GpioDirOut;
|
stcGpioCfg.enDir = GpioDirOut;
|
||||||
Gpio_Init(LPUart0_TxPortx,LPUART0_TxPinx,&stcGpioCfg);
|
Gpio_Init(LPUart0_TxPortx,LPUART0_TxPinx,&stcGpioCfg);
|
||||||
Gpio_SetAfMode(LPUart0_TxPortx,LPUART0_TxPinx,GpioAf4); //配置PB10为LPUART0_TX
|
Gpio_SetAfMode(LPUart0_TxPortx,LPUART0_TxPinx,GpioAf4); //配置PB10为LPUART0_TX
|
||||||
|
|
||||||
//<RX
|
//<RX
|
||||||
stcGpioCfg.enDir = GpioDirIn;
|
stcGpioCfg.enDir = GpioDirIn;
|
||||||
Gpio_Init(LPUart0_RxPortx,LPUART0_RxPinx,&stcGpioCfg);
|
Gpio_Init(LPUart0_RxPortx,LPUART0_RxPinx,&stcGpioCfg);
|
||||||
Gpio_SetAfMode(LPUart0_RxPortx,LPUART0_RxPinx,GpioAf3); //配置PB11为LPUART0_RX
|
Gpio_SetAfMode(LPUart0_RxPortx,LPUART0_RxPinx,GpioAf3); //配置PB11为LPUART0_RX
|
||||||
|
|
||||||
DDL_ZERO_STRUCT(stcCfg);
|
DDL_ZERO_STRUCT(stcCfg);
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpUart0,TRUE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpUart0,TRUE);
|
||||||
|
|
||||||
///<LPUART 初始化
|
///<LPUART 初始化
|
||||||
stcCfg.enStopBit = LPUart1bit; ///<1停止位
|
stcCfg.enStopBit = LPUart1bit; ///<1停止位
|
||||||
//stcCfg.enMmdorCk = LPUartEven; ///<偶校验
|
//stcCfg.enMmdorCk = LPUartEven; ///<偶校验
|
||||||
stcCfg.stcBaud.enSclkSel = LPUartMskRcl; ///<传输时钟源
|
stcCfg.stcBaud.enSclkSel = LPUartMskRcl; ///<传输时钟源
|
||||||
stcCfg.stcBaud.u32Sclk = 38400; ///<PCLK获取
|
stcCfg.stcBaud.u32Sclk = 38400; ///<PCLK获取
|
||||||
stcCfg.stcBaud.enSclkDiv = LPUartMsk4Or8Div; ///<采样分频
|
stcCfg.stcBaud.enSclkDiv = LPUartMsk4Or8Div; ///<采样分频
|
||||||
stcCfg.stcBaud.u32Baud = 9600; ///<波特率
|
stcCfg.stcBaud.u32Baud = Baud; ///<波特率
|
||||||
stcCfg.enRunMode = LPUartMskMode1; ///<工作模式
|
stcCfg.enRunMode = LPUartMskMode1; ///<工作模式
|
||||||
LPUart_Init(M0P_LPUART0, &stcCfg);
|
LPUart_Init(M0P_LPUART0, &stcCfg);
|
||||||
|
|
||||||
///<LPUART 中断使能
|
///<LPUART 中断使能
|
||||||
LPUart_ClrStatus(M0P_LPUART0,LPUartRC); ///<清接收中断请求
|
LPUart_ClrStatus(M0P_LPUART0,LPUartRC); ///<清接收中断请求
|
||||||
LPUart_ClrStatus(M0P_LPUART0,LPUartTC); ///<清发送中断请求
|
LPUart_ClrStatus(M0P_LPUART0,LPUartTC); ///<清发送中断请求
|
||||||
//LPUart_EnableIrq(M0P_LPUART0,LPUartTxIrq); ///<使能发送中断
|
//LPUart_EnableIrq(M0P_LPUART0,LPUartTxIrq); ///<使能发送中断
|
||||||
LPUart_EnableIrq(M0P_LPUART0,LPUartRxIrq); ///<使能接收中断
|
LPUart_EnableIrq(M0P_LPUART0,LPUartRxIrq); ///<使能接收中断
|
||||||
EnableNvic(LPUART0_IRQn,IrqLevel3,TRUE); ///<系统中断使能
|
EnableNvic(LPUART0_IRQn,IrqLevel3,TRUE); ///<系统中断使能
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: AdcInit
|
* 函数名称: AdcInit
|
||||||
* 功能描述: ADC初始化
|
* 功能描述: ADC初始化
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void AdcInit(void)
|
static void AdcInit(void)
|
||||||
{
|
{
|
||||||
///< 开启ADC/BGR GPIO外设时钟
|
///< 开启ADC/BGR GPIO外设时钟
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
|
||||||
Gpio_SetAnalogMode(VBAT_PORTx, VBAT_PINx); //PA04 (AIN4)
|
Gpio_SetAnalogMode(VBAT_PORTx, VBAT_PINx); //PA04 (AIN4)
|
||||||
|
|
||||||
@@ -220,29 +220,29 @@ static void AdcInit(void)
|
|||||||
|
|
||||||
DDL_ZERO_STRUCT(stcAdcCfg);
|
DDL_ZERO_STRUCT(stcAdcCfg);
|
||||||
|
|
||||||
///< 开启ADC/BGR外设时钟
|
///< 开启ADC/BGR外设时钟
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE);
|
||||||
|
|
||||||
Bgr_BgrEnable(); ///< 开启BGR
|
Bgr_BgrEnable(); ///< 开启BGR
|
||||||
|
|
||||||
///< ADC 初始化配置
|
///< ADC 初始化配置
|
||||||
stcAdcCfg.enAdcMode = AdcSglMode; ///<采样模式-单次
|
stcAdcCfg.enAdcMode = AdcSglMode; ///<采样模式-单次
|
||||||
stcAdcCfg.enAdcClkDiv = AdcMskClkDiv8; ///<采样分频-1
|
stcAdcCfg.enAdcClkDiv = AdcMskClkDiv8; ///<采样分频-1
|
||||||
stcAdcCfg.enAdcSampCycleSel = AdcMskSampCycle12Clk; ///<采样周期数-12
|
stcAdcCfg.enAdcSampCycleSel = AdcMskSampCycle12Clk; ///<采样周期数-12
|
||||||
stcAdcCfg.enAdcRefVolSel = AdcMskRefVolSelAVDD; ///<参考电压选择-AVDD
|
stcAdcCfg.enAdcRefVolSel = AdcMskRefVolSelAVDD; ///<参考电压选择-AVDD
|
||||||
stcAdcCfg.enAdcOpBuf = AdcMskBufEnable; ///<OP BUF配置-关
|
stcAdcCfg.enAdcOpBuf = AdcMskBufEnable; ///<OP BUF配置-关
|
||||||
stcAdcCfg.enInRef = AdcMskInRefDisable; ///<内部参考电压使能-关
|
stcAdcCfg.enInRef = AdcMskInRefDisable; ///<内部参考电压使能-关
|
||||||
stcAdcCfg.enAdcAlign = AdcAlignRight; ///<转换结果对齐方式-右
|
stcAdcCfg.enAdcAlign = AdcAlignRight; ///<转换结果对齐方式-右
|
||||||
Adc_Init(&stcAdcCfg);
|
Adc_Init(&stcAdcCfg);
|
||||||
|
|
||||||
Adc_CfgSglChannel(VBAT_ADC_PORTx); // 配置单次采样通道
|
Adc_CfgSglChannel(VBAT_ADC_PORTx); // 配置单次采样通道
|
||||||
Adc_SGL_Always_Start(); // 启动单次一直采样
|
Adc_SGL_Always_Start(); // 启动单次一直采样
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: Battery_Level_Percent_Table
|
* 函数名称: Battery_Level_Percent_Table
|
||||||
* 功能描述: 电池电量百分比转换
|
* 功能描述: 电池电量百分比转换
|
||||||
* 参 数: voltage,采集到的电压
|
* 参 数: voltage,采集到的电压
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static float Battery_Level_Percent_Table[37] = {9000, 9100, 9200, 9300, 9400, 9500, 9600, 9700, 9800, 9900,
|
static float Battery_Level_Percent_Table[37] = {9000, 9100, 9200, 9300, 9400, 9500, 9600, 9700, 9800, 9900,
|
||||||
10000, 10100, 10200, 10300, 10400, 10500, 10600, 10700, 10800, 10900,
|
10000, 10100, 10200, 10300, 10400, 10500, 10600, 10700, 10800, 10900,
|
||||||
@@ -263,32 +263,32 @@ static int Percentage(float voltage)
|
|||||||
return 100;
|
return 100;
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: ADC_IRQHandler
|
* 函数名称: ADC_IRQHandler
|
||||||
* 功能描述: ADC采集中断,放在主循环内一直循环采集
|
* 功能描述: ADC采集中断,放在主循环内一直循环采集
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
float VBAT_12V;//< ADC采集到的电压
|
float VBAT_12V;//< ADC采集到的电压
|
||||||
uint8_t VBAT_Percentage;//电池电压百分比
|
uint8_t VBAT_Percentage;//电池电压百分比
|
||||||
void ADCLoopHandler(void)
|
void ADCLoopHandler(void)
|
||||||
{
|
{
|
||||||
if(Adc_GetIrqStatus(AdcMskIrqSgl))//ADC中断状态获取
|
if(Adc_GetIrqStatus(AdcMskIrqSgl))//ADC中断状态获取
|
||||||
{
|
{
|
||||||
VBAT_12V = (Adc_GetSglResult() * VBAT_CAL);//< 获取实际电压
|
VBAT_12V = (Adc_GetSglResult() * VBAT_CAL);//< 获取实际电压
|
||||||
VBAT_Percentage = Percentage(VBAT_12V);//获取百分比
|
VBAT_Percentage = Percentage(VBAT_12V);//获取百分比
|
||||||
//DBG_LOG("VBAT_Percentage:%d\n",VBAT_Percentage);
|
//DBG_LOG("VBAT_Percentage:%d\n",VBAT_Percentage);
|
||||||
Adc_ClrIrqStatus(AdcMskIrqSgl);//清除ADC中断状态
|
Adc_ClrIrqStatus(AdcMskIrqSgl);//清除ADC中断状态
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void RTCInit(uint8_t sec)
|
void RTCInit(uint8_t sec)
|
||||||
{
|
{
|
||||||
stc_rtc_initstruct_t RtcInitStruct;
|
stc_rtc_initstruct_t RtcInitStruct;
|
||||||
|
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralRtc,TRUE); //RTC模块时钟打开
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralRtc,TRUE); //RTC模块时钟打开
|
||||||
RtcInitStruct.rtcAmpm = RtcPm; //24小时制
|
RtcInitStruct.rtcAmpm = RtcPm; //24小时制
|
||||||
RtcInitStruct.rtcClksrc = RtcClkRcl; //外部低速时钟
|
RtcInitStruct.rtcClksrc = RtcClkRcl; //外部低速时钟
|
||||||
RtcInitStruct.rtcPrdsel.rtcPrdsel = RtcPrdx; //周期中断类型PRDX
|
RtcInitStruct.rtcPrdsel.rtcPrdsel = RtcPrdx; //周期中断类型PRDX
|
||||||
RtcInitStruct.rtcPrdsel.rtcPrdx = sec * 2 - 1; //周期中断时间间隔 30秒
|
RtcInitStruct.rtcPrdsel.rtcPrdx = sec * 2 - 1; //周期中断时间间隔 30秒
|
||||||
|
|
||||||
Rtc_ReadDateTime(&RtcInitStruct.rtcTime);
|
Rtc_ReadDateTime(&RtcInitStruct.rtcTime);
|
||||||
if(RtcInitStruct.rtcTime.u8Year < 0x23 || RtcInitStruct.rtcTime.u8Year > 0x99 || RtcInitStruct.rtcTime.u8Month > 0x12) {
|
if(RtcInitStruct.rtcTime.u8Year < 0x23 || RtcInitStruct.rtcTime.u8Year > 0x99 || RtcInitStruct.rtcTime.u8Month > 0x12) {
|
||||||
@@ -301,18 +301,18 @@ void RTCInit(uint8_t sec)
|
|||||||
RtcInitStruct.rtcTime.u8Year = 0x23;
|
RtcInitStruct.rtcTime.u8Year = 0x23;
|
||||||
}
|
}
|
||||||
RtcInitStruct.rtcCompen = RtcCompenEnable;
|
RtcInitStruct.rtcCompen = RtcCompenEnable;
|
||||||
RtcInitStruct.rtcCompValue = 0; //补偿值 根据实际情况进行补偿
|
RtcInitStruct.rtcCompValue = 0; //补偿值 根据实际情况进行补偿
|
||||||
Rtc_Init(&RtcInitStruct);
|
Rtc_Init(&RtcInitStruct);
|
||||||
Rtc_AlmIeCmd(TRUE); //使能闹钟中断
|
Rtc_AlmIeCmd(TRUE); //使能闹钟中断
|
||||||
EnableNvic(RTC_IRQn, IrqLevel3, TRUE); //使能RTC中断向量
|
EnableNvic(RTC_IRQn, IrqLevel3, TRUE); //使能RTC中断向量
|
||||||
Rtc_Cmd(TRUE); //使能RTC开始计数
|
Rtc_Cmd(TRUE); //使能RTC开始计数
|
||||||
Rtc_StartWait(); //启动RTC计数,如果要立即切换到低功耗,需要执行此函数
|
Rtc_StartWait(); //启动RTC计数,如果要立即切换到低功耗,需要执行此函数
|
||||||
}
|
}
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* 函数名称: LPTimer0Init
|
* 函数名称: LPTimer0Init
|
||||||
* 功能描述: 低功耗定时器0初始化
|
* 功能描述: 低功耗定时器0初始化
|
||||||
* 参 数: sTime 定时中断秒时间
|
* 参 数: sTime 定时中断秒时间
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void LPTimer0Init(uint16_t _100ms)
|
void LPTimer0Init(uint16_t _100ms)
|
||||||
{
|
{
|
||||||
@@ -321,7 +321,7 @@ void LPTimer0Init(uint16_t _100ms)
|
|||||||
stc_lptim_cfg_t stcLptCfg;
|
stc_lptim_cfg_t stcLptCfg;
|
||||||
DDL_ZERO_STRUCT(stcLptCfg);
|
DDL_ZERO_STRUCT(stcLptCfg);
|
||||||
|
|
||||||
///< 使能LPTIM0 外设时钟
|
///< 使能LPTIM0 外设时钟
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpTim0, TRUE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpTim0, TRUE);
|
||||||
|
|
||||||
stcLptCfg.enPrs = LptimPrsDiv256;
|
stcLptCfg.enPrs = LptimPrsDiv256;
|
||||||
@@ -329,13 +329,13 @@ void LPTimer0Init(uint16_t _100ms)
|
|||||||
stcLptCfg.enGatep = LptimGatePLow;
|
stcLptCfg.enGatep = LptimGatePLow;
|
||||||
stcLptCfg.enTcksel = LptimRcl;
|
stcLptCfg.enTcksel = LptimRcl;
|
||||||
stcLptCfg.enTogen = LptimTogEnLow;
|
stcLptCfg.enTogen = LptimTogEnLow;
|
||||||
stcLptCfg.enCt = LptimTimerFun; //警示器功能
|
stcLptCfg.enCt = LptimTimerFun; //警示器功能
|
||||||
stcLptCfg.enMd = LptimMode1; //工作模式为模式1:无自动重装载16位计数器/定时器
|
stcLptCfg.enMd = LptimMode1; //工作模式为模式1:无自动重装载16位计数器/定时器
|
||||||
stcLptCfg.u16Arr = 0x10000 - (_100ms * 13); //预装载寄存器值
|
stcLptCfg.u16Arr = 0x10000 - (_100ms * 13); //预装载寄存器值
|
||||||
Lptim_Init(M0P_LPTIMER0, &stcLptCfg);
|
Lptim_Init(M0P_LPTIMER0, &stcLptCfg);
|
||||||
|
|
||||||
Lptim_ClrItStatus(M0P_LPTIMER0); //清除中断标志位
|
Lptim_ClrItStatus(M0P_LPTIMER0); //清除中断标志位
|
||||||
Lptim_ConfIt(M0P_LPTIMER0, TRUE); //允许LPTIMER中断
|
Lptim_ConfIt(M0P_LPTIMER0, TRUE); //允许LPTIMER中断
|
||||||
EnableNvic(LPTIM_0_1_IRQn, IrqLevel3, TRUE);
|
EnableNvic(LPTIM_0_1_IRQn, IrqLevel3, TRUE);
|
||||||
|
|
||||||
Lptim_Cmd(M0P_LPTIMER0, TRUE);
|
Lptim_Cmd(M0P_LPTIMER0, TRUE);
|
||||||
@@ -356,7 +356,7 @@ static void GPIOInit(void)
|
|||||||
DDL_ZERO_STRUCT(GpioInitStruct);
|
DDL_ZERO_STRUCT(GpioInitStruct);
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
|
||||||
|
|
||||||
//未使用或引出的脚设为输入上拉
|
//未使用或引出的脚设为输入上拉
|
||||||
GpioInitStruct.enDir = GpioDirIn;
|
GpioInitStruct.enDir = GpioDirIn;
|
||||||
GpioInitStruct.enPu = GpioPuEnable;
|
GpioInitStruct.enPu = GpioPuEnable;
|
||||||
|
|
||||||
@@ -376,30 +376,32 @@ static void GPIOInit(void)
|
|||||||
Gpio_Init(GpioPortF, GpioPin6, &GpioInitStruct);
|
Gpio_Init(GpioPortF, GpioPin6, &GpioInitStruct);
|
||||||
//end
|
//end
|
||||||
|
|
||||||
/********************************** GPIO输出 ****************************************/
|
/********************************** GPIO输出 ****************************************/
|
||||||
GpioInitStruct.enDir = GpioDirOut; ///< 端口方向配置->输出
|
GpioInitStruct.enDir = GpioDirOut; ///< 端口方向配置->输出
|
||||||
GpioInitStruct.enDrv = GpioDrvH; ///< 端口驱动能力配置->高驱动能力
|
GpioInitStruct.enDrv = GpioDrvH; ///< 端口驱动能力配置->高驱动能力
|
||||||
GpioInitStruct.enPu = GpioPuDisable; ///< 端口上下拉配置->无
|
GpioInitStruct.enPu = GpioPuDisable; ///< 端口上下拉配置->无
|
||||||
GpioInitStruct.enPd = GpioPdDisable;
|
GpioInitStruct.enPd = GpioPdDisable;
|
||||||
GpioInitStruct.enOD = GpioOdDisable; ///< 端口开漏输出配置->开漏输出关闭
|
GpioInitStruct.enOD = GpioOdDisable; ///< 端口开漏输出配置->开漏输出关闭
|
||||||
GpioInitStruct.enCtrlMode = GpioAHB; ///< 端口输入/输出值寄存器总线控制模式配置->AHB
|
GpioInitStruct.enCtrlMode = GpioAHB; ///< 端口输入/输出值寄存器总线控制模式配置->AHB
|
||||||
GpioInitStruct.bOutputVal = false; ///< 端口默认输出配置->低电平
|
GpioInitStruct.bOutputVal = false; ///< 端口默认输出配置->低电平
|
||||||
//< RS485控制引脚
|
//< RS485控制引脚
|
||||||
Gpio_Init(RS485_CTRL_PORTx,RS485_CTRL_PINx,&GpioInitStruct);
|
Gpio_Init(RS485_CTRL_PORTx,RS485_CTRL_PINx,&GpioInitStruct);
|
||||||
//< 激光控制引脚
|
//< 激光控制引脚
|
||||||
Gpio_Init(LASER1_ON_OFF_PORTx,LASER1_ON_OFF_PINx,&GpioInitStruct);
|
Gpio_Init(LASER1_ON_OFF_PORTx,LASER1_ON_OFF_PINx,&GpioInitStruct);
|
||||||
Gpio_Init(LASER2_ON_OFF_PORTx,LASER2_ON_OFF_PINx,&GpioInitStruct);
|
Gpio_Init(LASER2_ON_OFF_PORTx,LASER2_ON_OFF_PINx,&GpioInitStruct);
|
||||||
Gpio_Init(LASER3_ON_OFF_PORTx,LASER3_ON_OFF_PINx,&GpioInitStruct);
|
Gpio_Init(LASER3_ON_OFF_PORTx,LASER3_ON_OFF_PINx,&GpioInitStruct);
|
||||||
|
//< ADC???????
|
||||||
|
Gpio_Init(AD_ON_OFF_PORTx,AD_ON_OFF_PINx,&GpioInitStruct);
|
||||||
|
|
||||||
GpioInitStruct.bOutputVal = true; ///< 端口默认输出配置->高电平
|
GpioInitStruct.bOutputVal = true; ///< 端口默认输出配置->高电平
|
||||||
//< LORA --> RST
|
//< LORA --> RST
|
||||||
Gpio_Init(LORA_RST_PORTx,LORA_RST_PINx,&GpioInitStruct);
|
Gpio_Init(LORA_RST_PORTx,LORA_RST_PINx,&GpioInitStruct);
|
||||||
//< LED_State
|
//< LED_State
|
||||||
Gpio_Init(LED_STATE_PORTx,LED_STATE_PINx,&GpioInitStruct);
|
Gpio_Init(LED_STATE_PORTx,LED_STATE_PINx,&GpioInitStruct);
|
||||||
|
|
||||||
/********************************** GPIO输入 ****************************************/
|
/********************************** GPIO输入 ****************************************/
|
||||||
GpioInitStruct.enDir = GpioDirIn; ///< 端口方向配置->输入
|
GpioInitStruct.enDir = GpioDirIn; ///< 端口方向配置->输入
|
||||||
GpioInitStruct.enPu = GpioPuDisable; ///< 端口上下拉配置->无
|
GpioInitStruct.enPu = GpioPuDisable; ///< 端口上下拉配置->无
|
||||||
GpioInitStruct.enPd = GpioPdDisable;
|
GpioInitStruct.enPd = GpioPdDisable;
|
||||||
GpioInitStruct.enOD = GpioOdDisable;
|
GpioInitStruct.enOD = GpioOdDisable;
|
||||||
|
|
||||||
@@ -415,33 +417,33 @@ static void GPIOInit(void)
|
|||||||
Gpio_Init(MMC5983MA_INT_PORTx,MMC5983MA_INT_PINx,&GpioInitStruct);
|
Gpio_Init(MMC5983MA_INT_PORTx,MMC5983MA_INT_PINx,&GpioInitStruct);
|
||||||
GlobalIntEnable();
|
GlobalIntEnable();
|
||||||
}
|
}
|
||||||
void GlobalIntEnable(void)//全局中断使能
|
void GlobalIntEnable(void)//全局中断使能
|
||||||
{
|
{
|
||||||
EnableNvic(PORTB_IRQn, IrqLevel3, TRUE);
|
EnableNvic(PORTB_IRQn, IrqLevel3, TRUE);
|
||||||
EnableNvic(PORTC_E_IRQn, IrqLevel3, TRUE);
|
EnableNvic(PORTC_E_IRQn, IrqLevel3, TRUE);
|
||||||
}
|
}
|
||||||
void GlobalIntDisable(void)//全局中断失能
|
void GlobalIntDisable(void)//全局中断失能
|
||||||
{
|
{
|
||||||
EnableNvic(PORTB_IRQn, IrqLevel3, FALSE);
|
EnableNvic(PORTB_IRQn, IrqLevel3, FALSE);
|
||||||
EnableNvic(PORTC_E_IRQn, IrqLevel3, FALSE);
|
EnableNvic(PORTC_E_IRQn, IrqLevel3, FALSE);
|
||||||
}
|
}
|
||||||
void LORAIntEnable(void)//LORA中断使能
|
void LORAIntEnable(void)//LORA中断使能
|
||||||
{
|
{
|
||||||
Gpio_EnableIrq(LORA_DIO0_PORTx, LORA_DIO0_PINx, GpioIrqRising);//LORA_DIO0
|
Gpio_EnableIrq(LORA_DIO0_PORTx, LORA_DIO0_PINx, GpioIrqRising);//LORA_DIO0
|
||||||
Gpio_EnableIrq(LORA_DIO1_PORTx, LORA_DIO1_PINx, GpioIrqRising);//LORA_DIO1
|
Gpio_EnableIrq(LORA_DIO1_PORTx, LORA_DIO1_PINx, GpioIrqRising);//LORA_DIO1
|
||||||
}
|
}
|
||||||
void LORAIntDisable(void)//LORA中断失能
|
void LORAIntDisable(void)//LORA中断失能
|
||||||
{
|
{
|
||||||
Gpio_DisableIrq(LORA_DIO0_PORTx, LORA_DIO0_PINx, GpioIrqRising);
|
Gpio_DisableIrq(LORA_DIO0_PORTx, LORA_DIO0_PINx, GpioIrqRising);
|
||||||
Gpio_DisableIrq(LORA_DIO1_PORTx, LORA_DIO1_PINx, GpioIrqRising);
|
Gpio_DisableIrq(LORA_DIO1_PORTx, LORA_DIO1_PINx, GpioIrqRising);
|
||||||
}
|
}
|
||||||
void ACCandMMCIntEnable(void)//加速度和地磁中断使能
|
void ACCandMMCIntEnable(void)//加速度和地磁中断使能
|
||||||
{
|
{
|
||||||
Gpio_EnableIrq(LSM6DSLTR_INT1_PORTx, LSM6DSLTR_INT1_PINx, GpioIrqRising);//ACC_Int1
|
Gpio_EnableIrq(LSM6DSLTR_INT1_PORTx, LSM6DSLTR_INT1_PINx, GpioIrqRising);//ACC_Int1
|
||||||
Gpio_EnableIrq(LSM6DSLTR_INT2_PORTx, LSM6DSLTR_INT2_PINx, GpioIrqRising);//ACC_Int2
|
Gpio_EnableIrq(LSM6DSLTR_INT2_PORTx, LSM6DSLTR_INT2_PINx, GpioIrqRising);//ACC_Int2
|
||||||
Gpio_EnableIrq(MMC5983MA_INT_PORTx, MMC5983MA_INT_PINx, GpioIrqRising);//MMC_Int
|
Gpio_EnableIrq(MMC5983MA_INT_PORTx, MMC5983MA_INT_PINx, GpioIrqRising);//MMC_Int
|
||||||
}
|
}
|
||||||
void ACCandMMCIntDisable(void)//加速度和地磁中断失能
|
void ACCandMMCIntDisable(void)//加速度和地磁中断失能
|
||||||
{
|
{
|
||||||
Gpio_DisableIrq(LSM6DSLTR_INT1_PORTx, LSM6DSLTR_INT1_PINx, GpioIrqRising);//ACC_Int1
|
Gpio_DisableIrq(LSM6DSLTR_INT1_PORTx, LSM6DSLTR_INT1_PINx, GpioIrqRising);//ACC_Int1
|
||||||
Gpio_DisableIrq(LSM6DSLTR_INT2_PORTx, LSM6DSLTR_INT2_PINx, GpioIrqRising);//ACC_Int2
|
Gpio_DisableIrq(LSM6DSLTR_INT2_PORTx, LSM6DSLTR_INT2_PINx, GpioIrqRising);//ACC_Int2
|
||||||
@@ -456,31 +458,31 @@ static void SPI0Init(void)
|
|||||||
DDL_ZERO_STRUCT(GpioInitStruct);
|
DDL_ZERO_STRUCT(GpioInitStruct);
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
|
||||||
|
|
||||||
/************************** SPI0配置:主机-->LORA *******************************/
|
/************************** SPI0配置:主机-->LORA *******************************/
|
||||||
GpioInitStruct.enDir = GpioDirOut;
|
GpioInitStruct.enDir = GpioDirOut;
|
||||||
|
|
||||||
Gpio_Init(SPI0_NSS_PORTx,SPI0_NSS_PINx,&GpioInitStruct);
|
Gpio_Init(SPI0_NSS_PORTx,SPI0_NSS_PINx,&GpioInitStruct);
|
||||||
Gpio_SetAfMode(SPI0_NSS_PORTx,SPI0_NSS_PINx,SPI0_NSS_AF); //配置SPI0_NSS
|
Gpio_SetAfMode(SPI0_NSS_PORTx,SPI0_NSS_PINx,SPI0_NSS_AF); //配置SPI0_NSS
|
||||||
|
|
||||||
Gpio_Init(SPI0_SCK_PORTx,SPI0_SCK_PINx,&GpioInitStruct);
|
Gpio_Init(SPI0_SCK_PORTx,SPI0_SCK_PINx,&GpioInitStruct);
|
||||||
Gpio_SetAfMode(SPI0_SCK_PORTx,SPI0_SCK_PINx,SPI0_SCK_AF); //配置SPI0_SCK
|
Gpio_SetAfMode(SPI0_SCK_PORTx,SPI0_SCK_PINx,SPI0_SCK_AF); //配置SPI0_SCK
|
||||||
|
|
||||||
Gpio_Init(SPI0_MOSI_PORTx,SPI0_MOSI_PINx,&GpioInitStruct);
|
Gpio_Init(SPI0_MOSI_PORTx,SPI0_MOSI_PINx,&GpioInitStruct);
|
||||||
Gpio_SetAfMode(SPI0_MOSI_PORTx,SPI0_MOSI_PINx,SPI0_MOSI_AF); //配置SPI0_MOSI
|
Gpio_SetAfMode(SPI0_MOSI_PORTx,SPI0_MOSI_PINx,SPI0_MOSI_AF); //配置SPI0_MOSI
|
||||||
|
|
||||||
GpioInitStruct.enDir = GpioDirIn; ///< 端口方向配置->输入
|
GpioInitStruct.enDir = GpioDirIn; ///< 端口方向配置->输入
|
||||||
|
|
||||||
Gpio_Init(SPI0_MISO_PORTx,SPI0_MISO_PINx,&GpioInitStruct);
|
Gpio_Init(SPI0_MISO_PORTx,SPI0_MISO_PINx,&GpioInitStruct);
|
||||||
Gpio_SetAfMode(SPI0_MISO_PORTx, SPI0_MISO_PINx,SPI0_MISO_AF); //配置SPI0_MISO
|
Gpio_SetAfMode(SPI0_MISO_PORTx, SPI0_MISO_PINx,SPI0_MISO_AF); //配置SPI0_MISO
|
||||||
|
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralSpi0,TRUE); ///< 打开SPI0外设时钟
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralSpi0,TRUE); ///< 打开SPI0外设时钟
|
||||||
Reset_RstPeripheral0(ResetMskSpi0); ///<复位模块
|
Reset_RstPeripheral0(ResetMskSpi0); ///<复位模块
|
||||||
|
|
||||||
//SPI0模块配置:主机
|
//SPI0模块配置:主机
|
||||||
SpiInitStruct.enSpiMode = SpiMskMaster; //配置位主机模式
|
SpiInitStruct.enSpiMode = SpiMskMaster; //配置位主机模式
|
||||||
SpiInitStruct.enPclkDiv = SpiClkMskDiv4; //波特率:PCLK/4
|
SpiInitStruct.enPclkDiv = SpiClkMskDiv4; //波特率:PCLK/4
|
||||||
SpiInitStruct.enCPHA = SpiMskCphasecond; //第二边沿采样
|
SpiInitStruct.enCPHA = SpiMskCphasecond; //第二边沿采样
|
||||||
SpiInitStruct.enCPOL = SpiMskcpolhigh; //极性为高
|
SpiInitStruct.enCPOL = SpiMskcpolhigh; //极性为高
|
||||||
Spi_Init(M0P_SPI0, &SpiInitStruct);
|
Spi_Init(M0P_SPI0, &SpiInitStruct);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -492,31 +494,31 @@ static void SPI1Init(void)
|
|||||||
DDL_ZERO_STRUCT(GpioInitStruct);
|
DDL_ZERO_STRUCT(GpioInitStruct);
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
|
||||||
|
|
||||||
/************************** SPI1配置:主机-->LORA *******************************/
|
/************************** SPI1配置:主机-->LORA *******************************/
|
||||||
GpioInitStruct.enDir = GpioDirOut;
|
GpioInitStruct.enDir = GpioDirOut;
|
||||||
|
|
||||||
Gpio_Init(SPI1_NSS_PORTx,SPI1_NSS_PINx,&GpioInitStruct);
|
Gpio_Init(SPI1_NSS_PORTx,SPI1_NSS_PINx,&GpioInitStruct);
|
||||||
Gpio_SetAfMode(SPI1_NSS_PORTx,SPI1_NSS_PINx,SPI1_NSS_AF); //配置SPI1_NSS
|
Gpio_SetAfMode(SPI1_NSS_PORTx,SPI1_NSS_PINx,SPI1_NSS_AF); //配置SPI1_NSS
|
||||||
|
|
||||||
Gpio_Init(SPI1_SCK_PORTx,SPI1_SCK_PINx,&GpioInitStruct);
|
Gpio_Init(SPI1_SCK_PORTx,SPI1_SCK_PINx,&GpioInitStruct);
|
||||||
Gpio_SetAfMode(SPI1_SCK_PORTx,SPI1_SCK_PINx,SPI1_SCK_AF); //配置SPI1_SCK
|
Gpio_SetAfMode(SPI1_SCK_PORTx,SPI1_SCK_PINx,SPI1_SCK_AF); //配置SPI1_SCK
|
||||||
|
|
||||||
Gpio_Init(SPI1_MOSI_PORTx,SPI1_MOSI_PINx,&GpioInitStruct);
|
Gpio_Init(SPI1_MOSI_PORTx,SPI1_MOSI_PINx,&GpioInitStruct);
|
||||||
Gpio_SetAfMode(SPI1_MOSI_PORTx,SPI1_MOSI_PINx,SPI1_MOSI_AF); //配置SPI1_MOSI
|
Gpio_SetAfMode(SPI1_MOSI_PORTx,SPI1_MOSI_PINx,SPI1_MOSI_AF); //配置SPI1_MOSI
|
||||||
|
|
||||||
GpioInitStruct.enDir = GpioDirIn; ///< 端口方向配置->输入
|
GpioInitStruct.enDir = GpioDirIn; ///< 端口方向配置->输入
|
||||||
|
|
||||||
Gpio_Init(SPI1_MISO_PORTx,SPI1_MISO_PINx,&GpioInitStruct);
|
Gpio_Init(SPI1_MISO_PORTx,SPI1_MISO_PINx,&GpioInitStruct);
|
||||||
Gpio_SetAfMode(SPI1_MISO_PORTx, SPI1_MISO_PINx,SPI1_MISO_AF); //配置SPI1_MISO
|
Gpio_SetAfMode(SPI1_MISO_PORTx, SPI1_MISO_PINx,SPI1_MISO_AF); //配置SPI1_MISO
|
||||||
|
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralSpi1,TRUE); ///< 打开SPI0外设时钟
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralSpi1,TRUE); ///< 打开SPI0外设时钟
|
||||||
Reset_RstPeripheral0(ResetMskSpi1); ///<复位模块
|
Reset_RstPeripheral0(ResetMskSpi1); ///<复位模块
|
||||||
|
|
||||||
//SPI1模块配置:主机
|
//SPI1模块配置:主机
|
||||||
SpiInitStruct.enSpiMode = SpiMskMaster; //配置位主机模式
|
SpiInitStruct.enSpiMode = SpiMskMaster; //配置位主机模式
|
||||||
SpiInitStruct.enPclkDiv = SpiClkMskDiv2; //波特率:PCLK/2
|
SpiInitStruct.enPclkDiv = SpiClkMskDiv2; //波特率:PCLK/2
|
||||||
SpiInitStruct.enCPHA = SpiMskCphasecond; //第二边沿采样
|
SpiInitStruct.enCPHA = SpiMskCphasecond; //第二边沿采样
|
||||||
SpiInitStruct.enCPOL = SpiMskcpolhigh; //极性为高
|
SpiInitStruct.enCPOL = SpiMskcpolhigh; //极性为高
|
||||||
Spi_Init(M0P_SPI1, &SpiInitStruct);
|
Spi_Init(M0P_SPI1, &SpiInitStruct);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -537,28 +539,28 @@ static void I2C0Init(void)
|
|||||||
DDL_ZERO_STRUCT(stcI2cCfg);
|
DDL_ZERO_STRUCT(stcI2cCfg);
|
||||||
DDL_ZERO_STRUCT(stcGpioCfg);
|
DDL_ZERO_STRUCT(stcGpioCfg);
|
||||||
|
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //开启GPIO时钟门控
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //开启GPIO时钟门控
|
||||||
|
|
||||||
stcGpioCfg.enDir = GpioDirOut; ///< 端口方向配置->输出
|
stcGpioCfg.enDir = GpioDirOut; ///< 端口方向配置->输出
|
||||||
stcGpioCfg.enOD = GpioOdEnable; ///< 开漏输出
|
stcGpioCfg.enOD = GpioOdEnable; ///< 开漏输出
|
||||||
stcGpioCfg.enPu = GpioPuEnable; ///< 端口上拉配置->使能
|
stcGpioCfg.enPu = GpioPuEnable; ///< 端口上拉配置->使能
|
||||||
stcGpioCfg.enPd = GpioPdDisable; ///< 端口下拉配置->禁止
|
stcGpioCfg.enPd = GpioPdDisable; ///< 端口下拉配置->禁止
|
||||||
stcGpioCfg.bOutputVal = TRUE;
|
stcGpioCfg.bOutputVal = TRUE;
|
||||||
|
|
||||||
Gpio_Init(I2C0_SCL_PORTx, I2C0_SCL_PINx, &stcGpioCfg); ///< 端口初始化
|
Gpio_Init(I2C0_SCL_PORTx, I2C0_SCL_PINx, &stcGpioCfg); ///< 端口初始化
|
||||||
Gpio_SetAfMode(I2C0_SCL_PORTx, I2C0_SCL_PINx, I2C0_SCL_AF);
|
Gpio_SetAfMode(I2C0_SCL_PORTx, I2C0_SCL_PINx, I2C0_SCL_AF);
|
||||||
|
|
||||||
Gpio_Init(I2C0_SDA_PORTx, I2C0_SDA_PINx, &stcGpioCfg);
|
Gpio_Init(I2C0_SDA_PORTx, I2C0_SDA_PINx, &stcGpioCfg);
|
||||||
Gpio_SetAfMode(I2C0_SDA_PORTx, I2C0_SDA_PINx, I2C0_SDA_AF);
|
Gpio_SetAfMode(I2C0_SDA_PORTx, I2C0_SDA_PINx, I2C0_SDA_AF);
|
||||||
|
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralI2c0,TRUE); ///< 开启I2C0时钟门控
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralI2c0,TRUE); ///< 开启I2C0时钟门控
|
||||||
|
|
||||||
stcI2cCfg.u32Pclk = Sysctrl_GetPClkFreq(); ///< 获取PCLK时钟
|
stcI2cCfg.u32Pclk = Sysctrl_GetPClkFreq(); ///< 获取PCLK时钟
|
||||||
stcI2cCfg.u32Baud = 400000; ///< 1MHz
|
stcI2cCfg.u32Baud = 400000; ///< 1MHz
|
||||||
stcI2cCfg.enMode = I2cMasterMode; ///< 主机模式
|
stcI2cCfg.enMode = I2cMasterMode; ///< 主机模式
|
||||||
stcI2cCfg.u8SlaveAddr = 0xD5; ///< 从地址,主模式无效
|
stcI2cCfg.u8SlaveAddr = 0xD5; ///< 从地址,主模式无效
|
||||||
stcI2cCfg.bGc = FALSE; ///< 广播地址应答使能关闭
|
stcI2cCfg.bGc = FALSE; ///< 广播地址应答使能关闭
|
||||||
I2C_Init(M0P_I2C0, &stcI2cCfg); ///< 模块初始化
|
I2C_Init(M0P_I2C0, &stcI2cCfg); ///< 模块初始化
|
||||||
}
|
}
|
||||||
|
|
||||||
static void I2C1Init(void)
|
static void I2C1Init(void)
|
||||||
@@ -569,37 +571,37 @@ static void I2C1Init(void)
|
|||||||
DDL_ZERO_STRUCT(stcI2cCfg);
|
DDL_ZERO_STRUCT(stcI2cCfg);
|
||||||
DDL_ZERO_STRUCT(stcGpioCfg);
|
DDL_ZERO_STRUCT(stcGpioCfg);
|
||||||
|
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //开启GPIO时钟门控
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //开启GPIO时钟门控
|
||||||
|
|
||||||
stcGpioCfg.enDir = GpioDirOut; ///< 端口方向配置->输出
|
stcGpioCfg.enDir = GpioDirOut; ///< 端口方向配置->输出
|
||||||
stcGpioCfg.enOD = GpioOdEnable; ///< 开漏输出
|
stcGpioCfg.enOD = GpioOdEnable; ///< 开漏输出
|
||||||
stcGpioCfg.enPu = GpioPuEnable; ///< 端口上拉配置->使能
|
stcGpioCfg.enPu = GpioPuEnable; ///< 端口上拉配置->使能
|
||||||
stcGpioCfg.enPd = GpioPdDisable; ///< 端口下拉配置->禁止
|
stcGpioCfg.enPd = GpioPdDisable; ///< 端口下拉配置->禁止
|
||||||
stcGpioCfg.bOutputVal = TRUE;
|
stcGpioCfg.bOutputVal = TRUE;
|
||||||
|
|
||||||
Gpio_Init(I2C1_SCL_PORTx, I2C1_SCL_PINx, &stcGpioCfg); ///< 端口初始化
|
Gpio_Init(I2C1_SCL_PORTx, I2C1_SCL_PINx, &stcGpioCfg); ///< 端口初始化
|
||||||
Gpio_SetAfMode(I2C1_SCL_PORTx, I2C1_SCL_PINx, I2C1_SCL_AF);
|
Gpio_SetAfMode(I2C1_SCL_PORTx, I2C1_SCL_PINx, I2C1_SCL_AF);
|
||||||
|
|
||||||
Gpio_Init(I2C1_SDA_PORTx, I2C1_SDA_PINx, &stcGpioCfg);
|
Gpio_Init(I2C1_SDA_PORTx, I2C1_SDA_PINx, &stcGpioCfg);
|
||||||
Gpio_SetAfMode(I2C1_SDA_PORTx, I2C1_SDA_PINx, I2C1_SDA_AF);
|
Gpio_SetAfMode(I2C1_SDA_PORTx, I2C1_SDA_PINx, I2C1_SDA_AF);
|
||||||
|
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralI2c1,TRUE); ///< 开启I2C1时钟门控
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralI2c1,TRUE); ///< 开启I2C1时钟门控
|
||||||
|
|
||||||
stcI2cCfg.u32Pclk = Sysctrl_GetPClkFreq(); ///< 获取PCLK时钟
|
stcI2cCfg.u32Pclk = Sysctrl_GetPClkFreq(); ///< 获取PCLK时钟
|
||||||
stcI2cCfg.u32Baud = 400000; ///< 1MHz
|
stcI2cCfg.u32Baud = 400000; ///< 1MHz
|
||||||
stcI2cCfg.enMode = I2cMasterMode; ///< 主机模式
|
stcI2cCfg.enMode = I2cMasterMode; ///< 主机模式
|
||||||
stcI2cCfg.u8SlaveAddr = 0xD5; ///< 从地址,主模式无效
|
stcI2cCfg.u8SlaveAddr = 0xD5; ///< 从地址,主模式无效
|
||||||
stcI2cCfg.bGc = FALSE; ///< 广播地址应答使能关闭
|
stcI2cCfg.bGc = FALSE; ///< 广播地址应答使能关闭
|
||||||
I2C_Init(M0P_I2C1, &stcI2cCfg); ///< 模块初始化
|
I2C_Init(M0P_I2C1, &stcI2cCfg); ///< 模块初始化
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void WdtInit(void)
|
static void WdtInit(void)
|
||||||
{
|
{
|
||||||
#if (USE_WDT == 1)
|
#if (USE_WDT == 1)
|
||||||
///< 开启WDT外设时钟
|
///< 开启WDT外设时钟
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralWdt,TRUE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralWdt,TRUE);
|
||||||
///< WDT 初始化
|
///< WDT 初始化
|
||||||
Wdt_Init(WdtResetEn, WdtT52s4);
|
Wdt_Init(WdtResetEn, WdtT52s4);
|
||||||
Wdt_Start();
|
Wdt_Start();
|
||||||
#endif
|
#endif
|
||||||
@@ -703,9 +705,22 @@ void PrintfMess(void)
|
|||||||
}
|
}
|
||||||
void DBGUartSendByte(uint8_t sData)
|
void DBGUartSendByte(uint8_t sData)
|
||||||
{
|
{
|
||||||
|
if(gDebugChannel == DBG_CH_RS485_1) {
|
||||||
|
LPUart_SendData(M0P_LPUART0, sData);
|
||||||
|
} else {
|
||||||
Uart_SendDataPoll(M0P_UART0, sData);
|
Uart_SendDataPoll(M0P_UART0, sData);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
void DBGUartSend(uint8_t *sData, int sLen)
|
||||||
|
{
|
||||||
|
if(gDebugChannel == DBG_CH_RS485_1) {
|
||||||
|
LPUart0SendArray(sData, sLen);
|
||||||
|
} else {
|
||||||
|
for(int i = 0; i < sLen; i++) {
|
||||||
|
Uart_SendDataPoll(M0P_UART0, sData[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
void LPUart0SendArray(uint8_t *sData, uint8_t sLen)
|
void LPUart0SendArray(uint8_t *sData, uint8_t sLen)
|
||||||
{
|
{
|
||||||
RS485_CTRL_TX();
|
RS485_CTRL_TX();
|
||||||
@@ -719,7 +734,7 @@ uint32_t GetSysTick(void)
|
|||||||
{
|
{
|
||||||
return SysTickCnt;
|
return SysTickCnt;
|
||||||
}
|
}
|
||||||
void delay_us(uint32_t uS)//24MHz一个nop延时0.5us,12MHz延时1us
|
void delay_us(uint32_t uS)//24MHz一个nop延时0.5us,12MHz延时1us
|
||||||
{
|
{
|
||||||
uS *= 2;
|
uS *= 2;
|
||||||
while(uS--)
|
while(uS--)
|
||||||
@@ -764,33 +779,34 @@ void PortB_IRQHandler(void)
|
|||||||
|
|
||||||
void PortC_IRQHandler(void)
|
void PortC_IRQHandler(void)
|
||||||
{
|
{
|
||||||
//加速度INT1
|
//加速度INT1
|
||||||
if(TRUE == Gpio_GetIrqStatus(LSM6DSLTR_INT1_PORTx, LSM6DSLTR_INT1_PINx)) {
|
if(TRUE == Gpio_GetIrqStatus(LSM6DSLTR_INT1_PORTx, LSM6DSLTR_INT1_PINx)) {
|
||||||
Gpio_ClearIrq(LSM6DSLTR_INT1_PORTx, LSM6DSLTR_INT1_PINx);
|
Gpio_ClearIrq(LSM6DSLTR_INT1_PORTx, LSM6DSLTR_INT1_PINx);
|
||||||
Lsm6dsInt1CallBack();
|
Lsm6dsInt1CallBack();
|
||||||
}
|
}
|
||||||
|
|
||||||
//地磁INT
|
//地磁INT
|
||||||
if(TRUE == Gpio_GetIrqStatus(MMC5983MA_INT_PORTx, MMC5983MA_INT_PINx)) {
|
if(TRUE == Gpio_GetIrqStatus(MMC5983MA_INT_PORTx, MMC5983MA_INT_PINx)) {
|
||||||
Gpio_ClearIrq(MMC5983MA_INT_PORTx, MMC5983MA_INT_PINx);
|
Gpio_ClearIrq(MMC5983MA_INT_PORTx, MMC5983MA_INT_PINx);
|
||||||
MMC5983IntCallBack();
|
MMC5983IntCallBack();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
///<LPUART0 中断服务函数
|
///<LPUART0 中断服务函数
|
||||||
void LpUart0_IRQHandler(void)
|
void LpUart0_IRQHandler(void)
|
||||||
{
|
{
|
||||||
if(LPUart_GetStatus(M0P_LPUART0, LPUartRC)) { ///接收数据
|
if(LPUart_GetStatus(M0P_LPUART0, LPUartRC)) { ///接收数据
|
||||||
LPUart_ClrStatus(M0P_LPUART0, LPUartRC); ///<清接收中断请求
|
LPUart_ClrStatus(M0P_LPUART0, LPUartRC); ///<清接收中断请求
|
||||||
uint8_t u8RxData = LPUart_ReceiveData(M0P_LPUART0); ///读取数据
|
uint8_t u8RxData = LPUart_ReceiveData(M0P_LPUART0); ///读取数据
|
||||||
LPUartRx_CallBack(u8RxData);
|
LPUartRx_CallBack(u8RxData);
|
||||||
|
DebugUartIRQ(u8RxData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Uart0_IRQHandler(void)
|
void Uart0_IRQHandler(void)
|
||||||
{
|
{
|
||||||
if(Uart_GetStatus(M0P_UART0, UartRC)) { ///接收数据
|
if(Uart_GetStatus(M0P_UART0, UartRC)) { ///接收数据
|
||||||
Uart_ClrStatus(M0P_UART0, UartRC); ///<清接收中断请求
|
Uart_ClrStatus(M0P_UART0, UartRC); ///<清接收中断请求
|
||||||
uint8_t u8RxData = Uart_ReceiveData(M0P_UART0); ///读取数据
|
uint8_t u8RxData = Uart_ReceiveData(M0P_UART0); ///读取数据
|
||||||
DebugUartIRQ(u8RxData);
|
DebugUartIRQ(u8RxData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -798,7 +814,7 @@ void Uart0_IRQHandler(void)
|
|||||||
void Rtc_IRQHandler(void)
|
void Rtc_IRQHandler(void)
|
||||||
{
|
{
|
||||||
if(Rtc_GetPridItStatus() == TRUE) {
|
if(Rtc_GetPridItStatus() == TRUE) {
|
||||||
Rtc_ClearPrdfItStatus(); //清除中断标志位
|
Rtc_ClearPrdfItStatus(); //清除中断标志位
|
||||||
RtcIRQHander();
|
RtcIRQHander();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -807,19 +823,19 @@ void LpTim0_IRQHandler(void)
|
|||||||
{
|
{
|
||||||
if(Lptim_GetItStatus(M0P_LPTIMER0) == TRUE)
|
if(Lptim_GetItStatus(M0P_LPTIMER0) == TRUE)
|
||||||
{
|
{
|
||||||
Lptim_ClrItStatus(M0P_LPTIMER0);//清除LPTimer0的中断标志位
|
Lptim_ClrItStatus(M0P_LPTIMER0);//清除LPTimer0的中断标志位
|
||||||
LPTimer0IRQHander();
|
LPTimer0IRQHander();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
///<深度休眠模式外部端口配置(STK)
|
///<深度休眠模式外部端口配置(STK)
|
||||||
static void DeepSleepGPIOCfg(void)
|
static void DeepSleepGPIOCfg(void)
|
||||||
{
|
{
|
||||||
stc_gpio_cfg_t GpioInitStruct;
|
stc_gpio_cfg_t GpioInitStruct;
|
||||||
|
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
|
||||||
|
|
||||||
//低功耗状态下未使用的脚配置
|
//低功耗状态下未使用的脚配置
|
||||||
//输入上拉
|
//输入上拉
|
||||||
GpioInitStruct.enDir = GpioDirIn;
|
GpioInitStruct.enDir = GpioDirIn;
|
||||||
GpioInitStruct.enPu = GpioPuEnable;
|
GpioInitStruct.enPu = GpioPuEnable;
|
||||||
|
|
||||||
@@ -827,7 +843,7 @@ static void DeepSleepGPIOCfg(void)
|
|||||||
Gpio_Init(SPI0_SCK_PORTx,SPI0_SCK_PINx,&GpioInitStruct);
|
Gpio_Init(SPI0_SCK_PORTx,SPI0_SCK_PINx,&GpioInitStruct);
|
||||||
Gpio_Init(SPI0_MISO_PORTx,SPI0_MISO_PINx,&GpioInitStruct);
|
Gpio_Init(SPI0_MISO_PORTx,SPI0_MISO_PINx,&GpioInitStruct);
|
||||||
|
|
||||||
//输入下拉
|
//输入下拉
|
||||||
GpioInitStruct.enDir = GpioDirIn;
|
GpioInitStruct.enDir = GpioDirIn;
|
||||||
GpioInitStruct.enPd = GpioPdEnable;
|
GpioInitStruct.enPd = GpioPdEnable;
|
||||||
|
|
||||||
@@ -839,26 +855,26 @@ void EnterDeepSleep(void)
|
|||||||
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
|
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
|
||||||
|
|
||||||
//< LORA
|
//< LORA
|
||||||
Sx1276LoRaSleep();//Lora睡眠
|
Sx1276LoRaSleep();//Lora睡眠
|
||||||
LORAIntDisable();//关闭LORA中断
|
LORAIntDisable();//关闭LORA中断
|
||||||
|
|
||||||
ACCandMMCIntDisable();//关闭加速度和地磁中断
|
ACCandMMCIntDisable();//关闭加速度和地磁中断
|
||||||
|
|
||||||
#if (USE_VBAT_AD == 1)//< AD
|
#if (USE_VBAT_AD == 1)//< AD
|
||||||
AD_OFF();
|
AD_OFF();
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE);
|
||||||
Sysctrl_ClkSourceEnable(SysctrlClkPLL,FALSE);
|
Sysctrl_ClkSourceEnable(SysctrlClkPLL,FALSE);
|
||||||
Bgr_BgrDisable(); ///< 关闭BGR
|
Bgr_BgrDisable(); ///< 关闭BGR
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, FALSE);
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, FALSE);
|
||||||
Adc_SGL_Stop();//关闭单次采样
|
Adc_SGL_Stop();//关闭单次采样
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (USE_SPI0 == 1)
|
#if (USE_SPI0 == 1)
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralSpi0,FALSE);//关闭SPI0外设时钟
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralSpi0,FALSE);//关闭SPI0外设时钟
|
||||||
#endif
|
#endif
|
||||||
#if (USE_UART0 == 1)
|
#if (USE_UART0 == 1)
|
||||||
EnableNvic(UART0_2_IRQn, IrqLevel3, false);
|
EnableNvic(UART0_2_IRQn, IrqLevel3, false);
|
||||||
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,FALSE); //关闭UART0时钟
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,FALSE); //关闭UART0时钟
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DeepSleepGPIOCfg();
|
DeepSleepGPIOCfg();
|
||||||
@@ -876,7 +892,7 @@ void WakeUpInit(void)
|
|||||||
AdcInit();
|
AdcInit();
|
||||||
#endif
|
#endif
|
||||||
#if (USE_UART0 == 1)
|
#if (USE_UART0 == 1)
|
||||||
Uart0Init();
|
Uart0Init(500000);
|
||||||
#endif
|
#endif
|
||||||
#if (USE_SPI0 == 1)
|
#if (USE_SPI0 == 1)
|
||||||
SPI0Init();
|
SPI0Init();
|
||||||
@@ -885,9 +901,9 @@ void WakeUpInit(void)
|
|||||||
WdtInit();
|
WdtInit();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LORAIntEnable();//开启LORA中断
|
LORAIntEnable();//开启LORA中断
|
||||||
Sx1276LoRaWakeup();//LORA唤醒
|
Sx1276LoRaWakeup();//LORA唤醒
|
||||||
ACCandMMCIntEnable();//开启加速度和地磁中断
|
ACCandMMCIntEnable();//开启加速度和地磁中断
|
||||||
|
|
||||||
SysTick_Config(SystemCoreClock/1000);
|
SysTick_Config(SystemCoreClock/1000);
|
||||||
}
|
}
|
||||||
@@ -908,7 +924,7 @@ void BspInit(void)
|
|||||||
AdcInit();
|
AdcInit();
|
||||||
#endif
|
#endif
|
||||||
#if (USE_UART0 == 1)//< DEBUG
|
#if (USE_UART0 == 1)//< DEBUG
|
||||||
Uart0Init();
|
Uart0Init(500000);
|
||||||
#endif
|
#endif
|
||||||
#if (USE_RTC == 1)//< RTC
|
#if (USE_RTC == 1)//< RTC
|
||||||
RTCInit(30);
|
RTCInit(30);
|
||||||
@@ -923,7 +939,7 @@ void BspInit(void)
|
|||||||
SPI1Init();
|
SPI1Init();
|
||||||
#endif
|
#endif
|
||||||
#if (USE_LPUART0 == 1)//< LPUART0
|
#if (USE_LPUART0 == 1)//< LPUART0
|
||||||
LpUart0Init();
|
LpUart0Init(9600);
|
||||||
#endif
|
#endif
|
||||||
#if(USE_I2C0 == 1)
|
#if(USE_I2C0 == 1)
|
||||||
I2C0Init();
|
I2C0Init();
|
||||||
|
|||||||
+177
-85
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user