Compare commits

..

7 Commits

Author SHA1 Message Date
2f1319a378 update:
新版界面ui
2026-03-06 13:53:14 +08:00
7373c0ad95 update:
设备屏蔽功能
适配新版界面
2026-03-06 13:48:42 +08:00
090eb335a8 update 2026-02-25 15:12:13 +08:00
9d69b29eed update 2026-02-24 09:58:06 +08:00
fb4e311fbe update modbus 2026-02-09 17:55:33 +08:00
270141591e update w5500 w25q 2026-02-03 12:01:38 +08:00
f56744ad7a update 2026-02-03 11:56:05 +08:00
165 changed files with 12202 additions and 5792 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,771 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc; *.md</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>CalibBoard</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></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>18</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>4</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<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)(1012=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U602712501 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM))</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>0</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>1</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
</DebugDescription>
</TargetOption>
</Target>
<Group>
<GroupName>Application/MDK-ARM</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>startup_stm32f407xx.s</PathWithFileName>
<FilenameWithoutPath>startup_stm32f407xx.s</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>Application/User/Core</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Core/Src/main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Core/Src/gpio.c</PathWithFileName>
<FilenameWithoutPath>gpio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Core/Src/dma.c</PathWithFileName>
<FilenameWithoutPath>dma.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Core/Src/usart.c</PathWithFileName>
<FilenameWithoutPath>usart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Core/Src/stm32f4xx_it.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_it.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Core/Src/stm32f4xx_hal_msp.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_msp.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_tim.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_tim_ex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_uart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_rcc.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_rcc_ex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_flash.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_flash_ex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>15</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_flash_ramfunc.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_gpio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_dma_ex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_dma.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_pwr.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_pwr_ex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_cortex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>23</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c</PathWithFileName>
<FilenameWithoutPath>stm32f4xx_hal_exti.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>Drivers/CMSIS</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Core/Src/system_stm32f4xx.c</PathWithFileName>
<FilenameWithoutPath>system_stm32f4xx.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>app</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>25</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\app\app.c</PathWithFileName>
<FilenameWithoutPath>app.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>26</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\app\gas_data.c</PathWithFileName>
<FilenameWithoutPath>gas_data.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>27</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\app\app_timer.c</PathWithFileName>
<FilenameWithoutPath>app_timer.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\app\app_leakage.c</PathWithFileName>
<FilenameWithoutPath>app_leakage.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>29</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\app\app_com.c</PathWithFileName>
<FilenameWithoutPath>app_com.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>algo</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>30</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\algo\algo_queue.c</PathWithFileName>
<FilenameWithoutPath>algo_queue.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>bsp</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\bsp\bsp_Delay.c</PathWithFileName>
<FilenameWithoutPath>bsp_Delay.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\bsp\bsp_Led.c</PathWithFileName>
<FilenameWithoutPath>bsp_Led.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\bsp\bsp_Wdg.c</PathWithFileName>
<FilenameWithoutPath>bsp_Wdg.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\bsp\bsp_74HC4067.c</PathWithFileName>
<FilenameWithoutPath>bsp_74HC4067.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>35</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\bsp\bsp_Flash.c</PathWithFileName>
<FilenameWithoutPath>bsp_Flash.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\bsp\bsp_uart.c</PathWithFileName>
<FilenameWithoutPath>bsp_uart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>gui</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\gui\gui_tjc_hmi.c</PathWithFileName>
<FilenameWithoutPath>gui_tjc_hmi.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>protocol</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\protocol\proto_modbus_lib.c</PathWithFileName>
<FilenameWithoutPath>proto_modbus_lib.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\protocol\proto_print.c</PathWithFileName>
<FilenameWithoutPath>proto_print.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\protocol\proto_modbus_master_tdlas.c</PathWithFileName>
<FilenameWithoutPath>proto_modbus_master_tdlas.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\usr\protocol\proto_modbus_slave_ex.c</PathWithFileName>
<FilenameWithoutPath>proto_modbus_slave_ex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>1</RteFlg>
</Group>
</ProjectOpt>

View File

@@ -1,949 +0,0 @@
:020000040800F2
:10000000D88B0020690200083D280008FF24000862
:1000100039280008A5050008153000080000000078
:10002000000000000000000000000000432800085D
:1000300013070008000000004128000845280008B8
:10004000830200088302000883020008830200087C
:10005000830200088302000883020008830200086C
:10006000830200088302000883020008830200085C
:1000700083020008A905000883020008B9050008EA
:10008000C9050008D905000883020008830200089A
:10009000830200088302000883020008830200082C
:1000A000830200088302000883020008830200081C
:1000B000830200088302000883020008830200080C
:1000C00083020008830200088302000883020008FC
:1000D00083020008F52F000805300008830200089D
:1000E00083020008830200088302000883020008DC
:1000F00083020008830200088302000883020008CC
:1001000083020008830200088302000883020008BB
:1001100045290008830200088302000883020008C2
:100120008302000883020008E90500088302000832
:10013000830200088302000883020008830200088B
:10014000830200088302000883020008830200087B
:100150008302000883020008F905000883020008F2
:10016000830200088302000883020008830200085B
:1001700083020008830200088302000800000000D8
:10018000830200088302000800F002F800F05CF827
:100190000AA090E8000C82448344AAF10107DA45E2
:1001A00001D100F051F8AFF2090EBAE80F0013F0D8
:1001B000010F18BFFB1A43F001031847B8370000BE
:1001C000D83700000A444FF0000C10F8013B13F040
:1001D000070408BF10F8014B1D1108BF10F8015BA0
:1001E000641E05D010F8016B641E01F8016BF9D193
:1001F00013F0080F1EBF10F8014BAD1C0C1B09D1EA
:100200006D1E58BF01F801CBFAD505E014F8016B5B
:1002100001F8016B6D1EF9D59142D6D370470000ED
:100220000023002400250026103A28BF78C1FBD8FF
:10023000520728BF30C148BF0B6070471FB503F09D
:100240005BFB1FBD10B510BD00F072F91146FFF742
:10025000F5FF03F079FA00F090F903B4FFF7F2FF2D
:1002600003BC00F099F9000009488047094800479D
:10027000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE756
:10028000FEE7FEE704480549054A064B70470000B3
:100290003129000889010008D87B0020D88B002074
:1002A000D8830020D883002053EA020C00F0698034
:1002B0002DE9F04B4FF00006002B1FBFB3FA83F57A
:1002C00003FA05F424FA05F65E4012BF1643B2FAAB
:1002D00082F502FA05F4C5F120051EBF22FA05FCDD
:1002E00044EA0C04203556EA044C4FEA144418BF83
:1002F000641C4FF000084FF00009904271EB030CB2
:1003000039D3002919BFB1FA81F701FA07F6B0FA1B
:1003100080F700FA07F6C7F120071EBF20FA07FC96
:1003200046EA0C062037B6FBF4FCA7EB0507103FA6
:1003300007F01F0BCBF120060CFA0BFB2CFA06F68C
:1003400044BFB3460026202FA4BF5E464FF0000BEB
:100350005BEA060C08BF4FF0010B19EB0B09ABFB76
:10036000027C48EB0608C01B06FB02CC0BFB03CC4F
:1003700071EB0C01C1E70B46024641464846BDE819
:10038000F08B13B54FF000004FF00001AFF3008089
:10039000BDE81C40704740EA010310B59B070FD130
:1003A000042A0DD310C808C9121F9C42F8D020BAE5
:1003B00019BA884201D9012010BD4FF0FF3010BD9D
:1003C0001AB1D30703D0521C07E0002010BD10F86B
:1003D000013B11F8014B1B1B07D110F8013B11F831
:1003E000014B1B1B01D1921EF1D1184610BD032AEF
:1003F00040F2308010F0030C00F0158011F8013B42
:10040000BCF1020F624498BF11F801CB00F8013B28
:1004100038BF11F8013BA2F1040298BF00F801CBEC
:1004200038BF00F8013B11F0030300F04F80083A99
:10043000C0F0088051F8043B083A51F804CBA0E81A
:100440000810F5E7121D5CBF51F8043B40F8043B6F
:10045000AFF30080D20724BF11F8013B11F801CBA4
:1004600048BF11F8012B24BF00F8013B00F801CB75
:1004700048BF00F8012B70474FF0000200B513464B
:1004800094469646203922BFA0E80C50A0E80C50B4
:10049000B1F12001BFF4F7AF090728BFA0E80C5065
:1004A00048BF0CC05DF804EB890028BF40F8042B5E
:1004B00008BF704748BF20F8022B11F0804F18BFCB
:1004C00000F8012B704770477047704710B5203A0D
:1004D000C0F00B80B1E81850203AA0E81850B1E8FD
:1004E0001850A0E81850BFF4F5AF5FEA027C24BFB3
:1004F000B1E81850A0E8185044BF18C918C0BDE8AA
:1005000010405FEA827C24BF51F8043B40F8043B72
:1005100008BF7047D20728BF31F8023B48BF11F827
:10052000012B28BF20F8023B48BF00F8012B704781
:10053000754600F02BF8AE4605006946534620F09C
:100540000700854618B020B5FFF79CFEBDE82040A7
:100550004FF000064FF000074FF000084FF0000B7F
:1005600021F00701AC46ACE8C009ACE8C009ACE832
:10057000C009ACE8C0098D46704710B50446AFF31A
:1005800000802046BDE81040FFF767BE0048704776
:10059000787B00207047000001491820ABBEFEE7C1
:1005A0002600020000BFFEE710B5024800F078FA0E
:1005B00010BD0000E803002010B5024800F070FAFA
:1005C00010BD00004804002010B5024800F068FA91
:1005D00010BD00006805002010B5024800F060FA68
:1005E00010BD0000C805002010B5024800F058FA00
:1005F00010BD0000A804002010B5024800F050FA19
:1006000010BD0000080500200146087810381823A6
:10061000B0FBF3F20848805CC865032A05D9086876
:100620006FF30900001D886503E008686FF3090097
:100630008865886D70470000023900080146002077
:100640008A6A8B69CBB932B1012A0DD0022A03D054
:10065000032A10D10EE000BFCB6A03F08073B3F120
:10066000807F00D1012007E0CB6AB3F1C07F00D1C9
:10067000012001E000E000BF34E08B69B3F5005FCA
:100680001AD132B1012A07D0022A03D0032A11D18C
:100690000AE000BF01200EE0CB6A03F08073B3F1E3
:1006A000807F00D1012006E0CB6AB3F1C07F00D18A
:1006B000012000E000BF15E032B1012A05D0022A76
:1006C00004D0032A0CD103E000BF00BF012008E0E2
:1006D000CB6A03F08073B3F1807F00D1012000E08A
:1006E00000BF00BF704730B50468246824F480243C
:1006F00005682C60046863608468402C04D1046839
:10070000A2600468E16003E00468A1600468E2603C
:1007100030BD704772B600BFFEE7000010B5002282
:1007200001B909E0012901D10A0205E0022901D13C
:100730000A0201E04FF440720E4B1B6823F4407331
:100740000C4C236023461B681343236023461B681D
:1007500023F0F803236023461B68022444EAC00404
:100760002343044C236023461B6843F480332360F7
:1007700010BD0000103C02401C48006800F40070EE
:10078000B0B11A48006820F400701849086000BF32
:100790000846006840F4006008600846006820F4DD
:1007A0000060086000BF0846006840F40070086000
:1007B0000E48006800F48060B0B10C48006820F476
:1007C00080600A49086000BF0846006840F4805015
:1007D00008600846006820F48050086000BF0846A2
:1007E000006840F48060086070470000003C0240F0
:1007F0000A4A126822F44072084B1A601A461268BC
:1008000042F004021A601A4612684FF4803343EA39
:1008100000231A43014B1A6070470000103C02404D
:10082000074A126822F44072054B1A601A46126891
:100830001A601A46126842F001021A60017070478D
:10084000103C024010B50D49096821F440710B4C71
:1008500021602146096841F4407121602146096800
:1008600041F001012160026000BF00BF00BFBFF383
:100870006F8F00BF00BF00BF436010BD103C02403F
:10088000084A126822F44072064B1A601A4612682F
:1008900042F480721A601A46126842F001021A602D
:1008A00001807047103C0240084A126822F44072EE
:1008B000064B1A601A46126842F400721A601A4611
:1008C000126842F001021A6001607047103C024059
:1008D0002348006800F0100040B12248C06940F091
:1008E00010002049C86110201D4908601C4800689C
:1008F00000F0200040B11B48C06940F008001949D1
:10090000C8612020164908601548006800F04000C2
:1009100040B11448C06940F004001249C861402049
:100920000F4908600E48006800F0800040B10D4893
:10093000C06940F002000B49C86180200849086086
:100940000748006800F0020040B10648C06940F066
:1009500020000449C8610220014908607047000076
:100960000C3C02402806002070B5044600250020FB
:100970001449C86100F058FC054609E0601C38B114
:1009800024B100F051FC401BA04201D9032070BDEE
:100990000D48006800F480300028EFD10A48006854
:1009A00000F0010010B10120074908600648006806
:1009B00000F0F20018B1FFF78BFF0120E7E70020FD
:1009C000E5E70000280600200C3C024070B5044614
:1009D000A56D00F029FC064694F83500022808D0E1
:1009E0008020606500BF002084F8340000BF012033
:1009F00070BD2068006820F016002168086020683B
:100A0000406920F0800021684861206C08B9A06C22
:100A100028B12068006820F008002168086020687C
:100A2000006820F001002168086010E000F0FCFB85
:100A3000801B05280BD920206065032084F8350031
:100A400000BF002084F8340000BF0320D0E72068F6
:100A5000006800F001000028E8D194F85C103F2005
:100A60008840A860012084F8350000BF002084F889
:100A7000340000BF00BFBBE7014691F835000228F3
:100A800003D08020486501207047052081F835009B
:100A90000868006820F001000A6810600020F3E791
:100AA000F8B50446002000908C4800684FF41651B9
:100AB000B0FBF1F7A56D2E6894F85C100820884013
:100AC000304098B12068006800F0040070B12068E0
:100AD000006820F004002168086094F85C10082089
:100AE0008840A860606D40F00100606594F85C107B
:100AF00001208840304068B12068406900F08000E3
:100B000040B194F85C1001208840A860606D40F00E
:100B10000200606594F85C1004208840304068B1A1
:100B20002068006800F0020040B194F85C100420D6
:100B30008840A860606D40F00400606594F85C1027
:100B400010208840304078B32068006800F008002A
:100B500050B394F85C1010208840A86020680068AA
:100B600000F4802080B12068006800F4002028B9DB
:100B7000206CC8B12046216C884715E0A06C98B164
:100B80002046A16C88470FE02068006800F4807060
:100B900028B92068006820F0080021680860206CEF
:100BA00010B12046216C884794F85C1020208840C2
:100BB0003040002865D02068006800F01000002850
:100BC0005FD094F85C1020208840A86094F835002D
:100BD000052828D12068006820F0160021680860E8
:100BE0002068406920F0800021684861206C08B9C5
:100BF000A06C28B12068006820F008002168086017
:100C000094F85C103F208840A860012084F83500EB
:100C100000BF002084F8340000BF206D10B12046D2
:100C2000216D8847F8BD2068006800F4802080B1FD
:100C30002068006800F4002028B9606C10B12046DC
:100C4000616C88471DE0E06BD8B12046E16B8847B6
:100C500017E02068006800F4807068B920680068B8
:100C600020F0100021680860012084F8350000BFE2
:100C7000002084F8340000BFE06B10B12046E16B27
:100C80008847606D38B3606D00F00100F0B1052059
:100C900084F835002068006820F0010021680860B1
:100CA00000BF0098401C0090B84200D905E02068C1
:100CB000006800F001000028F3D100BF012084F893
:100CC000350000BF002084F8340000BFE06C10B194
:100CD0002046E16C884700BFA4E700000C0000201C
:100CE0002DE9F0410446002500F09EFA074614B9AC
:100CF0000120BDE8F081606A00B100BF022084F8E5
:100D0000350000BF002084F8340000BF2068006870
:100D100020F00100216808600AE000F085FAC01B9D
:100D2000052805D920206065032084F83500E0E718
:100D30002068006800F001000028EED120680568F6
:100D400021480540D4E901010843E16808432169CD
:100D5000084361690843A1690843E1690843216ABE
:100D600008430543606A042803D1D4E90B01084312
:100D70000543206805602068456925F00705606A1D
:100D80000543606A04280DD1A06A0543E06A48B1B2
:100D90002046FFF753FC28B140206065012084F80D
:100DA0003500A6E7206845612046FFF72DFC064682
:100DB00094F85C103F208840B060002060650120FE
:100DC00084F83500002094E73F8010F02DE9F047CB
:100DD00004460D4616461F464FF00008D4F85890BA
:100DE00000BF94F83400012802D10220BDE8F0874A
:100DF000012084F8340000BF94F83500012825D183
:100E0000022084F83500002060653B4632462946C2
:100E10002046FFF768FC94F85C103F208840C9F832
:100E200008002068006840F0160021680860206C07
:100E300028B12068006840F0080021680860206838
:100E4000006840F001002168086006E000BF002053
:100E500084F8340000BF4FF002084046C6E70000A7
:100E600070B5044600F0E0F906462546681C10B14E
:100E700004480078054400BF00F0D6F9801BA84262
:100E8000FAD370BD080000202DE9F04104460E465B
:100E90000127002500BF2548007E012802D102203D
:100EA000BDE8F08101202149087600BF4CF25030A6
:100EB000FFF75AFD0746002F31D1401E30602068F1
:100EC00001280FD1207C6168FFF792FC4CF2503072
:100ED000FFF74AFD07461648006820F00400144951
:100EE00008601AE0A56812E0217C2846FFF716FC8E
:100EF0004CF25030FFF738FD07460D48006820F0EF
:100F0000FA000B4908600FB1356005E06D1CD4E9AB
:100F100002100844A842E7D800BFFFF72DFC00BF2D
:100F200000200249087600BF3846B9E728060020AD
:100F3000103C02400348006840F00040014908604E
:100F400000207047103C02402DE9F04106460F4654
:100F500014461D464FF0010800BF1F48007E0128BF
:100F600002D10220BDE8F08101201B49087600BFB4
:100F70004CF25030FFF7F8FC8046B8F1000F23D157
:100F800026B9E1B23846FFF74BFC12E0012E04D13E
:100F9000A1B23846FFF774FC0BE0022E04D12146C3
:100FA0003846FFF781FC04E022462B463846FFF71F
:100FB00049FC4CF25030FFF7D7FC804607480068E8
:100FC00020F001000549086000BF002002490876B2
:100FD00000BF4046C6E7000028060020103C024043
:100FE00000200949096801F0004159B10749064A42
:100FF0000C3A1160064911600349096801F000418B
:1010000001B1012070470000103C024023016745F8
:10101000AB89EFCDF8B502460B4600250024002031
:101020000021D6E0012606FA01F51E6806EA05044D
:10103000AC4274D11E7906F00306012E04D01E794D
:1010400006F00306022E13D190684F000326BE401F
:10105000B0434F00DE68BE403043906050680126C8
:101060008E40B0431E79C6F300168E403043506068
:101070001E7906F00306032E09D0D0684F00032620
:10108000BE40B0434F009E68BE403043D0601E79E2
:1010900006F00306022E13D1CF0802F1200656F8FF
:1010A00027004E07F70E0F26BE40B0434F07FF0E36
:1010B0001E69BE403043CF0802F1200646F82700E3
:1010C00010684F000326BE40B0431E7906F00306A9
:1010D0004F00BE40304310605E6806F44036002E7C
:1010E00076D000BF002600963C4E366846F4804617
:1010F0003A4F3E603E46366806F48046009600BF92
:1011000000BF374E8F0856F827008E07370F0F267F
:10111000BE40B043334EB24202D1002624E057E035
:10112000314EB24201D101261EE0304EB24201D111
:10113000022619E02E4EB24201D1032614E02D4EB4
:10114000B24201D104260FE02B4EB24201D1052656
:101150000AE02A4EB24201D1062605E0284EB242EC
:1011600001D1072600E008268F073F0FBE4030431D
:101170001B4E8F0846F82700224E3068A0435E6859
:1011800006F4801606B120431E4E3060361D3068CE
:10119000A0435E6806F4001606B12043194E361DC2
:1011A0003060184E361F3068A0435E6806F4003683
:1011B00006B12043134E361F3060361F3068A043FF
:1011C0005E6806F4803606B120430E4E083E30605D
:1011D000491C1029FFF426AFF8BD00004438024036
:1011E00008380140000002400004024000080240AC
:1011F000000C02400010024000140240001802409F
:10120000001C0240083C014010B5426921EA02037B
:1012100002EA010443EA0443836110BD0AB181611B
:1012200001E00B04836170470148006870470000CB
:101230000000002003480068034909780844014978
:1012400008607047000000200800002010B50D481D
:10125000006840F400700B4908600846006840F4DC
:10126000806008600846006840F4807008600320D1
:1012700000F0A6F8032000F007F800F02BF800209B
:1012800010BD0000003C024070B504460E480078D6
:101290004FF47A71B1FBF0F00C490968B1FBF0F53D
:1012A000284600F02FFC08B1012070BD102C07D299
:1012B00000222146501E00F045F80548046001E078
:1012C0000120F2E70020F0E7080000200C000020D9
:1012D0000400002008B500BF0020009010480068FE
:1012E00040F480400E4908600846006800F48040E1
:1012F000009000BF00BF00BF00200090081F0068E2
:1013000040F08050091F08600846006800F08050D7
:10131000009000BF00BF052000F052F808BD00009B
:101320004438024001460846002809DB00F01F034C
:1013300001229A4043099B0003F1E023C3F80021F6
:1013400000BF70472DE9F05F80460D461646002726
:1013500001F062FE074639462A46334601F007008F
:10136000C0F1070ABAF1040F02D94FF0040A01E0F4
:10137000C0F1070AD14600F1040ABAF1070F02D200
:101380004FF0000A01E0A0F1030AD4464FF0010A31
:101390000AFA09FAAAF1010A0AEA020A0AFA0CFA96
:1013A0004FF0010B0BFA0CFBABF1010B0BEA030B3B
:1013B0004AEA0B042146404601F036FEBDE8F09FA4
:1013C00000BF00F00702064B19684FF6FF031940F3
:1013D000044B0B4343EA0221014B196000BF7047E5
:1013E0000CED00E00000FA0570B504460D460CB99E
:1013F000012070BD5848006800F00700A84209D2DB
:1014000055490D700846006800F00700A84201D059
:101410000120EEE7207800F0020002281DD120789C
:1014200000F00400042805D14C48006840F4E05066
:101430004A490860207800F00800082805D147488C
:10144000006840F46040454908604448006820F066
:10145000F000A168084341490860207800F00100CD
:10146000A8B36068012807D13C4808380068C0F379
:101470004040B8B90120BCE76068022802D060682B
:10148000032807D1354808380068C0F3406048B9E0
:101490000120AEE7314808380068C0F3400008B9C1
:1014A0000120A6E72D48006820F00300616808438A
:1014B0002A490860FFF7B8FE064609E0FFF7B4FEC8
:1014C000801B41F28831884202D9032091E707E06E
:1014D0002248006800F00C006168B0EB810FEDD18C
:1014E0001D48006800F00700A84209D91A490D708C
:1014F0000846006800F00700A84201D0012078E704
:10150000207800F00400042807D11448006820F473
:10151000E050E168084311490860207800F00800B5
:10152000082808D10D48006820F46040216940EA8D
:10153000C1000A49086000F03FF808490968C1F392
:101540000311074A515CC840064908600648006814
:10155000FFF79AFE00204CE7003C024008380240AA
:101560000A3900080C00002004000020014800682F
:10157000704700000C00002000B5FFF7F7FF04499A
:101580000968C1F38221034A515CC84000BD0000D4
:10159000083802401A39000800B5FFF7E7FF044990
:1015A0000968C1F34231034A515CC84000BD0000E4
:1015B000083802401A3900082DE9F04700240025B8
:1015C0000026A1462548006800F00C0020B1042840
:1015D00005D008283AD105E0DFF8849039E0DFF83B
:1015E000849036E01D48001F006800F03F041B484F
:1015F000001F006800F4800078B11A481749091FDD
:101600000968C1F38811A0FB01700146224600233E
:101610003846FEF749FE05460EE011480F49091FFE
:101620000968C1F38811A0FB01700146224600231E
:101630003846FEF739FE05460848001F0068C0F32B
:101640000140401C4600B5FBF6F902E0DFF81090BF
:1016500000BF00BF4846BDE8F087000008380240E0
:101660000024F40000127A00F8B504460CB90120F9
:10167000F8BD207800F00100002874D0F948006817
:1016800000F00C0004280DD0F648006800F00C00B3
:10169000082813D1F348001F006800F48000B0F55B
:1016A000800F0BD1EF4808380068C0F34040002895
:1016B00059D06068002856D10120D9E700BF606882
:1016C000B0F5803F08D1E7480838006840F4803022
:1016D000E449083908601EE06068B0F5A02F0DD11C
:1016E000E0480838006840F48020DE490839086086
:1016F0000846006840F4803008600CE0D94808389B
:10170000006820F48030D74908390860084600682E
:1017100020F48020086000BF606890B1FFF784FD6E
:10172000054606E0FFF780FD401B642801D9032031
:101730009EE7CC4808380068C0F340400028F1D04C
:1017400011E0FFF771FD054606E0FFF76DFD401B58
:10175000642801D903208BE7C24808380068C0F329
:1017600040400028F1D1207800F0020002285FD12B
:10177000BC48006800F00C0058B1BA48006800F09E
:101780000C0008281CD1B748001F006800F4800036
:10179000B0B9B44808380068C0F3400020B1E06830
:1017A000012801D0012063E7AE480838006820F026
:1017B000F800216940EAC100AA490839086037E009
:1017C000E06800B30120A8490860FFF72DFD054639
:1017D00006E0FFF729FD401B022801D9032047E757
:1017E000A04808380068C0F340000028F1D09D48A8
:1017F0000838006820F0F800216940EAC1009949E2
:101800000839086014E0002097490860FFF70CFDD4
:10181000054606E0FFF708FD401B022801D903201A
:1018200026E7904808380068C0F340000028F1D14E
:10183000207800F0080008282CD16069A8B10120A8
:101840008A490860FFF7F0FC054606E0FFF7ECFC6C
:10185000401B022801D903200AE782486C30006847
:10186000C0F340000028F1D014E000207F49086058
:10187000FFF7DAFC054606E0FFF7D6FC401B02281E
:1018800001D90320F4E677486C300068C0F34000CB
:101890000028F1D1207800F00400042870D100273E
:1018A00070483830006800F0805090B900BF0020C8
:1018B00000906C483830006840F0805069493831F9
:1018C00008600846006800F08050009000BF00BF2C
:1018D00001276748006800F48070B0B96448006868
:1018E00040F4807062490860FFF79EFC054606E000
:1018F000FFF79AFC401B022801D90320B8E65C4898
:10190000006800F480700028F2D000BFA0680128B1
:1019100008D154486830006840F0010051496831EE
:1019200008601DE0A06805280DD14E4868300068A9
:1019300040F004004B49683108600846006840F0F8
:10194000010008600CE047486830006820F00100A2
:101950004449683108600846006820F004000860C7
:1019600000BFA068A8B1FFF75FFC054609E0FFF7DC
:101970005BFC401B41F28831884202D9032077E6A4
:1019800026E0384868300068C0F340000028EED0F8
:1019900013E0FFF749FC054608E0FFF745FC401B54
:1019A00041F28831884201D9032061E62D48683030
:1019B0000068C0F340000028EFD1012F07D129486B
:1019C0003830006820F0805026493831086000BF68
:1019D000A069002845D02348006800F00C000828C2
:1019E0005DD0A069022845D100201F490866FFF795
:1019F0001BFC054606E0FFF717FC401B022801D937
:101A0000032035E6174808380068C0F34060002816
:101A1000F1D1D4E907010843616A40EA811101224A
:101A2000A06AC2EB500041EA00412C20005D41EA6F
:101A300000600C49091F086001200B490866FFF788
:101A4000F3FB054606E0FFF7EFFB401B022801D938
:101A500003200DE6034808380068C0F34060002802
:101A6000F1D049E00838024000004742800E47426A
:101A700000700040002021490866FFF7D5FB0546AD
:101A800006E0FFF7D1FB401B022801D90320EFE558
:101A90001B480068C0F340600028F2D12CE0A06928
:101AA000012800D1E4E51648001D0668A069012858
:101AB00020D006F48001E06981421BD106F03F018D
:101AC000206A814216D147F6C0703040616AB0EB9F
:101AD000811F0FD106F440310122A06AC2EB5000F1
:101AE000B1EB004F06D106F070612C20005DB1EB28
:101AF000006F01D00120BBE50020B9E5000047429E
:101B00000038024070B504462546681EB0F1807F5B
:101B100001D301200FE0681E4FF0E02148610F2142
:101B20004FF0FF3001F080FA00204FF0E021886193
:101B300007200861002070BDF8B504460E46174620
:101B400094F83E00202836D106B10FB90120F8BD27
:101B500000BF94F83C00012801D10220F7E70120E2
:101B600084F83C0000BF20633A463146204601F02D
:101B7000A9F90546EDB9206B012819D100BF002055
:101B8000009020680068009020684068009000BFC6
:101B900000BF00BF00BF21680C3151E8001F41F0B9
:101BA000100021680C3141E80002002AF3D100E066
:101BB00001252846CBE70220C9E7000070B504469E
:101BC0000D460C492068884203D10B4801F0E8FC1F
:101BD0000EE00A492068884203D1094801F0E0FC80
:101BE00006E008492068884202D1074801F0D8FC85
:101BF00070BD000000100140F801002000440040CA
:101C000048020020004C00409802002070B50446B5
:101C1000002520684069C0F3C01594F83D002128D4
:101C200017D1B5B100BF00BF2168143151E8001FC2
:101C300021F080002168143141E80002002AF3D12C
:101C400000BF606B10B1606BFEF7C0FE204600F075
:101C500094FF20684069C0F3801594F83E00222864
:101C600017D1B5B100BF00BF2168143151E8001F82
:101C700021F040002168143141E80002002AF3D12C
:101C800000BFA06B10B1A06BFEF7A0FE204600F0D5
:101C90002EFF002070BD000038B5044600252B49FA
:101CA0002068884201D12A4D0AE02A4920688842EA
:101CB00001D1294D04E029492068884200D1284DEE
:101CC000206C00F0020050B100BF0020009020689E
:101CD0000068009020684068009000BF00BF206C42
:101CE00000F0040050B100BF0020009020680068A0
:101CF000009020684068009000BF00BF2068006826
:101D0000C0F3C00050B100BF002000902068006800
:101D1000009020684068009000BF00BF2068006805
:101D2000C0F3400050B100BF002000902068006860
:101D3000009020684068009000BF00BF25B1EA8B8A
:101D4000A9696868FFF7F8FE38BD0000001001407F
:101D5000F80100200044004048020020004C0040F0
:101D6000980200202DE9F84F044620680568206895
:101D7000C668206847694FF00009CA4605F00F0998
:101D8000B9F1000F0AD105F0200038B106F02000AB
:101D900020B1204600F004FFBDE8F88FB9F1000F34
:101DA0007CD007F0010018B906F49070002875D0B7
:101DB00005F0010030B106F4807018B1206C40F0DD
:101DC0000100206405F0040030B107F0010018B1F3
:101DD000206C40F00200206405F0020030B107F0F2
:101DE000010018B1206C40F00400206405F00800E8
:101DF00048B106F0200010B907F0010018B1206CBE
:101E000040F008002064206C002846D005F0200037
:101E100028B106F0200010B1204600F0C1FE206875
:101E20004069C0F3801A206C00F0080010B9BAF1C4
:101E3000000F2DD0204600F05AFE2068406900F0C7
:101E40004000402820D100BF00BF2168143151E874
:101E5000001F21F040002168143141E80002002AEF
:101E6000F3D100BFA06B50B17548A16B0865A06BA2
:101E7000FEF702FE88B1A06B016D88470DE0204699
:101E8000FFF70AFF09E009E02046FFF705FF04E03D
:101E90002046FFF701FF002020647DE7206B01282A
:101EA00076D105F01000002872D006F0100000284E
:101EB000FAD000BF002000902068006800902068E1
:101EC0004068009000BF00BF2068406900F04000FB
:101ED00040285ED1A06B006840681FFA80F8B8F116
:101EE000000F54D0A08D404551DDA4F82E80A06B8A
:101EF000C069B0F5807F43D000BF00BF21680C31BE
:101F000051E8001F21F4807021680C3141E8000283
:101F1000002AF3D100BF00BF00BF2168143151E88F
:101F2000001F21F001002168143141E80002002A5D
:101F3000F3D100BF00BF00BF2168143151E8001F7A
:101F400021F040002168143141E80002002AF3D159
:101F500000BF202084F83E000020206300BF00BFA7
:101F600021680C3151E8001F21F0100021680C316C
:101F700041E80002002AF3D100BFA06BFEF726FD66
:101F8000A08DE28D801A81B22046FFF717FE03E78D
:101F900040E0A08DE18D401A1FFA80F8E08DC0B3BB
:101FA000B8F1000F35D000BF00BF21680C3151E8F7
:101FB000001F21F4907021680C3141E80002002AD2
:101FC000F3D100BF00BF00BF2168143151E8001FEA
:101FD00021F001002168143141E80002002AF3D108
:101FE00000BF202084F83E000020206300BF00BF17
:101FF00021680C3151E8001F21F0100021680C31DC
:1020000041E80002002AF3D100BF41462046FFF715
:10201000D5FDC1E605F0800030B106F0800018B1B2
:10202000204600F0B7FFB7E605F0400030B106F0FB
:10203000400018B1204600F090FDADE600BFABE6D1
:102040005529000810B504460CB9012010BDA0693F
:1020500000B100E000BF94F83D0028B9002084F8EA
:102060003C00204600F028F8242084F83D00206839
:10207000C06820F400502168C860204600F00CFEC3
:102080002068006920F49040216808612068406958
:1020900020F02A00216848612068C06840F40050A0
:1020A0002168C86000202064202084F83D0084F866
:1020B0003E000020CAE7000010B586B00446142197
:1020C00001A8FEF7D9F9C149206888427AD100BF3A
:1020D00000200090BE48006840F40020BC49086021
:1020E0000846006800F40020009000BF00BF00BF59
:1020F00000200090B6481038006840F00100B44954
:10210000103908600846006800F00100009000BF28
:1021100000BF0320019002200290002003900320C2
:1021200004900820059001A9AA48FEF773FFAA4869
:10213000AA490860400548600021A8488160C16044
:102140004FF480610161002141618161C1614FF4FF
:102150004031016200214162FEF7C2FD08B1FEF785
:10216000D9FA00BF9D48A063846300BF9A4830300D
:102170009B4908604FF000604860402198488160AA
:102180000021C1604FF480610161002141618161E2
:10219000C1614FF40031016200214162FEF7A0FDF0
:1021A00008B1FEF7B7FA00BF8D486063846300BFD3
:1021B000002201213420FFF7C5F83420FFF7B2F8E0
:1021C00002E1FFE78749206888427ED100BF0020F6
:1021D00000907F48001D006840F010007C49091DF8
:1021E00008600846006800F01000009000BF00BFC3
:1021F00000BF0020009076481038006840F00100D1
:102200007349103908600846006800F0010000902A
:1022100000BF00BF4FF4C060019002200290002078
:102220000390032004900720059001A96948FEF758
:10223000F1FE6D486D4908604FF000604860002174
:102240006A488160C1604FF4806101610021416191
:102250008161C1614FF48031016200214162FEF76A
:102260003FFD08B1FEF756FA00BF6048A0638463E3
:1022700000BF5D4878305E4908604FF000604860FC
:1022800040215B4881600021C1604FF480610161A1
:10229000002141618161C1614FF4803101620021FF
:1022A0004162FEF71DFD08B1FEF734FA00BF504849
:1022B0006063846300BF002201212520FFF742F8FC
:1022C0002520FFF72FF87FE0FFE74A492068884282
:1022D0007AD100BF002000903D48006840F40030F3
:1022E0003B4908600846006800F40030009000BFD9
:1022F00000BF00BF0020009035481038006840F053
:1023000008003349103908600846006800F00800EA
:10231000009000BF00BF60200190022002900020CA
:102320000390032004900720059001A93248FEF78E
:1023300071FE29484830314908604FF0006048601C
:1023400000212E488160C1604FF48061016100214D
:1023500041618161C1614FF44031016200214162FC
:10236000FEF7BEFC08B1FEF7D5F900BF2348A06315
:10237000846300BF18486030214908604FF0006056
:10238000486040211E4881600021C1604FF4806197
:102390000161002141618161C1614FF4003101623D
:1023A00000214162FEF79CFC08B1FEF7B3F900BFC3
:1023B00013486063846300BF002201212620FEF7DA
:1023C000C1FF2620FEF7AEFF06B010BD004C004056
:1023D000403802400000024040600240E803002014
:1023E000480400200010014040640240A80400207E
:1023F0000805002000440040000C02406805002051
:10240000C805002070477047F7B50446154694F894
:102410003D00202846D1019800B10DB90120FEBD34
:1024200000BF94F83C00012801D10220F7E7012009
:1024300084F83C0000BF01982062A584E584002058
:102440002064212084F83D001748616BC863174859
:10245000616B08641648616BC8640020616B086595
:1024600001AE23681A1D31682B46606BFEF7AEFC87
:102470006FF040002168086000BF002084F83C0035
:1024800000BF00BF00BF2168143151E8001F41F0B8
:1024900080002168143141E80002002AF3D100BF16
:1024A0000020BCE70220BAE7892A0008E12A0008D8
:1024B0006929000810B504460B492068884203D1F9
:1024C0000A4801F007F90EE009492068884203D163
:1024D000084801F0FFF806E007492068884202D169
:1024E000044801F0F7F810BD00100140F801002089
:1024F0000044004048020020004C0040704700BFEC
:10250000FEE7000008B500BF0020009026480068E4
:1025100040F40010244908600846006800F40010E8
:10252000009000BF00BF00BF002000900846006878
:1025300040F4800008600846006800F480000090C5
:1025400000BF00BF002211460D20FEF7FBFE0D204C
:10255000FEF7E8FE002211460F20FEF7F3FE0F20E3
:10256000FEF7E0FE002211461020FEF7EBFE1020E1
:10257000FEF7D8FE002211461120FEF7E3FE1120DF
:10258000FEF7D0FE002211463A20FEF7DBFE3A208D
:10259000FEF7C8FE002211464620FEF7D3FE462075
:1025A000FEF7C0FE08BD00003038024000B587B01D
:1025B000142102A8FDF760FF00BF002001906E48C3
:1025C000006840F010006C4908600846006800F0A0
:1025D0001000019000BF00BF00BF0020019008461E
:1025E000006840F0800008600846006800F0800045
:1025F000019000BF00BF00BF0020019008460068A6
:1026000040F0010008600846006800F001000190F9
:1026100000BF00BF00BF002001900846006840F0E6
:10262000020008600846006800F00200019000BF48
:1026300000BF00BF002001900846006840F008007D
:1026400008600846006800F00800019000BF00BF65
:1026500000BF002001900846006840F004000860B8
:102660000846006800F00400019000BF00BF00228F
:102670007F214248FEF7D2FD012204214048FEF7A7
:10268000CDFD01224FF4E0613C48FEF7C7FD012279
:102690004FF470413B48FEF7C1FD01224FF47F41EA
:1026A0003948FEF7BBFD01224FF470713748FEF741
:1026B000B5FD002210213448FEF7B0FD00224FF492
:1026C00040713048FEF7AAFD6F2002900120039070
:1026D000002004900320059002A92848FEF79AFCE8
:1026E0004FF4E260029001200390002004900590D6
:1026F00002A92248FEF78EFC0420029001200390DC
:10270000002004900320059002A91D48FEF782FCDA
:102710004FF4704002900120039000200490059037
:1027200002A91848FEF776FC4FF6107002900120BF
:10273000039000200490059002A91348FEF76AFC5C
:102740004FF47070029001200390002004900590D7
:1027500002A90E48FEF75EFC4FF440700290012083
:102760000390002004900320059002A90548FEF77D
:1027700051FC07B000BD000030380240001002409C
:102780000000024000040240000C02400008024029
:1027900010B50B480B4908604FF4E1304860002148
:1027A00008488160C16001610C21416100218161A3
:1027B000C161FFF747FC08B1FDF7ACFF10BD000099
:1027C000004C00401C03002010B50B480B4908606A
:1027D0004FF4E1304860002108488160C160016128
:1027E0000C21416100218161C161FFF72BFC08B11F
:1027F000FDF790FF10BD00000010014060030020B5
:1028000010B50B480B4908604FF416504860002182
:1028100008488160C16001610C2141610021816132
:10282000C161FFF70FFC08B1FDF774FF10BD000098
:1028300000440040A403002000BFFEE700BFFEE705
:102840007047704710B5094841690120884708481A
:102850000121426C904707480121426C904706488D
:102860000121426C9047FEF7E5FC10BD8C00002072
:10287000F8010020480200209802002000B593B023
:10288000302107A8FDF7F8FD142102A8FDF7F4FD9B
:1028900000BF002001902448006840F08050224989
:1028A00008600846006800F08050019000BF00BF3B
:1028B00000BF002001901D48006840F480401B4983
:1028C00008600846006800F48040019000BF00BF27
:1028D000012007900004089002200D9041050E9100
:1028E00004210F91A821109102211191042112912C
:1028F00007A8FEF7B9FE08B1FDF70CFF0F20029004
:1029000002200390002004904FF4A05005904FF453
:1029100080500690052102A8FEF766FD08B1FDF77C
:10292000F9FE13B000BD00004038024000700040C6
:102930000348006840F470000149086070470000D7
:1029400088ED00E010B50248FFF70CFA10BD00005A
:102950001C03002070B50546AC6B0020E085E084C8
:102960002046FFF799F970BD70B506460025B46B97
:1029700020684069C0F3C01594F83D00212805D1B6
:1029800025B10020E084204600F0F7F82068406977
:10299000C0F3801594F83E00222805D125B100200F
:1029A000E085204600F0A3F8206C40F01000206481
:1029B0002046FFF771F970BD70B50546AC6B28680D
:1029C000006800F48070002842D1E08500BF00BF9D
:1029D00021680C3151E8001F21F4807021680C310E
:1029E00041E80002002AF3D100BF00BF00BF216808
:1029F000143151E8001F21F001002168143141E831
:102A00000002002AF3D100BF00BF00BF21681431CB
:102A100051E8001F21F040002168143141E8000214
:102A2000002AF3D100BF202084F83E00206B01284B
:102A30000ED100BF00BF21680C3151E8001F21F00A
:102A4000100021680C3141E80002002AF3D100BFD8
:102A5000206B012804D1A18D2046FFF7AFF802E0DA
:102A60002046FFF7CFFC70BD70B50546AC6B206B00
:102A7000012805D1A08D41082046FFF79FF802E00C
:102A80002046FFF7C0FC70BD70B50546AC6B2868EA
:102A9000006800F48070F8B90020E08400BF00BF37
:102AA0002168143151E8001F21F0800021681431A1
:102AB00041E80002002AF3D100BF00BF00BF216837
:102AC0000C3151E8001F41F0400021680C3141E811
:102AD0000002002AF3D102E02046FFF7EBFC70BDB4
:102AE00070B50446A56B2846FFF708FD70BD00BF12
:102AF00000BF02680C3252E8002F22F49071026885
:102B00000C3242E80013002BF3D100BF00BF00BF1E
:102B10000268143252E8002F22F0010102681432D8
:102B200042E80013002BF3D100BF016B01290ED145
:102B300000BF00BF02680C3252E8002F22F01001E3
:102B400002680C3242E80013002BF3D100BF2021B1
:102B500080F83E1000210163704710B504462068DC
:102B6000C06820F040002168C860202084F83D0043
:102B70002046FFF79FFC002010BD00BF00BF026889
:102B80000C3252E8002F22F0C00102680C3242E8F9
:102B90000013002BF3D100BF202180F83D107047B7
:102BA000F8B5044694F83E00222873D1A068B0F529
:102BB000805F0CD1206950B90025A66A2068406862
:102BC000C0F308003080A06A801CA06215E0A56AEE
:102BD0000026A068B0F5805F03D0A06828B92069FE
:102BE00018B920684068287004E02068406800F048
:102BF0007F002870A06A401CA062E08D401E80B259
:102C0000E085002844D12068C06820F020002168B9
:102C1000C8602068C06820F480702168C86020689F
:102C2000406920F0010021684861202084F83E00BE
:102C3000206B012826D10020206300BF00BF21683F
:102C40000C3151E8001F21F0100021680C3141E8DF
:102C50000002002AF3D100BF2068006800F01000D5
:102C600010280AD100BF0020009020680068009062
:102C700020684068009000BF00BFA18D2046FEF78D
:102C80009DFF02E02046FFF7BDFB0020F8BD01E0FC
:102C90000020FBE70220F9E72DE9F84F0446206801
:102CA000006920F44050E168084321680861216907
:102CB000A068084361690843E169084300902068FF
:102CC000C06849F20C618843009908432168C860D4
:102CD0002068406920F44070A16908432168486178
:102CE00076492068884203D075492068884203D11C
:102CF000FEF752FC814602E0FEF73EFC8146E069A9
:102D0000B0F5004F6CD102206168A0FB0150034672
:102D10001920A9FB007001462A463846FDF7C4FA7F
:102D20006421B0FBF1F04FEA001A02206168A0FBB9
:102D300001510B461920A9FB00712A463846FDF7C0
:102D4000B3FA834602206168A0FB015003461920B4
:102D5000A9FB00712A463846FDF7A6FA6421B0FBAC
:102D6000F1F000EBC00101EB0010ABEB8000322171
:102D700001EBC0006421B0FBF1F000F0F8000AEBB9
:102D8000400A02206168A0FB015003461920A9FBFC
:102D9000007001462A463846FDF786FA834602202F
:102DA0006168A0FB015003461920A9FB00712A4667
:102DB0003846FDF779FA6421B0FBF1F000EBC00171
:102DC00001EB0010ABEB8000322101EBC00064216D
:102DD000B0FBF1F000F007005044216888606AE021
:102DE00004206168A0FB015003461920A9FB007074
:102DF00001462A463846FDF757FA824604206168A4
:102E0000A0FB015003461920A9FB007001462A4689
:102E10003846FDF749FA6421B0FBF1F000EBC00140
:102E200001EB0010AAEB8000322101EB00106421BD
:102E3000B0FBF1F000F0F00A04206168A0FB017023
:102E400003461920A9FB00513A462846FDF72CFA03
:102E50006421B0FBF1F00AEB001A04206168A0FBCA
:102E600001510B461920A9FB00712A463846FDF78F
:102E70001BFA834604206168A0FB01500346192019
:102E8000A9FB007001462A463846FDF70DFA642179
:102E9000B0FBF1F000EBC00101EB0010ABEB8000E8
:102EA000322101EB00106421B0FBF1F000F00F00C3
:102EB000504421688860BDE8F88F00000010014090
:102EC0000014014077B581B0044615460298A0620F
:102ED000A58500202064222084F83E002A48A16BAA
:102EE000C8632A48A16B08642948A16BC864002004
:102EF000A16B086502AE32682368191D2B46A06BD2
:102F0000FDF764FF00BF002000902068006800907B
:102F100020684068009000BF00BF00BF002084F818
:102F20003C0000BF206970B100BF00BF21680C31B8
:102F300051E8001F41F4807021680C3141E8000223
:102F4000002AF3D100BF00BF00BF2168143151E84F
:102F5000001F41F001002168143141E80002002AFD
:102F6000F3D100BF00BF00BF2168143151E8001F3A
:102F700041F040002168143141E80002002AF3D1F9
:102F800000BF002004B070BDB9290008692A0008FC
:102F900069290008014691F83D00212828D1886858
:102FA000B0F5805F0BD1086948B90A6A1088C0F390
:102FB00008000B685860086A801C086205E00B6A0C
:102FC000581C086218780B685860C88C401E80B284
:102FD000C88458B90868C06820F080000B68D860C1
:102FE0000868C06840F040000B68D8600020704757
:102FF0000220FCE710B50248FEF7B4FE10BD000049
:103000006003002010B50248FEF7ACFE10BD0000C2
:10301000A403002000BFFEE702480068C0F30220BE
:10302000704700000CED00E010B5002804DB0A0733
:10303000130E054A135406E00A07140E034A00F063
:103040000F031B1FD45410BD00E400E018ED00E096
:1030500010B50D49086A80470C48416B88470C48F9
:10306000416B88470B48416B88470B49086880478C
:103070000A480B49C268082090470A4948688047B7
:1030800009490868804710BD7C010020F801002034
:103090004802002098020020700100208C000020CF
:1030A0002C00002010030020A800002010B50349C8
:1030B0000869804700F00EFC10BD00008C00002065
:1030C000034A12689080024A1268916070470000BB
:1030D000A400002010B51A480068806800B910BD2F
:1030E000002425E016480068806804EB440110F8CD
:1030F0002100D0B1002012490968896804EB44021C
:1031000001F822000E480068806804EB440100EBDF
:103110008100806800B909E009490968896804EB01
:10312000440201EB82018868804700BF601C84B2C2
:10313000034800688088A042D4DC00BFCFE70000CD
:10314000A400002010B501462F4A12681288521CB4
:103150002D4B1B681A802C4A12681288B2F57A7FB0
:1031600006DB294A12685288521C274B1B685A807A
:10317000254A1268926802B910BD00203CE0224A3C
:103180001268926800EB400302EB830252888AB314
:103190001D4A1268926800EB400302EB83025288DA
:1031A000521E194B1B689B6800EB400403EB840321
:1031B0005A80154A1268926800EB400302EB8302C2
:1031C0005288BAB90122104B1B689B6800EB40047F
:1031D00003F824200C4A1268926800EB400302EBCB
:1031E00083029288084B1B689B6800EB400403EB4A
:1031F00084035A80421C90B2034A12689288824229
:10320000BDDC00BFB8E70000A40000200148007842
:10321000704700006C01002010B5002007490870BD
:10322000002210210648FDF7F9FF00221021054871
:10323000FDF7F4FF002000F007F810BD6C0100203E
:1032400000100240000C02402DE9F04180460025AC
:10325000102D01DBBDE8F0812C4805702C48465D3F
:103260002C48475D002431E046FA04F000F00100EC
:1032700048B1294A32F81410284A52F82400012291
:10328000FDF7CCFF08E0244A32F81410234A52F824
:1032900024000022FDF7C2FF47FA04F000F001000D
:1032A00048B11F4A32F814101E4A52F82400012275
:1032B000FDF7B4FF08E01A4A32F81410194A52F820
:1032C00024000022FDF7AAFF601CC4B2042CCBDB53
:1032D000002416E0AC4209D1134A32F81410134A04
:1032E00052F824000022FDF799FF08E00E4A32F858
:1032F00014100E4A52F824000122FDF78FFF601CC3
:10330000C4B2102CE6DB00BFA4E700006C01002073
:103310004C0100205C010020CC000020BC000020FB
:10332000E4000020D40000202C010020EC0000204C
:1033300010B586B00446002001900B2003900120B8
:1033400004900220059000200090694601A8FDF736
:103350009BFD06B010BD000010B5064948688047C7
:1033600010220549054800F055F802494868804791
:1033700010BD0000B00000208C01002000000E08ED
:1033800070B510220E49A1F11000FDF704F8A8B1A4
:103390000C494868804772B6102209490A4800F073
:1033A0005DF804462CB906481038054610352ECD78
:1033B0002EC062B603494868804700BF70BD000058
:1033C0008C010020B000002000000E0810B5FFF7AF
:1033D000D7FF10BD10B5FFF7BFFF0C480068808B0A
:1033E000B0F57A7F03DD282108480068818307480B
:1033F0000068C08B102803DD102104480068C183D9
:103400000348044610341ECC1EC010BDAC01002081
:103410007C0100202DE9F84103460C4621461D465B
:10342000960802F00307002005E055F820C0C1F817
:1034300000C0091D401CB042F7D36FB155F82600FB
:103440000090EC46002004E01CF8008001F80080A9
:10345000401CB842F8D300BFBDE8F8812DE9FC5FFD
:1034600007468846154600244646A808019005F000
:103470000309BA46FDF7B4FD3846FFF759FF044685
:1034800024B1FDF757FD2046BDE8FC9F4FF0000B2F
:103490000FE0D6F800C06246002351460220FDF737
:1034A00053FD044604B107E00AF1040A361D0BF18E
:1034B000010B01988345ECD300BFB4B9B9F1000FFB
:1034C00013D04FF0FF300090EB46002003E0315C5A
:1034D0000BF80010401C4845F9D300235146022048
:1034E000009AFDF731FD044600BFFDF723FD20469D
:1034F000CAE770477047000010B5002409E0322089
:1035000000F0EBF84FF480710348FDF77DFE601C7E
:10351000C4B2142CF3DB10BD0010024010B54FF400
:1035200080710248FDF770FE10BD000000100240DF
:103530002DE9F0410446884617460020A074A08B70
:10354000B84200DAA78B3A4641466069FCF74FFF64
:103550003A4661696068FEF757FFFDF765FE05466C
:1035600008E0FDF761FE0646701BC82802D901205D
:10357000A07402E0A07C0028F3D000BFBDE8F08179
:1035800010B5044660680068C06840F010006168CB
:103590000968C860E28BA1696068FEF7CDFA10BDCA
:1035A00070B504466068FEF731FBE08BE16809689E
:1035B0004968401A86B206B970BD002506E0A269C6
:1035C0005119206800F04BF9681C85B2B542F6DB52
:1035D000204600F041F8E28BA1696068FEF7ACFA82
:1035E00000BFE9E770B50446A08C618C884227DAF9
:1035F000206880892084204600F034F8208CE18BFC
:1036000088421DDC208CD8B1208C40F6B83188422D
:1036100003D9206800F0D7F812E0002506E0094A37
:103620005119206800F0D7F8681C85B2208CA84298
:10363000F5DCA06C20B1218C22460248A36C98478F
:1036400070BD0000C06F002090F82620012A02D132
:10365000428C0A4442847047012180F826100021E0
:1036600041847047002180F8261041847047000093
:103670002DE9F04104460F4616461448844204D111
:10368000012204211248FDF7C9FDA08B96FBF0F042
:103690001FFA80F8002507E0A28B02FB0571204687
:1036A000FFF746FF681C85B24545F5DBA08B00FBA4
:1036B000156086B20EB9BDE8F081A08B00FB0571E4
:1036C00032462046FFF734FF00BFF4E7980200209F
:1036D0000000024001218174704710B50446204665
:1036E000FDF7BEFB10BD2DE9F04704460D4691469F
:1036F000052D01DABDE8F0872078AA2802D160788C
:10370000552800D0F6E7681E215CA81E205C41EA1F
:103710000028A81E81B2204600F037F80646301275
:1037200040EA062086B2464500D0E3E7A778032F9B
:1037300000D100BF00BFDDE701480249886470473F
:10374000E7360008F8010020FDF780FDFFF796F846
:10375000FEF72CFFFEF7D6FEFFF71AF8FFF734F856
:10376000FFF74EF8FFF774FC01E0FFF79FFCFCE762
:1037700070B503460C4603E014F8015B03F8015BE7
:10378000151EA2F10102F7D170BD30B502464FF609
:10379000FF7012E012F8014B6040002308E000F0D7
:1037A000010424B14AF2010484EA600000E0401000
:1037B0001C465D1CABB2082CF1DB0C1EA1F101050F
:1037C000A9B2E7D130BD00B9704700214161016164
:1037D000C16000BFF8E770B504460D460CB9002083
:1037E00070BDE06808B90020FAE745B1D4E90006E9
:1037F000236903FB060132462846FFF7B9FF20691B
:10380000401CA16890FBF1F201FB12002061E0680E
:10381000401EE0600120E3E770B504460D460CB998
:10382000002070BDD4E90210884201D10020F8E7E1
:1038300045B1D4E90016636903FB061032462946F8
:10384000FFF796FF6069401CA16890FBF1F201FB55
:1038500012006061E068401CE0600120E1E770B5A3
:1038600004460D460CB9002070BDD4E90210884210
:1038700004DA29462046FFF7CFFFF5E745B1D4E942
:103880000016636903FB061032462946FFF770FFF6
:103890006069401CA16890FBF1F201FB12006061BD
:1038A0002069401CA16890FBF1F201FB120020612D
:1038B0000120D9E770477047704770477047000094
:1038C00010B502494868804710BD0000A8000020DC
:1038D0007047000010B50548C16C88470448C16CAA
:1038E00088470448C16C884710BD0000F8010020DB
:1038F00048020020980200204FF04070E1EE100ACC
:1039000070470006101600061016000000000000A8
:10391000000001020304060708090000000001027C
:103920000304000056312E300000000031313532E2
:103930003030000031393230300000003537363059
:1039400030000000393630300000000034383030AC
:1039500000000000434F4D3100000000434F4D3246
:1039600000000000434F4D3300000000434F4D3432
:103970000000000094390008000000201C03000033
:10398000C40100081C3B00081C030020BC88000088
:103990002002000841321042011324F4132439009C
:1039A0000A120856302E3030312E303A012813D505
:1039B0003822081203320A3AB70C120732323AD1CF
:1039C0000C120B32643AB50C120D32C83ABB0C1211
:1039D000111AF43D3AC10C121323E8033AB90C1240
:1039E0001723D0073ABD0CA113C1301B08D504130F
:1039F000453123088C1420F93414081D351B08F5B3
:103A0000081AF3041AB01411AC100240041A40133F
:103A100012081A04D159144A04042A02B629051AB4
:103A20000810A9040A1D0C04594079041944128095
:103A300022402905197E396D29585910100E0D0E96
:103A40000F0C0B0A090807040302011B06051016D8
:103A500008090A0B0C1F010203040506E6211319CD
:103A6000321B0849041A0D04012013D5331B0881A9
:103A7000041A59041ACD04137C01142048061A2094
:103A8000CE11F3B80B0A1412180B14B81D181AB083
:103A90004C136003142008051C20A804BE19C7138A
:103AA000702914202835FC20B80B5E511381351481
:103AB0000871361B08D5041AA10C1A4908411AE5E9
:103AC0000C1AC8501AA4501AC8501A680429501366
:103AD000E0400C1020984C502B980220091C501AE2
:103AE000E0501A1C501A489C1AE80829501B5058DC
:103AF000B00A3464A01354391B085C041A64041A15
:103B00006C041A4C041A44041A34041A3C041A2C87
:0C3B100004811339371B081074000000FA
:040000050800018965
:00000001FF

View File

@@ -1,7 +0,0 @@
#include "app_com.h"

View File

@@ -1,28 +0,0 @@
#ifndef _APP_COM_H_
#define _APP_COM_H_
#include "main.h"
#include "app_leakage.h"
#include "bsp_uart.h"
#define APP_COM_NUM (4)
typedef struct
{
u8 baudrate; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}app_com_flash_data_t;
typedef struct
{
app_com_flash_data_t flash_data; /*flash<73><68><EFBFBD><EFBFBD>*/
u16 device_num; /*<2A>󶨵<EFBFBD><F3B6A8B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
u8 device_index[APP_LEAKAGE_SUB_DEVICE_NUM]; /*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
bsp_uart_t *uart; /*<2A>󶨵<EFBFBD><F3B6A8B5>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>*/
}app_com_class_t;
typedef struct
{
app_com_class_t com_class[APP_COM_NUM];
}app_com_t;
#endif

View File

@@ -1,100 +0,0 @@
#include "app_leakage.h"
#include <string.h>
app_leakage_t leakage =
{
};
app_leakage_t *p_leakage = &leakage;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A3AC>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ֵ<EFBFBD>һ<EFBFBD><D2BB>*/
static void app_leakage_region_classify(void)
{
u16 i,j;
u8 add_region_flag;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
p_leakage->region_num = 0;
p_leakage->sub_device_num = 0;
memset(p_leakage->region_data,0,sizeof(p_leakage->region_data));
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ*/
for(i=0;i<APP_LEAKAGE_SUB_DEVICE_NUM;i++)
{
add_region_flag = 1; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A>ʹ<E8B1B8><CAB9>*/
if(ENABLE == p_leakage->sub_device_data[i].flash_data.state)
{
p_leakage->sub_device_num++;/*<2A><>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>++*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
for(j=0;j<APP_LEAKAGE_SUB_DEVICE_NUM;j++)
{
if(0 == memcmp(p_leakage->region_data[j].name,p_leakage->sub_device_data[i].flash_data.region_name, APP_LEAKAGE_STRING_NANE_LEN))/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ*/
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸*/
p_leakage->region_data[j].sub_device_index[p_leakage->region_data[j].leakage_num] = i;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
p_leakage->region_data[j].leakage_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>++*/
add_region_flag = 0;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
break;
}
}
/*û<><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>*/
if(add_region_flag)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
memcpy(p_leakage->region_data[p_leakage->region_num].name,p_leakage->sub_device_data[i].flash_data.region_name, APP_LEAKAGE_STRING_NANE_LEN);
p_leakage->region_data[p_leakage->region_num].sub_device_index[p_leakage->region_data[p_leakage->region_num].leakage_num] = i;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
p_leakage->region_data[p_leakage->region_num].leakage_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>++*/
p_leakage->region_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>++*/
}
}
}
}
/*<2A>쳣״̬<D7B4><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>*/
void app_leakage_task(void)
{
u16 i,j,k,sub_device_index;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
for(i=0;i<p_leakage->region_num;i++)
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸*/
p_leakage->region_data[i].leakage_num = 0;
p_leakage->region_data[i].open_num = 0;
p_leakage->region_data[i].time_out_num = 0;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸*/
for(j=0;j<p_leakage->region_data[i].leakage_num;j++)
{
/*<2A><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>*/
sub_device_index = p_leakage->region_data[i].sub_device_index[j];
/*<2A><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>*/
for(k=0;k<APP_LEAKAGE_SUB_DEVICE_CH_NUM;k++)
{
/*ͨѶ<CDA8><D1B6>ʱ*/
if(p_leakage->sub_device_data[sub_device_index].ch_data[k].state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT)
{
p_leakage->region_data[i].time_out_num++;
break;
}
/*<2A>ϴ<EFBFBD>*/
else if(p_leakage->sub_device_data[sub_device_index].ch_data[k].state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN)
{
p_leakage->region_data[i].open_num++;
break;
}
/*©Һ*/
else if(p_leakage->sub_device_data[sub_device_index].ch_data[k].state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
{
p_leakage->region_data[i].leakage_num++;
break;
}
}
}
}
}

View File

@@ -1,38 +0,0 @@
#include "bsp_Led.h"
#include "app_timer.h"
#define LED1_ON HAL_GPIO_WritePin (LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET)
#define LED1_OFF HAL_GPIO_WritePin (LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET)
#define LED1_TOGGLE HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin)
#define LED2_ON HAL_GPIO_WritePin (LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET)
#define LED2_OFF HAL_GPIO_WritePin (LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET)
#define LED2_TOGGLE HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin)
#define LED3_ON HAL_GPIO_WritePin (LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET)
#define LED3_OFF HAL_GPIO_WritePin (LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET)
#define LED3_TOGGLE HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin)
static void bsp_led_init(void);
static void bsp_led_task(void);
bsp_led_t led =
{
.init = bsp_led_init,
.task = bsp_led_task,
};
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void bsp_led_init(void)
{
for(u8 i = 0;i < 20;i++)
{
delay_ms(50);
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
}
}
static void bsp_led_task(void)
{
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
}

View File

@@ -1,604 +0,0 @@
#include "GUI_tjc_hmi.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stddef.h>
#include "proto_modbus_lib.h"
#include "bsp_Flash.h" // <20><><EFBFBD><EFBFBD>Flash<73><68><EFBFBD><EFBFBD>
#include "bsp_uart.h"
#include "app_leakage.h"
/*<2A><><EFBFBD>ڷ<EFBFBD><DAB7>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>*/
#define HMI_TX_BUFFER_NUM (2048)
/*<2A>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define GUI_TJC_HMI_TEXT_BUFFER_NUM (256)
/*֡ͷ*/
#define HMI_PROTO_FRAME_HEADER1 (0xAA)
#define HMI_PROTO_FRAME_HEADER2 (0x55)
/*<2A><><EFBFBD><EFBFBD>*/
#define HMI_PROTO_CMD_GET (0x03) /*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define HMI_PROTO_CMD_SET (0x10) /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ*/
/*<2A><><EFBFBD><EFBFBD>*/
#define HMI_PROTO_GUI_MAIN (0x10)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define HMI_PROTO_GUI_CURR_ALARM (0x11)/*ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define HMI_PROTO_GUI_DETAIL_MAIN (0x12)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F>ϸ<EFBFBD><CFB8>Ϣ */
#define HMI_PROTO_GUI_LOGIN (0x13)/*<2A><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD> */
#define HMI_PROTO_GUI_HISTORY_ALARM (0x14)/*<2A><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define HMI_PROTO_GUI_TCP_CONFIG (0x15)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD> */
#define HMI_PROTO_GUI_DEVICE_CONFIG (0x16)/*<2A><EFBFBD><E8B1B8><EFBFBD>ý<EFBFBD><C3BD><EFBFBD> */
#define HMI_PROTO_GUI_HELP (0x17)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define HMI_PROTO_ASCII_RX_DELINITER (0xAA)/*<2A><><EFBFBD>շָ<D5B7><D6B8><EFBFBD>*/
#define HMI_PROTO_ASCII_TX_DELINITER (0xFF)/*<2A><><EFBFBD>ͷָ<CDB7><D6B8><EFBFBD>*/
#define HMI_PROTO_ASCII_TX_DELINITER_NUM (3)/*<2A><><EFBFBD>ͷָ<CDB7><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void gui_tjc_hmi_init(void);
static void gui_tjc_hmi_communication_data_analysis(u8 *p_data, u16 len, void *rx_uart);
/*<2A><><EFBFBD>ڷ<EFBFBD><DAB7>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>*/
static u8 hmi_tx_buffer[HMI_TX_BUFFER_NUM];
/*<2A>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static char gui_tjc_hmi_text_buffer[GUI_TJC_HMI_TEXT_BUFFER_NUM];
/*<2A>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD> <20>˿ں<CBBF>*/
static char *hmi_proto_string_com[] =
{
"COM1",
"COM2",
"COM3",
"COM4"
};
/*<2A>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static char *hmi_proto_string_baudrate[] =
{
"4800",
"9600",
"19200",
"57600",
"115200",
};
static bsp_uart_t * p_rx_uart = NULL;
gui_tjc_hmi_t tjc_hmi =
{
.init = gui_tjc_hmi_init,
};
gui_tjc_hmi_t *p_tjc_hmi = &tjc_hmi;
/*<2A><>ĻЭ<C4BB><D0AD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>*/
static void gui_tjc_hmi_init(void)
{
com_uart1.rx_data_analysis = gui_tjc_hmi_communication_data_analysis;
}
/*<2A><><EFBFBD>ͽӿ<CDBD>*/
static void gui_tjc_hmi_data_send(u8 *p_data,u16 len)
{
if(p_rx_uart != NULL)
{
p_rx_uart->send(p_rx_uart,p_data,len);
}
}
/*<2A><><EFBFBD>ö<EFBFBD>Ӧ<EFBFBD>Ŀؼ<C4BF>
x<EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD>
y<EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD>
buffer<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>buffer
format<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
...<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
static u16 gui_tjc_hmi_tx_text_display(u16 x,u16 y,char *buffer,const char *format,...)
{
u16 i,len;
s16 state;
va_list arg;
/*<2A><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>*/
memset(gui_tjc_hmi_text_buffer,0,sizeof(gui_tjc_hmi_text_buffer));
va_start(arg,format);
/*<2A><>ʽ<EFBFBD><CABD>ת<EFBFBD><D7AA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>*/
state = vsnprintf(gui_tjc_hmi_text_buffer,GUI_TJC_HMI_TEXT_BUFFER_NUM,format,arg);
if(-1 == state || state > GUI_TJC_HMI_TEXT_BUFFER_NUM)
{
va_end(arg);
printf("Length REEOR");
return 0;
}
/*ƴ<><C6B4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>*/
sprintf(buffer,"t%d_%d.txt=\"%s\"",x,y,gui_tjc_hmi_text_buffer);
len = strlen(buffer);
for(i=0;i<HMI_PROTO_ASCII_TX_DELINITER_NUM;i++)
{
buffer[len + i] = HMI_PROTO_ASCII_TX_DELINITER;
}
va_end(arg);
return len + 3;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ*/
static void gui_tjc_hmi_main_send(u8 cmd,u8 opa,u8 *p_data)
{
/*ÿҳ<C3BF><D2B3>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define MAIN_PAGE_SUB_DEVICE_NUM (4)
u16 len = 0,i,j,x,y,index;
u8 page_num,remain_region_num;
memset(hmi_tx_buffer,0,sizeof(hmi_tx_buffer));
/*<2A><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
page_num = leakage.region_num / MAIN_PAGE_SUB_DEVICE_NUM;
remain_region_num = leakage.region_num % MAIN_PAGE_SUB_DEVICE_NUM;/*ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
if(remain_region_num > 0)
{
page_num++;
}
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ*/
{
if(p_tjc_hmi->page.main_index == page_num - 1 && remain_region_num >0)/*<2A><>ʾʣ<CABE><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
{
for(j=0;j<remain_region_num;j++)
{
index = p_tjc_hmi->page.main_index * MAIN_PAGE_SUB_DEVICE_NUM + j;
x = j;
/*<2A><><EFBFBD><EFBFBD>*/
y = 0;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%s",leakage.region_data[index].name);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
y = 1;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].sub_device_num);
/*©Һ<C2A9><D2BA><EFBFBD><EFBFBD>*/
y = 2;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].leakage_num);
/*<2A>ϴ<EFBFBD>*/
y = 3;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].open_num);
/*ͨѶ*/
y = 4;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].time_out_num);
}
}
else
{
for(j=0;j<MAIN_PAGE_SUB_DEVICE_NUM;j++)
{
index = p_tjc_hmi->page.main_index*MAIN_PAGE_SUB_DEVICE_NUM + j;
x = j;
/*<2A><><EFBFBD><EFBFBD>*/
y = 0;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%s",leakage.region_data[index].name);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
y = 1;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].sub_device_num);
/*©Һ<C2A9><D2BA><EFBFBD><EFBFBD>*/
y = 2;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].leakage_num);
/*<2A>ϴ<EFBFBD>*/
y = 3;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].open_num);
/*ͨѶ*/
y = 4;
len = gui_tjc_hmi_tx_text_display(x+1,y+1,(char *)&hmi_tx_buffer[len],"%d",leakage.region_data[index].time_out_num);
}
}
}break;
case 0x02:
{
}break;
default:return;
}
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x03:/*<2A><>ҳ*/
{
if(0x01 == p_data[0])
{
if(page_num - 1 <= p_tjc_hmi->page.main_index)
{
p_tjc_hmi->page.main_index = 0;
}
else
{
p_tjc_hmi->page.main_index++;
}
}
else
{
if(0 == p_tjc_hmi->page.main_index)
{
p_tjc_hmi->page.main_index = page_num - 1;
}
else
{
p_tjc_hmi->page.main_index--;
}
}
}
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ*/
static void gui_tjc_hmi_curr_alarm_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void gui_tjc_hmi_detail_main_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>*/
static void gui_tjc_hmi_login_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void gui_tjc_hmi_history_alarm_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
static void gui_tjc_hmi_tcp_config_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><EFBFBD><E8B1B8><EFBFBD>ý<EFBFBD><C3BD><EFBFBD> */
static void gui_tjc_hmi_device_config_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void gui_tjc_hmi_help_send(u8 cmd,u8 opa,u8 *p_data)
{
u16 len = 0,i;
if(HMI_PROTO_CMD_GET == cmd)/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
else if(HMI_PROTO_CMD_SET == cmd)/*<2A><><EFBFBD><EFBFBD>*/
{
switch(opa)
{
case 0x01:
{
}break;
case 0x02:
{
}break;
default:return;
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer,len);
}
}
/*<2A><>Ļָ<C4BB><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void gui_tjc_hmi_communication_data_analysis(u8 *p_data, u16 len, void *rx_uart)
{
u8 cmd,data,gui_id,opa,*p_offset_data;
u16 i,modbus_crc16,check_crc16;
/*<2A><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>*/
if(len < 5)
{
return ;
}
/*<2A><><EFBFBD><EFBFBD>֡ͷ*/
if(p_data[0] != HMI_PROTO_FRAME_HEADER1 || p_data[1] != HMI_PROTO_FRAME_HEADER2)
{
return ;
}
/*У<><D0A3>λ*/
check_crc16 = p_data[len-2] << 8 | p_data[len-1];
modbus_crc16 = modbus_lib_crc16(p_data,len-2);
modbus_crc16 = (modbus_crc16 >> 8) | (modbus_crc16 << 8);
if(modbus_crc16 != check_crc16)
{
return ;
}
/*CMD*/
cmd = p_data[2];
if(cmd != HMI_PROTO_CMD_GET || HMI_PROTO_CMD_GET != HMI_PROTO_CMD_SET)
{
return ;
}
gui_id = p_data[3]; /*gui_id*/
opa = p_data[4]; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
p_offset_data = &p_data[5]; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
p_rx_uart = (bsp_uart_t *)rx_uart; /*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>*/
switch(gui_id)
{
case HMI_PROTO_GUI_MAIN :
{
gui_tjc_hmi_main_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_CURR_ALARM :
{
gui_tjc_hmi_curr_alarm_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_DETAIL_MAIN :
{
gui_tjc_hmi_detail_main_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_LOGIN :
{
gui_tjc_hmi_main_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_HISTORY_ALARM :
{
gui_tjc_hmi_history_alarm_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_TCP_CONFIG :
{
gui_tjc_hmi_tcp_config_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_DEVICE_CONFIG :
{
gui_tjc_hmi_device_config_send(cmd,opa,p_offset_data);
}break;
case HMI_PROTO_GUI_HELP :
{
gui_tjc_hmi_help_send(cmd,opa,p_offset_data);
}break;
}
}

View File

@@ -1,22 +0,0 @@
#ifndef _GUI_TJC_HMI_H_
#define _GUI_TJC_HMI_H_
#include "main.h"
/*ҳ<><D2B3>*/
typedef struct
{
u8 main_index;
u8 deliniter_main_index;
}gui_tjc_hmi_page_t;
typedef struct
{
gui_tjc_hmi_page_t page;
void (*init)(void);
}gui_tjc_hmi_t;
extern gui_tjc_hmi_t tjc_hmi;
#endif

View File

@@ -1,412 +0,0 @@
#include "proto_modbus_master_tdlas.h"
#include "string.h"
#include "stdio.h"
#include "app.h"
#include "app_timer.h"
#include "bsp_Uart.h"
#include "bsp_74HC4067.h"
#include "bsp_Flash.h"
#include "proto_print.h"
#include "proto_modbus_lib.h"
#define TDLAS_MODBUS_ID (0xe8)
#define TDLAS_DATA_ENDIAN (LITTLE_ENDIAN) /*<2A><><EFBFBD>ô<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>*/
#define PROTO_TDLAS_GET_CURR_DATA_START_ADDR (20000)
#define PROTO_TDLAS_SET_ZERO_CALIB_START_ADDR (12)
#define PROTO_TDLAS_SET_SPAN_CALIB_START_ADDR (13)
#define PROTO_TDLAS_GET_RESET_START_ADDR (0x0000)
#define PROTO_TDLAS_GET_FAC_CALIB_START_ADDR (11010)
#define PROTO_TDLAS_GET_FAC_CALIB_PARA_SET_START_ADDR (11000)
#define PROTO_TDLAS_GET_FAC_CALIB_DATA_START_ADDR (250)
static void proto_tdlas_init(void);
static void proto_tdlas_control_zero_calib(u16 calib_value);
static void proto_tdlas_control_span_calib(u16 CalibValue);
static void proto_tdlas_control_reset(void);
static void proto_tdlas_control_fac_calib(u16 calib_value,u8 calib_point,u8 temp_point);
static void proto_tdlas_control_fac_calib_para_set(s16 temp,u16 press,u16 humidity);
static void proto_tdlas_tx_task(void);
static void proto_tdlas_rx_task(u8 *p_data,u16 len,void *other_data);
static void proto_tdlas_control_fac_calib_data_get(u8 ch);
/*<2A><><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>*/
static bsp_uart_t *rx_uart = NULL;
proto_tdlas_t tdlas=
{
.modbus_id = TDLAS_MODBUS_ID,
.init = proto_tdlas_init,
.tx_task = proto_tdlas_tx_task,
.rx_task = proto_tdlas_rx_task,
// .print = proto_tdlas_print_debug_data,
.control.zero_calib = proto_tdlas_control_zero_calib,
.control.span_calib = proto_tdlas_control_span_calib,
.control.reset = proto_tdlas_control_reset,
.control.fac_calib = proto_tdlas_control_fac_calib,
.control.fac_calib_para_set = proto_tdlas_control_fac_calib_para_set,
.control.fac_calib_data_get = proto_tdlas_control_fac_calib_data_get,
};
proto_tdlas_t *p_sensor = &tdlas;
bsp_uart_t *p_use_uart = &com_uart4;
static void proto_tdlas_init(void)
{
com_uart4.rx_data_analysis = p_sensor->rx_task;
}
static void proto_tdlas_send(u8 *p_data,u16 len)
{
com_uart4.send(&com_uart4,p_data,len);
}
static void proto_sensor_switch(u8 ch)
{
UartCH_Config.ch_set(ch);
}
/*<2A><><EFBFBD><EFBFBD>У׼*/
static void proto_tdlas_control_zero_calib(u16 calib_value)
{
u8 i;
for(i=0;i<Usr_Flash.FlashData.modbus_read_sensor_num;i++)
{
p_sensor->sys[i].sys_state = PROTO_TDLAS_SYS_STATE_ZERO_CALIB;
p_sensor->set_data.calib_value = calib_value;
}
}
/*<2A><><EFBFBD><EFBFBD>У׼ */
static void proto_tdlas_control_span_calib(u16 CalibValue)
{
u8 i;
for(i=0;i<Usr_Flash.FlashData.modbus_read_sensor_num;i++)
{
p_sensor->sys[i].sys_state = PROTO_TDLAS_SYS_STATE_SPAN_CALIB;
p_sensor->set_data.calib_value = CalibValue;
}
}
/*<2A>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
static void proto_tdlas_control_reset(void)
{
u8 i;
for(i=0;i<Usr_Flash.FlashData.modbus_read_sensor_num;i++)
{
p_sensor->sys[i].sys_state = PROTO_TDLAS_SYS_STATE_RESET;
}
}
/*<2A><><EFBFBD>ұ궨*/
static void proto_tdlas_control_fac_calib(u16 calib_value,u8 calib_point,u8 temp_point)
{
u8 i;
for(i=0;i<Usr_Flash.FlashData.modbus_read_sensor_num;i++)
{
p_sensor->sys[i].sys_state = PROTO_TDLAS_SYS_STATE_FAC_CALIB;
p_sensor->set_data.calib_value = calib_value;
p_sensor->set_data.calib_point = calib_point;
p_sensor->set_data.temp_point = temp_point;
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void proto_tdlas_control_fac_calib_para_set(s16 temp,u16 press,u16 humidity)
{
u8 i;
for(i=0;i<Usr_Flash.FlashData.modbus_read_sensor_num;i++)
{
p_sensor->sys[i].sys_state = PROTO_TDLAS_SYS_STATE_FAC_CALIB_PARA_SET;
p_sensor->set_data.temp = (-1 == temp) ? p_sensor->set_data.temp : temp;
p_sensor->set_data.humidity = (0xffff == humidity) ? p_sensor->set_data.humidity : humidity;
p_sensor->set_data.press = (0xffff == press) ? p_sensor->set_data.press : press;
}
}
/*<2A><>ȡ<EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD>*/
static void proto_tdlas_control_fac_calib_data_get(u8 ch)
{
if(Usr_Flash.FlashData.modbus_read_sensor_num > ch)
{
p_sensor->sensor_index = ch;
p_sensor->sys[ch].sys_state = PROTO_TDLAS_SYS_STATE_FAC_CALIB_DATA_GET;
proto_sensor_switch(ch);
}
}
/********<2A><><EFBFBD><EFBFBD>***********/
static void proto_tdlas_tx_curr_data_get(void)
{
u16 addr = PROTO_TDLAS_GET_CURR_DATA_START_ADDR;
u8 len = Usr_Flash.FlashData.modbus_read_reg_num;
modbus_lib_data_read(p_sensor->modbus_id,addr,len,proto_tdlas_send);
}
static void proto_tdlas_tx_zero_calib(void)
{
u16 addr = PROTO_TDLAS_SET_ZERO_CALIB_START_ADDR;
u8 len = 1;
u16 data[1];
data[0] = 0;
modbus_lib_multiple_data_write(p_sensor->modbus_id,addr,len,data,proto_tdlas_send);
}
static void proto_tdlas_tx_span_calib(void)
{
u16 addr = PROTO_TDLAS_SET_SPAN_CALIB_START_ADDR;
u8 len = 1;
u16 data[1];
data[0] = p_sensor->set_data.calib_value;
modbus_lib_multiple_data_write(p_sensor->modbus_id,addr,len,data,proto_tdlas_send);
}
static void proto_tdlas_tx_Reset(void)
{
u16 addr = PROTO_TDLAS_GET_RESET_START_ADDR;
u8 len = 1;
u16 data[1];
data[0] = 0x00FE;
//modbus_lib_multiple_data_write(p_sensor->modbus_id,addr,len,data,proto_tdlas_send);
}
static void proto_tdlas_tx_fac_calib(void)
{
u16 addr = PROTO_TDLAS_GET_FAC_CALIB_START_ADDR;
u8 len = 1;
u16 data[1];
data[0] = p_sensor->set_data.calib_value;
addr = addr + p_sensor->set_data.temp_point * 10 + p_sensor->set_data.calib_point;
modbus_lib_multiple_data_write(p_sensor->modbus_id,addr,len,data,proto_tdlas_send);
}
static void proto_tdlas_tx_fac_calib_para_set(void)
{
u16 addr = PROTO_TDLAS_GET_FAC_CALIB_PARA_SET_START_ADDR;
u8 len = 3;
u16 data[3];
data[0] = *((u16 *)(&p_sensor->set_data.temp)); /*<2A><EFBFBD>*/
data[1] = p_sensor->set_data.press; /*ѹ<><D1B9>*/
data[2] = p_sensor->set_data.humidity; /*ʪ<><CAAA>*/
modbus_lib_multiple_data_write(p_sensor->modbus_id,addr,len,data,proto_tdlas_send);
}
static void proto_tdlas_tx_fac_calib_data_get(void)
{
u16 addr = PROTO_TDLAS_GET_FAC_CALIB_DATA_START_ADDR;
u8 len = 1;
u16 data[1];
data[0] = 3; /*<2A><EFBFBD>*/
modbus_lib_multiple_data_write(p_sensor->modbus_id,addr,len,data,proto_tdlas_send);
}
static void proto_tdlas_tx_task(void)
{
u8 SendFlag = 0;
proto_tdlas_sys_t *p_sensor_sys;
p_sensor_sys = &p_sensor->sys[p_sensor->sensor_index];
if(0 == (p_sensor_sys->state_error_flag & (0x00000001 << PROTO_TDLAS_ERROR_FLAG_TIME_OUT)))
{
if((++p_sensor_sys->tx_time_out_count) > 8)/*ͨѶ<CDA8><D1B6>ʱ*/
{
p_sensor_sys->state_error_flag |= (0x00000001 << PROTO_TDLAS_ERROR_FLAG_TIME_OUT);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
memset(&gas_data[p_sensor->sensor_index],0,sizeof(gas_data_t));
}
}
switch(p_sensor_sys->sys_state)
{
case PROTO_TDLAS_SYS_STATE_INIT:
{
}break;
case PROTO_TDLAS_SYS_STATE_CURR_DATA_GET:
{
proto_tdlas_tx_curr_data_get();
}break;
case PROTO_TDLAS_SYS_STATE_ZERO_CALIB:
{
proto_tdlas_tx_zero_calib();
}break;
case PROTO_TDLAS_SYS_STATE_SPAN_CALIB:
{
proto_tdlas_tx_span_calib();
}break;
case PROTO_TDLAS_SYS_STATE_RESET:
{
proto_tdlas_tx_Reset();
}break;
case PROTO_TDLAS_SYS_STATE_FAC_CALIB:
{
proto_tdlas_tx_fac_calib();
}break;
case PROTO_TDLAS_SYS_STATE_FAC_CALIB_PARA_SET:
{
proto_tdlas_tx_fac_calib_para_set();
}break;
case PROTO_TDLAS_SYS_STATE_FAC_CALIB_DATA_GET:
{
if(0 == p_sensor_sys->send_time)
{
p_use_uart->relay.flag = 1;
proto_tdlas_tx_fac_calib_data_get();
}
p_sensor_sys->send_time++;
if(p_sensor_sys->send_time > 50)
{
p_use_uart->relay.flag = 0;
p_sensor_sys->send_time = 0;
p_sensor_sys->sys_state = PROTO_TDLAS_SYS_STATE_CURR_DATA_GET;
p_sensor->sensor_index++;
if(p_sensor->sensor_index >= Usr_Flash.FlashData.modbus_read_sensor_num)
{
p_sensor->sensor_index = 0;
}
proto_sensor_switch(p_sensor->sensor_index);
}
SendFlag = 1;
}break;
default:
{
}break;
}
if(SendFlag)
{
return ;
}
else
{
p_sensor_sys->send_time++;
if(p_sensor_sys->send_time >= 3) /*<2A><><EFBFBD><EFBFBD><EFBFBD>쳣*/
{
p_sensor_sys->state_error_flag |= (0x00000001 << p_sensor_sys->sys_state);/*<2A><>¼<EFBFBD>쳣״̬*/
p_sensor_sys->send_time = 0;
p_sensor_sys->sys_state = PROTO_TDLAS_SYS_STATE_CURR_DATA_GET;
p_sensor->sensor_index++;
if(p_sensor->sensor_index >= Usr_Flash.FlashData.modbus_read_sensor_num)
{
p_sensor->sensor_index = 0;
}
proto_sensor_switch(p_sensor->sensor_index);
}
}
}
static void proto_tdlas_rx_task(u8 *p_data,u16 len,void *other_data)
{
u8 send_time_flag = 0;
u8 modbus_id,cmd;
u16 check_crc16,modbus_crc16;
u16 *p_u16_temp;
u16 i;
u8 *p_rx_valid;
proto_tdlas_sys_t *p_sensor_sys;
p_sensor_sys = &p_sensor->sys[p_sensor->sensor_index];
if( p_use_uart->relay.flag == 1)
{
p_use_uart->relay.uart->send(p_use_uart->relay.uart,p_data,len);
}
if(p_sensor->modbus_id != p_data[0])
{
p_data = &p_data[1];
len -= 1;
}
modbus_id = *p_data;
cmd = *(p_data+1);
check_crc16 = p_data[len-2] << 8 | p_data[len-1];
if(modbus_id != p_sensor->modbus_id) return ;
if(cmd != 0x04 && cmd != 0x06 && cmd != 0x10 && cmd != 0x41) return ;
modbus_crc16 = modbus_lib_crc16(p_data,len-2);
modbus_crc16 = (modbus_crc16 >> 8) | (modbus_crc16 << 8);
if(check_crc16 != modbus_crc16) return ;
if(cmd == 0x41)
{
p_rx_valid = &p_data[6];
}
rx_uart = (bsp_uart_t *)other_data;
p_sensor_sys->tx_time_out_count = 0;
p_sensor_sys->state_error_flag &= (~(0x00000001 << PROTO_TDLAS_ERROR_FLAG_TIME_OUT));
switch(p_sensor_sys->sys_state)
{
case PROTO_TDLAS_SYS_STATE_INIT:
{
}break;
case PROTO_TDLAS_SYS_STATE_CURR_DATA_GET:
{
p_u16_temp = (u16 *)&(gas_data[p_sensor->sensor_index]);
for(i=0;i<Usr_Flash.FlashData.modbus_read_reg_num;i++)
{
p_u16_temp[i] = p_rx_valid[i * 2] << 8 | p_rx_valid[i * 2 + 1];
}
}break;
case PROTO_TDLAS_SYS_STATE_ZERO_CALIB:
{
}break;
case PROTO_TDLAS_SYS_STATE_SPAN_CALIB:
{
}break;
case PROTO_TDLAS_SYS_STATE_RESET:
{
}break;
case PROTO_TDLAS_SYS_STATE_FAC_CALIB:
{
}break;
case PROTO_TDLAS_SYS_STATE_FAC_CALIB_PARA_SET:
{
}break;
case PROTO_TDLAS_SYS_STATE_FAC_CALIB_DATA_GET:
{
}break;
}
if(send_time_flag)
{
return;
}
else
{
p_sensor_sys->sys_state = PROTO_TDLAS_SYS_STATE_CURR_DATA_GET;
p_sensor_sys->state_error_flag &= (~(0x00000001 << p_sensor_sys->sys_state));/*<2A><><EFBFBD><EFBFBD><EFBFBD>쳣״̬*/
p_sensor_sys->send_time = 0;
p_sensor->sensor_index++;
if(p_sensor->sensor_index >= Usr_Flash.FlashData.modbus_read_sensor_num)
{
p_sensor->sensor_index = 0;
}
proto_sensor_switch(p_sensor->sensor_index);
return;
}
}

View File

@@ -1,68 +0,0 @@
#ifndef _PROTO_MODBUS_MASTER_SENSOR_H_
#define _PROTO_MODBUS_MASTER_SENSOR_H_
#include "main.h"
#include "gas_data.h"
/*NIDR״̬*/
#define PROTO_TDLAS_SYS_STATE_INIT (0U) /*<2A><>ʼ<EFBFBD><CABC> */
#define PROTO_TDLAS_SYS_STATE_CURR_DATA_GET (1U) /*<2A><>ȡʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>*/
#define PROTO_TDLAS_SYS_STATE_ZERO_CALIB (2U) /*<2A><><EFBFBD><EFBFBD>У׼ */
#define PROTO_TDLAS_SYS_STATE_SPAN_CALIB (3U) /*<2A><><EFBFBD><EFBFBD>У׼ */
#define PROTO_TDLAS_SYS_STATE_RESET (4U) /*<2A>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD> */
#define PROTO_TDLAS_SYS_STATE_FAC_CALIB (5U) /*<2A><><EFBFBD>ұ궨 */
#define PROTO_TDLAS_SYS_STATE_FAC_CALIB_PARA_SET (6U) /*<2A><><EFBFBD>ұ궨ʱ<EAB6A8>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define PROTO_TDLAS_SYS_STATE_FAC_CALIB_DATA_GET (7U) /*<2A><>ȡ<EFBFBD><EFBFBD><EAB6A8>Ϣ*/
#define PROTO_TDLAS_ERROR_FLAG_TIME_OUT (30U) /*ͨѶ<CDA8><D1B6>ʱ*/
typedef struct
{
void (*zero_calib)(u16); /*<2A><><EFBFBD><EFBFBD>У׼*/
void (*span_calib)(u16); /*<2A><><EFBFBD>̵<EFBFBD>У׼*/
void (*reset)(void); /*<2A>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void (*fac_calib)(u16,u8,u8); /*<2A><><EFBFBD>ұ궨ʱ<EAB6A8><CAB1>Ũ<EFBFBD><C5A8>*/
void (*fac_calib_para_set)(s16,u16,u16); /*<2A><><EFBFBD>ұ궨ʱ<EAB6A8><CAB1><EFBFBD>õ<EFBFBD><C3B5>¶ȡ<C2B6>ʪ<EFBFBD>ȡ<EFBFBD>ѹ<EFBFBD><D1B9>*/
void (*fac_calib_data_get)(u8); /*<2A><><EFBFBD>ұ궨ʱ<EAB6A8><CAB1><EFBFBD>õ<EFBFBD><C3B5>¶ȡ<C2B6>ʪ<EFBFBD>ȡ<EFBFBD>ѹ<EFBFBD><D1B9>*/
}proto_tdlas_control_t;
typedef struct
{
u8 sys_state;
u16 send_time; /*<2A><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>*/
u32 sensor_state; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬*/
u8 print_flag; /*ʵʱ<CAB5><CAB1><EFBFBD>ݴ<EFBFBD>ӡ<EFBFBD><D3A1>־λ*/
u32 state_error_flag; /*ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ*/
u16 tx_time_out_count; /*Э<><D0AD>ָ<EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>*/
}proto_tdlas_sys_t;
typedef struct
{
u8 calib_point;
u8 temp_point;
u16 calib_value;
s16 temp;
u16 humidity;
u16 press;
}proto_tdlas_set_data_t;
typedef struct
{
u8 modbus_id;
u16 sensor_index; /*<2A><>ǰ<EFBFBD><C7B0><EFBFBD>ĸ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>*/
proto_tdlas_set_data_t set_data;
proto_tdlas_sys_t sys[SENSOR_NUM];
proto_tdlas_control_t control;
void (*init)(void);
void (*tx_task)(void);
void (*rx_task)(u8 *,u16,void *);
void (*print)(void);
void (*warm_task)(void);
}proto_tdlas_t;
extern proto_tdlas_t tdlas;
#endif

View File

@@ -1,357 +0,0 @@
/*<2A><><EFBFBD><EFBFBD>ͨѶ modbus<75>ӻ<EFBFBD>*/
#include "proto_modbus_slave_ex.h"
#include "string.h"
#include "stdio.h"
#include "app.h"
#include "app_timer.h"
#include "bsp_Uart.h"
#include "bsp_Flash.h"
#include "proto_print.h"
#include "proto_modbus_master_tdlas.h"
static modbus_analysis_data_t modbus_analysis_data;//ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
static modbus_communication_send_buf_t send_struct;//<2F><><EFBFBD>ͽṹ<CDBD><E1B9B9>
static void proto_modbus_communication_data_analysis(u8 *pData, u16 len, void *data);
static void proto_modbus_communication_data_send(u8 *pData, u16 len);
static void proto_modbus_init(void);
static void proto_modbus_task(void);
static modbus_error_code_e proto_modbus_data_write(u16 Addr, u16 Value);
static u16 proto_modbus_data_read(u16 Addr);
proto_Modbus_t modbus_slave_ex=
{
.id = 0x01,
.data_read = proto_modbus_data_read,
.data_write = proto_modbus_data_write,
.data_analysis = proto_modbus_communication_data_analysis,
.init = proto_modbus_init,
.task = proto_modbus_task,
};
static proto_Modbus_t *p_modbus = &modbus_slave_ex;
static bsp_uart_t * p_rx_uart;
static void proto_modbus_communication_data_send(u8 *p_data, u16 len)
{
if(p_rx_uart != NULL)
{
p_rx_uart->send(p_rx_uart,p_data,len);
}
}
static void proto_modbus_init(void)
{
p_modbus->id = Usr_Flash.FlashData.modbus_id;
com_uart1.rx_data_analysis = proto_modbus_communication_data_analysis;
com_uart4.rx_data_analysis = proto_modbus_communication_data_analysis;
}
static void proto_modbus_task(void)
{
}
static void proto_modbus_communication_data_analysis(u8 *pData, u16 len,void *other_data)
{
modbus_error_code_e error_code;
u16 inx;
u16 TempAddr, TempData, crc_16;
if (0 == modbus_lib_analysis(&modbus_analysis_data, pData, len))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> У<><D0A3><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
return;
if (p_modbus->id != modbus_analysis_data.id && modbus_analysis_data.id != 0xe8)//<2F>ж<EFBFBD>ID<49>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
return;
error_code = ModbusErrorCode_Success;
/* //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>Ƿ񳬳<C7B7><F1B3ACB3><EFBFBD>Χ
if ((modbus_analysis_data.start_addr >= MODBUS_REG_LEN) || (modbus_analysis_data.reg_number >= MODBUS_REG_LEN) ||
(modbus_analysis_data.start_addr + modbus_analysis_data.reg_number >= MODBUS_REG_LEN))
{
ErrorCode = ModbusErrorCode_IllegalAddr;
goto Error;
}
*/
p_rx_uart = (bsp_uart_t*)other_data;
switch (modbus_analysis_data.func)
{
case 0x03:
case 0x04:
{
TempAddr = modbus_analysis_data.start_addr;
send_struct.send_buffer[0] = modbus_analysis_data.id;
send_struct.send_buffer[1] = modbus_analysis_data.func;
send_struct.send_buffer[2] = 2 * modbus_analysis_data.reg_number;
for (inx = 0; inx < modbus_analysis_data.reg_number; inx++)
{
TempData = proto_modbus_data_read(TempAddr);
send_struct.send_buffer[3 + 2 * inx] = (TempData >> 8) & 0xff;
send_struct.send_buffer[4 + 2 * inx] = TempData & 0xff;
TempAddr++;
}
crc_16 = modbus_lib_crc16(send_struct.send_buffer, 3 + send_struct.send_buffer[2]);
send_struct.send_buffer[3 + send_struct.send_buffer[2]] = crc_16 & 0xff;
send_struct.send_buffer[4 + send_struct.send_buffer[2]] = (crc_16 >> 8) & 0xff;
send_struct.len = 5 + send_struct.send_buffer[2];
}goto Success;
/*<2A><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>*/
case 0x41:
{
TempAddr = modbus_analysis_data.start_addr;
send_struct.send_buffer[0] = modbus_analysis_data.id;
send_struct.send_buffer[1] = modbus_analysis_data.func;
send_struct.send_buffer[2] = modbus_analysis_data.start_addr >> 8;
send_struct.send_buffer[3] = modbus_analysis_data.start_addr & 0xff;
send_struct.send_buffer[4] = (2 * modbus_analysis_data.reg_number) >> 8;
send_struct.send_buffer[5] = (2 * modbus_analysis_data.reg_number) & 0xff;
for (inx = 0; inx < modbus_analysis_data.reg_number; inx++)
{
TempData = proto_modbus_data_read(TempAddr);
send_struct.send_buffer[6 + 2 * inx] = (TempData >> 8) & 0xff;
send_struct.send_buffer[7 + 2 * inx] = TempData & 0xff;
TempAddr++;
}
crc_16 = modbus_lib_crc16(send_struct.send_buffer, 6 + 2 * modbus_analysis_data.reg_number);
send_struct.send_buffer[6 + 2 * modbus_analysis_data.reg_number] = crc_16 & 0xff;
send_struct.send_buffer[7 + 2 * modbus_analysis_data.reg_number] = (crc_16 >> 8) & 0xff;
send_struct.len = 8 + 2 * modbus_analysis_data.reg_number;
}goto Success;
case 0x06:
{
TempAddr = modbus_analysis_data.start_addr;
TempData = (modbus_analysis_data.write_data_addr[0] << 8) | modbus_analysis_data.write_data_addr[1];
error_code = proto_modbus_data_write(TempAddr, TempData);
if (error_code)
{
goto Error;
}
send_struct.len = 8;
send_struct.send_buffer[0] = modbus_analysis_data.id;
send_struct.send_buffer[1] = modbus_analysis_data.func;
send_struct.send_buffer[2] = modbus_analysis_data.start_addr >> 8;
send_struct.send_buffer[3] = modbus_analysis_data.start_addr & 0xff;
send_struct.send_buffer[4] = modbus_analysis_data.write_data_addr[0];
send_struct.send_buffer[5] = modbus_analysis_data.write_data_addr[1];
crc_16 = modbus_lib_crc16(send_struct.send_buffer, 6);
send_struct.send_buffer[6] = crc_16 & 0xff;
send_struct.send_buffer[7] = (crc_16 >> 8) & 0xff;
}break;
case 0x10:
{
TempAddr = modbus_analysis_data.start_addr;
for (inx = 0; inx < modbus_analysis_data.reg_number; inx++)
{
TempData = modbus_analysis_data.write_data_addr[2 * inx];
TempData = (TempData << 8) | modbus_analysis_data.write_data_addr[2 * inx + 1];
error_code = proto_modbus_data_write(TempAddr, TempData);
TempAddr++;
if (error_code)
{
goto Error;
}
}
send_struct.len = 8;
send_struct.send_buffer[0] = modbus_analysis_data.id;
send_struct.send_buffer[1] = modbus_analysis_data.func;
send_struct.send_buffer[2] = modbus_analysis_data.start_addr >> 8;
send_struct.send_buffer[3] = modbus_analysis_data.start_addr & 0xff;
send_struct.send_buffer[4] = modbus_analysis_data.reg_number >> 8;
send_struct.send_buffer[5] = modbus_analysis_data.reg_number & 0xff;
crc_16 = modbus_lib_crc16(send_struct.send_buffer, 6);
send_struct.send_buffer[6] = crc_16 & 0xff;
send_struct.send_buffer[7] = (crc_16 >> 8) & 0xff;
}
break;
default:
{
error_code = ModbusErrorCode_IllegalFunction;
}
goto Error;
}
Success:
proto_modbus_communication_data_send(send_struct.send_buffer, send_struct.len);
return;
Error:
send_struct.len = 5;
send_struct.send_buffer[0] = modbus_analysis_data.id;
send_struct.send_buffer[1] = modbus_analysis_data.func | 0x80;
send_struct.send_buffer[2] = error_code;
crc_16 = modbus_lib_crc16(send_struct.send_buffer, 3);
send_struct.send_buffer[3] = crc_16 & 0xff;
send_struct.send_buffer[4] = (crc_16 >> 8) & 0xff;
proto_modbus_communication_data_send(send_struct.send_buffer, send_struct.len);
}
/******************************************
* <20><><EFBFBD><EFBFBD>: proto_modbus_data_write
* <20><><EFBFBD><EFBFBD>: Modbusд<73>Ĵ<EFBFBD><C4B4><EFBFBD>
* <20><><EFBFBD><EFBFBD>: Addr: <20><>ַ
Value:<3A><><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>
******************************************/
static modbus_error_code_e proto_modbus_data_write(u16 addr, u16 data)
{
modbus_error_code_e error_code;
u8 temp_point,cali_point;
error_code = ModbusErrorCode_Success;
switch(addr)
{
/*<2A><EFBFBD> ѹ<><D1B9> ʪ<><CAAA>*/
case 11000:
{
tdlas.control.fac_calib_para_set(*((u16 *)(&data)),0xffff,0xffff);
}break;
case 11001:
{
tdlas.control.fac_calib_para_set(0xffff,data,0xffff);
}break;
case 11002:
{
tdlas.control.fac_calib_para_set(0xffff,0xffff,data);
}break;
/*<2A><><EFBFBD><EFBFBD>У׼*/
case 11003:
{
tdlas.control.zero_calib(0);
}break;
/*<2A><><EFBFBD>̵<EFBFBD>У׼*/
case 11004:
{
tdlas.control.span_calib(data);
}break;
/*<2A><><EFBFBD>ұ궨*/
case 11010 ... 11109:
{
temp_point = (addr - 11010) / 10;
cali_point = (addr - 11010) % 10;
tdlas.control.fac_calib(data,cali_point,temp_point);
}break;
/*ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8>Ϣ*/
case 11200:
{
tdlas.control.fac_calib_data_get(data);
}break;
/*sn*/
case 20000 ... 20004:
{
Usr_Flash.FlashData.sn[addr - 20000] = data;
Usr_Flash.Write();
}break;
/*modbus_id*/
case 20005:
{
Usr_Flash.FlashData.modbus_id = data;
modbus_slave_ex.id = Usr_Flash.FlashData.modbus_id;
Usr_Flash.Write();
}break;
/*modbus_read_reg_num*/
case 20006:
{
if(data > 1000)
{
error_code = ModbusErrorCode_IllegalData;
}
else
{
Usr_Flash.FlashData.modbus_read_reg_num = data;
Usr_Flash.Write();
}
}break;
case 20007:
{
if(data > 16)
{
error_code = ModbusErrorCode_IllegalData;
}
else
{
Usr_Flash.FlashData.modbus_read_sensor_num = data;
Usr_Flash.Write();
}
}break;
/*FC<46><43>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
case 252:
{
print.set(data);
}break;
}
return error_code;
}
/******************************************
* <20><><EFBFBD><EFBFBD>: proto_modbus_data_read
* <20><><EFBFBD><EFBFBD>: Modbus<75><73><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: Addr: <20><>ַ
* <20><><EFBFBD><EFBFBD>: <20><>ַ<EFBFBD><D6B7>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><>
******************************************/
static u16 proto_modbus_data_read(u16 addr)
{
u16 data = 0;
u16 *p_data;
u16 num,offset;
switch(addr)
{
/*ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>*/
case 0 ... 639:
{
u16 size;
size = sizeof(gas_data_t);
/* TDLASĬ<53>϶<EFBFBD>ȡ*/
if( size== (2 * Usr_Flash.FlashData.modbus_read_reg_num))
{
p_data = (u16 *)&gas_data;
data = p_data[addr];
}
else if((2 * Usr_Flash.FlashData.modbus_read_reg_num )< sizeof(gas_data_t))/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
{
num = addr / Usr_Flash.FlashData.modbus_read_reg_num;
offset = addr % Usr_Flash.FlashData.modbus_read_reg_num;
p_data = (u16 *)&gas_data[num];
data = p_data[offset];
}
}break;
/*sn*/
case 20000 ... 20004:
{
data = Usr_Flash.FlashData.sn[addr - 20000];
}break;
/*modbus_id*/
case 20005:
{
data = Usr_Flash.FlashData.modbus_id;
}break;
/*modbus_read_reg_num*/
case 20006:
{
data = Usr_Flash.FlashData.modbus_read_reg_num;
}break;
case 20007:
{
data = Usr_Flash.FlashData.modbus_read_sensor_num;
}break;
default:data = 0;
}
return data;
}

33
leakage_system/.mxproject Normal file

File diff suppressed because one or more lines are too long

View File

@@ -32,6 +32,7 @@ extern "C" {
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "sys.h"
#include "usr_config.h"
/* USER CODE END Includes */
/* Exported types ------------------------------------------------------------*/
@@ -57,66 +58,42 @@ void Error_Handler(void);
/* USER CODE END EFP */
/* Private defines -----------------------------------------------------------*/
#define TX_S3_Pin GPIO_PIN_2
#define TX_S3_GPIO_Port GPIOE
#define TX_S2_Pin GPIO_PIN_3
#define TX_S2_GPIO_Port GPIOE
#define TX_EN_Pin GPIO_PIN_4
#define TX_EN_GPIO_Port GPIOE
#define TX_S1_Pin GPIO_PIN_5
#define TX_S1_GPIO_Port GPIOE
#define TX_S0_Pin GPIO_PIN_6
#define TX_S0_GPIO_Port GPIOE
#define RS485_EN_Pin GPIO_PIN_2
#define RS485_EN_GPIO_Port GPIOA
#define LED1_Pin GPIO_PIN_8
#define LED1_GPIO_Port GPIOE
#define LED2_Pin GPIO_PIN_9
#define LED2_GPIO_Port GPIOE
#define LED3_Pin GPIO_PIN_10
#define LED3_GPIO_Port GPIOE
#define LED_CH16_Pin GPIO_PIN_12
#define LED_CH16_GPIO_Port GPIOB
#define LED_CH15_Pin GPIO_PIN_13
#define LED_CH15_GPIO_Port GPIOB
#define LED_CH14_Pin GPIO_PIN_14
#define LED_CH14_GPIO_Port GPIOB
#define LED_CH13_Pin GPIO_PIN_15
#define LED_CH13_GPIO_Port GPIOB
#define LED_CH12_Pin GPIO_PIN_8
#define LED_CH12_GPIO_Port GPIOD
#define LED_CH11_Pin GPIO_PIN_9
#define LED_CH11_GPIO_Port GPIOD
#define LED_CH10_Pin GPIO_PIN_10
#define LED_CH10_GPIO_Port GPIOD
#define LED_CH9_Pin GPIO_PIN_11
#define LED_CH9_GPIO_Port GPIOD
#define LED_CH8_Pin GPIO_PIN_12
#define LED_CH8_GPIO_Port GPIOD
#define LED_CH7_Pin GPIO_PIN_13
#define LED_CH7_GPIO_Port GPIOD
#define LED_CH6_Pin GPIO_PIN_14
#define LED_CH6_GPIO_Port GPIOD
#define LED_CH5_Pin GPIO_PIN_15
#define LED_CH5_GPIO_Port GPIOD
#define LED_CH4_Pin GPIO_PIN_6
#define LED_CH4_GPIO_Port GPIOC
#define LED_CH3_Pin GPIO_PIN_7
#define LED_CH3_GPIO_Port GPIOC
#define LED_CH2_Pin GPIO_PIN_8
#define LED_CH2_GPIO_Port GPIOC
#define LED_CH1_Pin GPIO_PIN_9
#define LED_CH1_GPIO_Port GPIOC
#define RX_EN_Pin GPIO_PIN_4
#define RX_EN_GPIO_Port GPIOD
#define RX_S3_Pin GPIO_PIN_8
#define RX_S3_GPIO_Port GPIOB
#define RX_S2_Pin GPIO_PIN_9
#define RX_S2_GPIO_Port GPIOB
#define RX_S1_Pin GPIO_PIN_0
#define RX_S1_GPIO_Port GPIOE
#define RX_S0_Pin GPIO_PIN_1
#define RX_S0_GPIO_Port GPIOE
#define W5500_RST_Pin GPIO_PIN_4
#define W5500_RST_GPIO_Port GPIOC
#define W5500_INT_Pin GPIO_PIN_5
#define W5500_INT_GPIO_Port GPIOC
#define RS485_1_EN_Pin GPIO_PIN_0
#define RS485_1_EN_GPIO_Port GPIOB
#define RS485_2_EN_Pin GPIO_PIN_1
#define RS485_2_EN_GPIO_Port GPIOB
#define RS485_3_EN_Pin GPIO_PIN_2
#define RS485_3_EN_GPIO_Port GPIOB
#define RS485_4_EN_Pin GPIO_PIN_7
#define RS485_4_EN_GPIO_Port GPIOE
#define RELAY_1_Pin GPIO_PIN_8
#define RELAY_1_GPIO_Port GPIOE
#define RELAY_2_Pin GPIO_PIN_9
#define RELAY_2_GPIO_Port GPIOE
#define RELAY_3_Pin GPIO_PIN_10
#define RELAY_3_GPIO_Port GPIOE
#define W5500_SPI1_CS_Pin GPIO_PIN_11
#define W5500_SPI1_CS_GPIO_Port GPIOE
#define SPI2_CS_Pin GPIO_PIN_12
#define SPI2_CS_GPIO_Port GPIOB
#define LED_Pin GPIO_PIN_12
#define LED_GPIO_Port GPIOA
#define DS1302_CLK_Pin GPIO_PIN_3
#define DS1302_CLK_GPIO_Port GPIOD
#define DS1302_DIO_Pin GPIO_PIN_4
#define DS1302_DIO_GPIO_Port GPIOD
#define DS1302_RST_Pin GPIO_PIN_5
#define DS1302_RST_GPIO_Port GPIOD
#define BUZZER_Pin GPIO_PIN_4
#define BUZZER_GPIO_Port GPIOB
#define RELAY_4_Pin GPIO_PIN_5
#define RELAY_4_GPIO_Port GPIOB
#define RS485_EN_Pin GPIO_PIN_8
#define RS485_EN_GPIO_Port GPIOB
/* USER CODE BEGIN Private defines */

View File

@@ -0,0 +1,55 @@
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file spi.h
* @brief This file contains all the function prototypes for
* the spi.c file
******************************************************************************
* @attention
*
* Copyright (c) 2026 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __SPI_H__
#define __SPI_H__
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
extern SPI_HandleTypeDef hspi1;
extern SPI_HandleTypeDef hspi2;
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
void MX_SPI1_Init(void);
void MX_SPI2_Init(void);
/* USER CODE BEGIN Prototypes */
/* USER CODE END Prototypes */
#ifdef __cplusplus
}
#endif
#endif /* __SPI_H__ */

View File

@@ -62,7 +62,7 @@
/* #define HAL_SAI_MODULE_ENABLED */
/* #define HAL_SD_MODULE_ENABLED */
/* #define HAL_MMC_MODULE_ENABLED */
/* #define HAL_SPI_MODULE_ENABLED */
#define HAL_SPI_MODULE_ENABLED
/* #define HAL_TIM_MODULE_ENABLED */
#define HAL_UART_MODULE_ENABLED
/* #define HAL_USART_MODULE_ENABLED */

View File

@@ -55,15 +55,21 @@ void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void DMA1_Stream1_IRQHandler(void);
void DMA1_Stream2_IRQHandler(void);
void DMA1_Stream3_IRQHandler(void);
void DMA1_Stream4_IRQHandler(void);
void DMA1_Stream5_IRQHandler(void);
void DMA1_Stream6_IRQHandler(void);
void USART1_IRQHandler(void);
void USART2_IRQHandler(void);
void USART3_IRQHandler(void);
void UART4_IRQHandler(void);
void DMA2_Stream1_IRQHandler(void);
void DMA2_Stream2_IRQHandler(void);
void DMA2_Stream6_IRQHandler(void);
void DMA2_Stream7_IRQHandler(void);
void USART6_IRQHandler(void);
/* USER CODE BEGIN EFP */
/* USER CODE END EFP */

View File

@@ -38,6 +38,10 @@ extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart3;
extern UART_HandleTypeDef huart6;
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
@@ -45,6 +49,8 @@ extern UART_HandleTypeDef huart2;
void MX_UART4_Init(void);
void MX_USART1_UART_Init(void);
void MX_USART2_UART_Init(void);
void MX_USART3_UART_Init(void);
void MX_USART6_UART_Init(void);
/* USER CODE BEGIN Prototypes */

View File

@@ -44,9 +44,15 @@ void MX_DMA_Init(void)
__HAL_RCC_DMA2_CLK_ENABLE();
/* DMA interrupt init */
/* DMA1_Stream1_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
/* DMA1_Stream2_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
/* DMA1_Stream3_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn);
/* DMA1_Stream4_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Stream4_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream4_IRQn);
@@ -56,9 +62,15 @@ void MX_DMA_Init(void)
/* DMA1_Stream6_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn);
/* DMA2_Stream1_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
/* DMA2_Stream2_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
/* DMA2_Stream6_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Stream6_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream6_IRQn);
/* DMA2_Stream7_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn);

View File

@@ -45,94 +45,81 @@ void MX_GPIO_Init(void)
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOE, TX_S3_Pin|TX_S2_Pin|TX_EN_Pin|TX_S1_Pin
|TX_S0_Pin|RX_S1_Pin|RX_S0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC, W5500_RST_Pin|W5500_INT_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(RS485_EN_GPIO_Port, RS485_EN_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, RS485_1_EN_Pin|RS485_2_EN_Pin|RS485_3_EN_Pin|SPI2_CS_Pin
|BUZZER_Pin|RELAY_4_Pin|RS485_EN_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOE, LED1_Pin|LED2_Pin|LED3_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOE, RS485_4_EN_Pin|RELAY_1_Pin|RELAY_2_Pin|RELAY_3_Pin
|W5500_SPI1_CS_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, LED_CH16_Pin|LED_CH15_Pin|LED_CH14_Pin|LED_CH13_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOD, LED_CH12_Pin|LED_CH11_Pin|LED_CH10_Pin|LED_CH9_Pin
|LED_CH8_Pin|LED_CH7_Pin|LED_CH6_Pin|LED_CH5_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, DS1302_CLK_Pin|DS1302_DIO_Pin|DS1302_RST_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOC, LED_CH4_Pin|LED_CH3_Pin|LED_CH2_Pin|LED_CH1_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(RX_EN_GPIO_Port, RX_EN_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, RX_S3_Pin|RX_S2_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : PEPin PEPin PEPin PEPin
PEPin PEPin */
GPIO_InitStruct.Pin = TX_S3_Pin|TX_S2_Pin|TX_S1_Pin|TX_S0_Pin
|RX_S1_Pin|RX_S0_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : PEPin PEPin PEPin PEPin */
GPIO_InitStruct.Pin = TX_EN_Pin|LED1_Pin|LED2_Pin|LED3_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = RS485_EN_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(RS485_EN_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : PBPin PBPin PBPin PBPin */
GPIO_InitStruct.Pin = LED_CH16_Pin|LED_CH15_Pin|LED_CH14_Pin|LED_CH13_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pins : PDPin PDPin PDPin PDPin
PDPin PDPin PDPin PDPin
PDPin */
GPIO_InitStruct.Pin = LED_CH12_Pin|LED_CH11_Pin|LED_CH10_Pin|LED_CH9_Pin
|LED_CH8_Pin|LED_CH7_Pin|LED_CH6_Pin|LED_CH5_Pin
|RX_EN_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pins : PCPin PCPin PCPin PCPin */
GPIO_InitStruct.Pin = LED_CH4_Pin|LED_CH3_Pin|LED_CH2_Pin|LED_CH1_Pin;
/*Configure GPIO pins : PCPin PCPin */
GPIO_InitStruct.Pin = W5500_RST_Pin|W5500_INT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pins : PBPin PBPin */
GPIO_InitStruct.Pin = RX_S3_Pin|RX_S2_Pin;
/*Configure GPIO pins : PBPin PBPin PBPin PBPin
PBPin PBPin */
GPIO_InitStruct.Pin = RS485_1_EN_Pin|RS485_2_EN_Pin|RS485_3_EN_Pin|SPI2_CS_Pin
|BUZZER_Pin|RS485_EN_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pins : PEPin PEPin PEPin */
GPIO_InitStruct.Pin = RS485_4_EN_Pin|RELAY_1_Pin|W5500_SPI1_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : PEPin PEPin */
GPIO_InitStruct.Pin = RELAY_2_Pin|RELAY_3_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = LED_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : PDPin PDPin PDPin */
GPIO_InitStruct.Pin = DS1302_CLK_Pin|DS1302_DIO_Pin|DS1302_RST_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = RELAY_4_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(RELAY_4_GPIO_Port, &GPIO_InitStruct);
}
/* USER CODE BEGIN 2 */

View File

@@ -19,6 +19,7 @@
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "dma.h"
#include "spi.h"
#include "usart.h"
#include "gpio.h"
@@ -91,8 +92,13 @@ int main(void)
MX_UART4_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
MX_SPI1_Init();
MX_SPI2_Init();
MX_USART3_UART_Init();
MX_USART6_UART_Init();
/* USER CODE BEGIN 2 */
app_init();
//HAL_GPIO_WritePin(JK1_GPIO_Port,JK1_Pin,GPIO_PIN_SET);
/* USER CODE END 2 */
/* Infinite loop */

View File

@@ -0,0 +1,196 @@
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file spi.c
* @brief This file provides code for the configuration
* of the SPI instances.
******************************************************************************
* @attention
*
* Copyright (c) 2026 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "spi.h"
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
SPI_HandleTypeDef hspi1;
SPI_HandleTypeDef hspi2;
/* SPI1 init function */
void MX_SPI1_Init(void)
{
/* USER CODE BEGIN SPI1_Init 0 */
/* USER CODE END SPI1_Init 0 */
/* USER CODE BEGIN SPI1_Init 1 */
/* USER CODE END SPI1_Init 1 */
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN SPI1_Init 2 */
/* USER CODE END SPI1_Init 2 */
}
/* SPI2 init function */
void MX_SPI2_Init(void)
{
/* USER CODE BEGIN SPI2_Init 0 */
/* USER CODE END SPI2_Init 0 */
/* USER CODE BEGIN SPI2_Init 1 */
/* USER CODE END SPI2_Init 1 */
hspi2.Instance = SPI2;
hspi2.Init.Mode = SPI_MODE_MASTER;
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi2.Init.NSS = SPI_NSS_SOFT;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi2.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi2) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN SPI2_Init 2 */
/* USER CODE END SPI2_Init 2 */
}
void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(spiHandle->Instance==SPI1)
{
/* USER CODE BEGIN SPI1_MspInit 0 */
/* USER CODE END SPI1_MspInit 0 */
/* SPI1 clock enable */
__HAL_RCC_SPI1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/**SPI1 GPIO Configuration
PA5 ------> SPI1_SCK
PA6 ------> SPI1_MISO
PA7 ------> SPI1_MOSI
*/
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN SPI1_MspInit 1 */
/* USER CODE END SPI1_MspInit 1 */
}
else if(spiHandle->Instance==SPI2)
{
/* USER CODE BEGIN SPI2_MspInit 0 */
/* USER CODE END SPI2_MspInit 0 */
/* SPI2 clock enable */
__HAL_RCC_SPI2_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**SPI2 GPIO Configuration
PB13 ------> SPI2_SCK
PB14 ------> SPI2_MISO
PB15 ------> SPI2_MOSI
*/
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN SPI2_MspInit 1 */
/* USER CODE END SPI2_MspInit 1 */
}
}
void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
{
if(spiHandle->Instance==SPI1)
{
/* USER CODE BEGIN SPI1_MspDeInit 0 */
/* USER CODE END SPI1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_SPI1_CLK_DISABLE();
/**SPI1 GPIO Configuration
PA5 ------> SPI1_SCK
PA6 ------> SPI1_MISO
PA7 ------> SPI1_MOSI
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
/* USER CODE BEGIN SPI1_MspDeInit 1 */
/* USER CODE END SPI1_MspDeInit 1 */
}
else if(spiHandle->Instance==SPI2)
{
/* USER CODE BEGIN SPI2_MspDeInit 0 */
/* USER CODE END SPI2_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_SPI2_CLK_DISABLE();
/**SPI2 GPIO Configuration
PB13 ------> SPI2_SCK
PB14 ------> SPI2_MISO
PB15 ------> SPI2_MOSI
*/
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
/* USER CODE BEGIN SPI2_MspDeInit 1 */
/* USER CODE END SPI2_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */

View File

@@ -64,9 +64,15 @@ extern DMA_HandleTypeDef hdma_usart1_rx;
extern DMA_HandleTypeDef hdma_usart1_tx;
extern DMA_HandleTypeDef hdma_usart2_rx;
extern DMA_HandleTypeDef hdma_usart2_tx;
extern DMA_HandleTypeDef hdma_usart3_rx;
extern DMA_HandleTypeDef hdma_usart3_tx;
extern DMA_HandleTypeDef hdma_usart6_rx;
extern DMA_HandleTypeDef hdma_usart6_tx;
extern UART_HandleTypeDef huart4;
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart3;
extern UART_HandleTypeDef huart6;
/* USER CODE BEGIN EV */
/* USER CODE END EV */
@@ -197,7 +203,9 @@ void SysTick_Handler(void)
app_timer.increment_int(1);
com_uart1.rx_time_increment_int(&com_uart1,1);
com_uart2.rx_time_increment_int(&com_uart2,1);
com_uart3.rx_time_increment_int(&com_uart3,1);
com_uart4.rx_time_increment_int(&com_uart4,1);
com_uart6.rx_time_increment_int(&com_uart6,1);
/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
/* USER CODE BEGIN SysTick_IRQn 1 */
@@ -212,6 +220,20 @@ void SysTick_Handler(void)
/* please refer to the startup file (startup_stm32f4xx.s). */
/******************************************************************************/
/**
* @brief This function handles DMA1 stream1 global interrupt.
*/
void DMA1_Stream1_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Stream1_IRQn 0 */
/* USER CODE END DMA1_Stream1_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart3_rx);
/* USER CODE BEGIN DMA1_Stream1_IRQn 1 */
/* USER CODE END DMA1_Stream1_IRQn 1 */
}
/**
* @brief This function handles DMA1 stream2 global interrupt.
*/
@@ -226,6 +248,20 @@ void DMA1_Stream2_IRQHandler(void)
/* USER CODE END DMA1_Stream2_IRQn 1 */
}
/**
* @brief This function handles DMA1 stream3 global interrupt.
*/
void DMA1_Stream3_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Stream3_IRQn 0 */
/* USER CODE END DMA1_Stream3_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart3_tx);
/* USER CODE BEGIN DMA1_Stream3_IRQn 1 */
/* USER CODE END DMA1_Stream3_IRQn 1 */
}
/**
* @brief This function handles DMA1 stream4 global interrupt.
*/
@@ -279,7 +315,7 @@ void USART1_IRQHandler(void)
// __HAL_UART_CLEAR_IDLEFLAG(&huart1);
// com_uart1.Rx_IdleInt(&com_uart1);
// }
// /* USER CODE END USART1_IRQn 0 */
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
@@ -304,6 +340,20 @@ void USART2_IRQHandler(void)
/* USER CODE END USART2_IRQn 1 */
}
/**
* @brief This function handles USART3 global interrupt.
*/
void USART3_IRQHandler(void)
{
/* USER CODE BEGIN USART3_IRQn 0 */
/* USER CODE END USART3_IRQn 0 */
HAL_UART_IRQHandler(&huart3);
/* USER CODE BEGIN USART3_IRQn 1 */
/* USER CODE END USART3_IRQn 1 */
}
/**
* @brief This function handles UART4 global interrupt.
*/
@@ -322,6 +372,20 @@ void UART4_IRQHandler(void)
/* USER CODE END UART4_IRQn 1 */
}
/**
* @brief This function handles DMA2 stream1 global interrupt.
*/
void DMA2_Stream1_IRQHandler(void)
{
/* USER CODE BEGIN DMA2_Stream1_IRQn 0 */
/* USER CODE END DMA2_Stream1_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart6_rx);
/* USER CODE BEGIN DMA2_Stream1_IRQn 1 */
/* USER CODE END DMA2_Stream1_IRQn 1 */
}
/**
* @brief This function handles DMA2 stream2 global interrupt.
*/
@@ -336,6 +400,20 @@ void DMA2_Stream2_IRQHandler(void)
/* USER CODE END DMA2_Stream2_IRQn 1 */
}
/**
* @brief This function handles DMA2 stream6 global interrupt.
*/
void DMA2_Stream6_IRQHandler(void)
{
/* USER CODE BEGIN DMA2_Stream6_IRQn 0 */
/* USER CODE END DMA2_Stream6_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart6_tx);
/* USER CODE BEGIN DMA2_Stream6_IRQn 1 */
/* USER CODE END DMA2_Stream6_IRQn 1 */
}
/**
* @brief This function handles DMA2 stream7 global interrupt.
*/
@@ -350,6 +428,20 @@ void DMA2_Stream7_IRQHandler(void)
/* USER CODE END DMA2_Stream7_IRQn 1 */
}
/**
* @brief This function handles USART6 global interrupt.
*/
void USART6_IRQHandler(void)
{
/* USER CODE BEGIN USART6_IRQn 0 */
/* USER CODE END USART6_IRQn 0 */
HAL_UART_IRQHandler(&huart6);
/* USER CODE BEGIN USART6_IRQn 1 */
/* USER CODE END USART6_IRQn 1 */
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */

View File

@@ -27,12 +27,18 @@
UART_HandleTypeDef huart4;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
UART_HandleTypeDef huart3;
UART_HandleTypeDef huart6;
DMA_HandleTypeDef hdma_uart4_rx;
DMA_HandleTypeDef hdma_uart4_tx;
DMA_HandleTypeDef hdma_usart1_rx;
DMA_HandleTypeDef hdma_usart1_tx;
DMA_HandleTypeDef hdma_usart2_rx;
DMA_HandleTypeDef hdma_usart2_tx;
DMA_HandleTypeDef hdma_usart3_rx;
DMA_HandleTypeDef hdma_usart3_tx;
DMA_HandleTypeDef hdma_usart6_rx;
DMA_HandleTypeDef hdma_usart6_tx;
/* UART4 init function */
void MX_UART4_Init(void)
@@ -104,7 +110,7 @@ void MX_USART2_UART_Init(void)
/* USER CODE END USART2_Init 1 */
huart2.Instance = USART2;
huart2.Init.BaudRate = 9600;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
@@ -119,6 +125,64 @@ void MX_USART2_UART_Init(void)
/* USER CODE END USART2_Init 2 */
}
/* USART3 init function */
void MX_USART3_UART_Init(void)
{
/* USER CODE BEGIN USART3_Init 0 */
/* USER CODE END USART3_Init 0 */
/* USER CODE BEGIN USART3_Init 1 */
/* USER CODE END USART3_Init 1 */
huart3.Instance = USART3;
huart3.Init.BaudRate = 115200;
huart3.Init.WordLength = UART_WORDLENGTH_8B;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;
huart3.Init.Mode = UART_MODE_TX_RX;
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart3) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART3_Init 2 */
/* USER CODE END USART3_Init 2 */
}
/* USART6 init function */
void MX_USART6_UART_Init(void)
{
/* USER CODE BEGIN USART6_Init 0 */
/* USER CODE END USART6_Init 0 */
/* USER CODE BEGIN USART6_Init 1 */
/* USER CODE END USART6_Init 1 */
huart6.Instance = USART6;
huart6.Init.BaudRate = 115200;
huart6.Init.WordLength = UART_WORDLENGTH_8B;
huart6.Init.StopBits = UART_STOPBITS_1;
huart6.Init.Parity = UART_PARITY_NONE;
huart6.Init.Mode = UART_MODE_TX_RX;
huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart6.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart6) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART6_Init 2 */
/* USER CODE END USART6_Init 2 */
}
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
@@ -197,17 +261,17 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
/* USART1 clock enable */
__HAL_RCC_USART1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
PB6 ------> USART1_TX
PB7 ------> USART1_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USART1 DMA Init */
/* USART1_RX Init */
@@ -261,17 +325,17 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
/* USART2 clock enable */
__HAL_RCC_USART2_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/**USART2 GPIO Configuration
PD5 ------> USART2_TX
PD6 ------> USART2_RX
PA2 ------> USART2_TX
PA3 ------> USART2_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6;
GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USART2 DMA Init */
/* USART2_RX Init */
@@ -317,6 +381,134 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
/* USER CODE END USART2_MspInit 1 */
}
else if(uartHandle->Instance==USART3)
{
/* USER CODE BEGIN USART3_MspInit 0 */
/* USER CODE END USART3_MspInit 0 */
/* USART3 clock enable */
__HAL_RCC_USART3_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**USART3 GPIO Configuration
PB10 ------> USART3_TX
PB11 ------> USART3_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USART3 DMA Init */
/* USART3_RX Init */
hdma_usart3_rx.Instance = DMA1_Stream1;
hdma_usart3_rx.Init.Channel = DMA_CHANNEL_4;
hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart3_rx.Init.Mode = DMA_NORMAL;
hdma_usart3_rx.Init.Priority = DMA_PRIORITY_LOW;
hdma_usart3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(uartHandle,hdmarx,hdma_usart3_rx);
/* USART3_TX Init */
hdma_usart3_tx.Instance = DMA1_Stream3;
hdma_usart3_tx.Init.Channel = DMA_CHANNEL_4;
hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart3_tx.Init.Mode = DMA_NORMAL;
hdma_usart3_tx.Init.Priority = DMA_PRIORITY_LOW;
hdma_usart3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_usart3_tx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart3_tx);
/* USART3 interrupt Init */
HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART3_IRQn);
/* USER CODE BEGIN USART3_MspInit 1 */
/* USER CODE END USART3_MspInit 1 */
}
else if(uartHandle->Instance==USART6)
{
/* USER CODE BEGIN USART6_MspInit 0 */
/* USER CODE END USART6_MspInit 0 */
/* USART6 clock enable */
__HAL_RCC_USART6_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
/**USART6 GPIO Configuration
PC6 ------> USART6_TX
PC7 ------> USART6_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF8_USART6;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/* USART6 DMA Init */
/* USART6_RX Init */
hdma_usart6_rx.Instance = DMA2_Stream1;
hdma_usart6_rx.Init.Channel = DMA_CHANNEL_5;
hdma_usart6_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_usart6_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart6_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart6_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart6_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart6_rx.Init.Mode = DMA_NORMAL;
hdma_usart6_rx.Init.Priority = DMA_PRIORITY_LOW;
hdma_usart6_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_usart6_rx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(uartHandle,hdmarx,hdma_usart6_rx);
/* USART6_TX Init */
hdma_usart6_tx.Instance = DMA2_Stream6;
hdma_usart6_tx.Init.Channel = DMA_CHANNEL_5;
hdma_usart6_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_usart6_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart6_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart6_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart6_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart6_tx.Init.Mode = DMA_NORMAL;
hdma_usart6_tx.Init.Priority = DMA_PRIORITY_LOW;
hdma_usart6_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_usart6_tx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart6_tx);
/* USART6 interrupt Init */
HAL_NVIC_SetPriority(USART6_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART6_IRQn);
/* USER CODE BEGIN USART6_MspInit 1 */
/* USER CODE END USART6_MspInit 1 */
}
}
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
@@ -355,10 +547,10 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
__HAL_RCC_USART1_CLK_DISABLE();
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
PB6 ------> USART1_TX
PB7 ------> USART1_RX
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
/* USART1 DMA DeInit */
HAL_DMA_DeInit(uartHandle->hdmarx);
@@ -379,10 +571,10 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
__HAL_RCC_USART2_CLK_DISABLE();
/**USART2 GPIO Configuration
PD5 ------> USART2_TX
PD6 ------> USART2_RX
PA2 ------> USART2_TX
PA3 ------> USART2_RX
*/
HAL_GPIO_DeInit(GPIOD, GPIO_PIN_5|GPIO_PIN_6);
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
/* USART2 DMA DeInit */
HAL_DMA_DeInit(uartHandle->hdmarx);
@@ -394,6 +586,54 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
/* USER CODE END USART2_MspDeInit 1 */
}
else if(uartHandle->Instance==USART3)
{
/* USER CODE BEGIN USART3_MspDeInit 0 */
/* USER CODE END USART3_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART3_CLK_DISABLE();
/**USART3 GPIO Configuration
PB10 ------> USART3_TX
PB11 ------> USART3_RX
*/
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_11);
/* USART3 DMA DeInit */
HAL_DMA_DeInit(uartHandle->hdmarx);
HAL_DMA_DeInit(uartHandle->hdmatx);
/* USART3 interrupt Deinit */
HAL_NVIC_DisableIRQ(USART3_IRQn);
/* USER CODE BEGIN USART3_MspDeInit 1 */
/* USER CODE END USART3_MspDeInit 1 */
}
else if(uartHandle->Instance==USART6)
{
/* USER CODE BEGIN USART6_MspDeInit 0 */
/* USER CODE END USART6_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART6_CLK_DISABLE();
/**USART6 GPIO Configuration
PC6 ------> USART6_TX
PC7 ------> USART6_RX
*/
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_6|GPIO_PIN_7);
/* USART6 DMA DeInit */
HAL_DMA_DeInit(uartHandle->hdmarx);
HAL_DMA_DeInit(uartHandle->hdmatx);
/* USART6 interrupt Deinit */
HAL_NVIC_DisableIRQ(USART6_IRQn);
/* USER CODE BEGIN USART6_MspDeInit 1 */
/* USER CODE END USART6_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */

View File

@@ -0,0 +1,729 @@
/**
******************************************************************************
* @file stm32f4xx_hal_spi.h
* @author MCD Application Team
* @brief Header file of SPI HAL module.
******************************************************************************
* @attention
*
* Copyright (c) 2016 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef STM32F4xx_HAL_SPI_H
#define STM32F4xx_HAL_SPI_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal_def.h"
/** @addtogroup STM32F4xx_HAL_Driver
* @{
*/
/** @addtogroup SPI
* @{
*/
/* Exported types ------------------------------------------------------------*/
/** @defgroup SPI_Exported_Types SPI Exported Types
* @{
*/
/**
* @brief SPI Configuration Structure definition
*/
typedef struct
{
uint32_t Mode; /*!< Specifies the SPI operating mode.
This parameter can be a value of @ref SPI_Mode */
uint32_t Direction; /*!< Specifies the SPI bidirectional mode state.
This parameter can be a value of @ref SPI_Direction */
uint32_t DataSize; /*!< Specifies the SPI data size.
This parameter can be a value of @ref SPI_Data_Size */
uint32_t CLKPolarity; /*!< Specifies the serial clock steady state.
This parameter can be a value of @ref SPI_Clock_Polarity */
uint32_t CLKPhase; /*!< Specifies the clock active edge for the bit capture.
This parameter can be a value of @ref SPI_Clock_Phase */
uint32_t NSS; /*!< Specifies whether the NSS signal is managed by
hardware (NSS pin) or by software using the SSI bit.
This parameter can be a value of @ref SPI_Slave_Select_management */
uint32_t BaudRatePrescaler; /*!< Specifies the Baud Rate prescaler value which will be
used to configure the transmit and receive SCK clock.
This parameter can be a value of @ref SPI_BaudRate_Prescaler
@note The communication clock is derived from the master
clock. The slave clock does not need to be set. */
uint32_t FirstBit; /*!< Specifies whether data transfers start from MSB or LSB bit.
This parameter can be a value of @ref SPI_MSB_LSB_transmission */
uint32_t TIMode; /*!< Specifies if the TI mode is enabled or not.
This parameter can be a value of @ref SPI_TI_mode */
uint32_t CRCCalculation; /*!< Specifies if the CRC calculation is enabled or not.
This parameter can be a value of @ref SPI_CRC_Calculation */
uint32_t CRCPolynomial; /*!< Specifies the polynomial used for the CRC calculation.
This parameter must be an odd number between Min_Data = 1 and Max_Data = 65535 */
} SPI_InitTypeDef;
/**
* @brief HAL SPI State structure definition
*/
typedef enum
{
HAL_SPI_STATE_RESET = 0x00U, /*!< Peripheral not Initialized */
HAL_SPI_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */
HAL_SPI_STATE_BUSY = 0x02U, /*!< an internal process is ongoing */
HAL_SPI_STATE_BUSY_TX = 0x03U, /*!< Data Transmission process is ongoing */
HAL_SPI_STATE_BUSY_RX = 0x04U, /*!< Data Reception process is ongoing */
HAL_SPI_STATE_BUSY_TX_RX = 0x05U, /*!< Data Transmission and Reception process is ongoing */
HAL_SPI_STATE_ERROR = 0x06U, /*!< SPI error state */
HAL_SPI_STATE_ABORT = 0x07U /*!< SPI abort is ongoing */
} HAL_SPI_StateTypeDef;
/**
* @brief SPI handle Structure definition
*/
typedef struct __SPI_HandleTypeDef
{
SPI_TypeDef *Instance; /*!< SPI registers base address */
SPI_InitTypeDef Init; /*!< SPI communication parameters */
uint8_t *pTxBuffPtr; /*!< Pointer to SPI Tx transfer Buffer */
uint16_t TxXferSize; /*!< SPI Tx Transfer size */
__IO uint16_t TxXferCount; /*!< SPI Tx Transfer Counter */
uint8_t *pRxBuffPtr; /*!< Pointer to SPI Rx transfer Buffer */
uint16_t RxXferSize; /*!< SPI Rx Transfer size */
__IO uint16_t RxXferCount; /*!< SPI Rx Transfer Counter */
void (*RxISR)(struct __SPI_HandleTypeDef *hspi); /*!< function pointer on Rx ISR */
void (*TxISR)(struct __SPI_HandleTypeDef *hspi); /*!< function pointer on Tx ISR */
DMA_HandleTypeDef *hdmatx; /*!< SPI Tx DMA Handle parameters */
DMA_HandleTypeDef *hdmarx; /*!< SPI Rx DMA Handle parameters */
HAL_LockTypeDef Lock; /*!< Locking object */
__IO HAL_SPI_StateTypeDef State; /*!< SPI communication state */
__IO uint32_t ErrorCode; /*!< SPI Error code */
#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
void (* TxCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Tx Completed callback */
void (* RxCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Rx Completed callback */
void (* TxRxCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI TxRx Completed callback */
void (* TxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Tx Half Completed callback */
void (* RxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Rx Half Completed callback */
void (* TxRxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI TxRx Half Completed callback */
void (* ErrorCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Error callback */
void (* AbortCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Abort callback */
void (* MspInitCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Msp Init callback */
void (* MspDeInitCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Msp DeInit callback */
#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
} SPI_HandleTypeDef;
#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
/**
* @brief HAL SPI Callback ID enumeration definition
*/
typedef enum
{
HAL_SPI_TX_COMPLETE_CB_ID = 0x00U, /*!< SPI Tx Completed callback ID */
HAL_SPI_RX_COMPLETE_CB_ID = 0x01U, /*!< SPI Rx Completed callback ID */
HAL_SPI_TX_RX_COMPLETE_CB_ID = 0x02U, /*!< SPI TxRx Completed callback ID */
HAL_SPI_TX_HALF_COMPLETE_CB_ID = 0x03U, /*!< SPI Tx Half Completed callback ID */
HAL_SPI_RX_HALF_COMPLETE_CB_ID = 0x04U, /*!< SPI Rx Half Completed callback ID */
HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID = 0x05U, /*!< SPI TxRx Half Completed callback ID */
HAL_SPI_ERROR_CB_ID = 0x06U, /*!< SPI Error callback ID */
HAL_SPI_ABORT_CB_ID = 0x07U, /*!< SPI Abort callback ID */
HAL_SPI_MSPINIT_CB_ID = 0x08U, /*!< SPI Msp Init callback ID */
HAL_SPI_MSPDEINIT_CB_ID = 0x09U /*!< SPI Msp DeInit callback ID */
} HAL_SPI_CallbackIDTypeDef;
/**
* @brief HAL SPI Callback pointer definition
*/
typedef void (*pSPI_CallbackTypeDef)(SPI_HandleTypeDef *hspi); /*!< pointer to an SPI callback function */
#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
/**
* @}
*/
/* Exported constants --------------------------------------------------------*/
/** @defgroup SPI_Exported_Constants SPI Exported Constants
* @{
*/
/** @defgroup SPI_Error_Code SPI Error Code
* @{
*/
#define HAL_SPI_ERROR_NONE (0x00000000U) /*!< No error */
#define HAL_SPI_ERROR_MODF (0x00000001U) /*!< MODF error */
#define HAL_SPI_ERROR_CRC (0x00000002U) /*!< CRC error */
#define HAL_SPI_ERROR_OVR (0x00000004U) /*!< OVR error */
#define HAL_SPI_ERROR_FRE (0x00000008U) /*!< FRE error */
#define HAL_SPI_ERROR_DMA (0x00000010U) /*!< DMA transfer error */
#define HAL_SPI_ERROR_FLAG (0x00000020U) /*!< Error on RXNE/TXE/BSY Flag */
#define HAL_SPI_ERROR_ABORT (0x00000040U) /*!< Error during SPI Abort procedure */
#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
#define HAL_SPI_ERROR_INVALID_CALLBACK (0x00000080U) /*!< Invalid Callback error */
#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
/**
* @}
*/
/** @defgroup SPI_Mode SPI Mode
* @{
*/
#define SPI_MODE_SLAVE (0x00000000U)
#define SPI_MODE_MASTER (SPI_CR1_MSTR | SPI_CR1_SSI)
/**
* @}
*/
/** @defgroup SPI_Direction SPI Direction Mode
* @{
*/
#define SPI_DIRECTION_2LINES (0x00000000U)
#define SPI_DIRECTION_2LINES_RXONLY SPI_CR1_RXONLY
#define SPI_DIRECTION_1LINE SPI_CR1_BIDIMODE
/**
* @}
*/
/** @defgroup SPI_Data_Size SPI Data Size
* @{
*/
#define SPI_DATASIZE_8BIT (0x00000000U)
#define SPI_DATASIZE_16BIT SPI_CR1_DFF
/**
* @}
*/
/** @defgroup SPI_Clock_Polarity SPI Clock Polarity
* @{
*/
#define SPI_POLARITY_LOW (0x00000000U)
#define SPI_POLARITY_HIGH SPI_CR1_CPOL
/**
* @}
*/
/** @defgroup SPI_Clock_Phase SPI Clock Phase
* @{
*/
#define SPI_PHASE_1EDGE (0x00000000U)
#define SPI_PHASE_2EDGE SPI_CR1_CPHA
/**
* @}
*/
/** @defgroup SPI_Slave_Select_management SPI Slave Select Management
* @{
*/
#define SPI_NSS_SOFT SPI_CR1_SSM
#define SPI_NSS_HARD_INPUT (0x00000000U)
#define SPI_NSS_HARD_OUTPUT (SPI_CR2_SSOE << 16U)
/**
* @}
*/
/** @defgroup SPI_BaudRate_Prescaler SPI BaudRate Prescaler
* @{
*/
#define SPI_BAUDRATEPRESCALER_2 (0x00000000U)
#define SPI_BAUDRATEPRESCALER_4 (SPI_CR1_BR_0)
#define SPI_BAUDRATEPRESCALER_8 (SPI_CR1_BR_1)
#define SPI_BAUDRATEPRESCALER_16 (SPI_CR1_BR_1 | SPI_CR1_BR_0)
#define SPI_BAUDRATEPRESCALER_32 (SPI_CR1_BR_2)
#define SPI_BAUDRATEPRESCALER_64 (SPI_CR1_BR_2 | SPI_CR1_BR_0)
#define SPI_BAUDRATEPRESCALER_128 (SPI_CR1_BR_2 | SPI_CR1_BR_1)
#define SPI_BAUDRATEPRESCALER_256 (SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0)
/**
* @}
*/
/** @defgroup SPI_MSB_LSB_transmission SPI MSB LSB Transmission
* @{
*/
#define SPI_FIRSTBIT_MSB (0x00000000U)
#define SPI_FIRSTBIT_LSB SPI_CR1_LSBFIRST
/**
* @}
*/
/** @defgroup SPI_TI_mode SPI TI Mode
* @{
*/
#define SPI_TIMODE_DISABLE (0x00000000U)
#define SPI_TIMODE_ENABLE SPI_CR2_FRF
/**
* @}
*/
/** @defgroup SPI_CRC_Calculation SPI CRC Calculation
* @{
*/
#define SPI_CRCCALCULATION_DISABLE (0x00000000U)
#define SPI_CRCCALCULATION_ENABLE SPI_CR1_CRCEN
/**
* @}
*/
/** @defgroup SPI_Interrupt_definition SPI Interrupt Definition
* @{
*/
#define SPI_IT_TXE SPI_CR2_TXEIE
#define SPI_IT_RXNE SPI_CR2_RXNEIE
#define SPI_IT_ERR SPI_CR2_ERRIE
/**
* @}
*/
/** @defgroup SPI_Flags_definition SPI Flags Definition
* @{
*/
#define SPI_FLAG_RXNE SPI_SR_RXNE /* SPI status flag: Rx buffer not empty flag */
#define SPI_FLAG_TXE SPI_SR_TXE /* SPI status flag: Tx buffer empty flag */
#define SPI_FLAG_BSY SPI_SR_BSY /* SPI status flag: Busy flag */
#define SPI_FLAG_CRCERR SPI_SR_CRCERR /* SPI Error flag: CRC error flag */
#define SPI_FLAG_MODF SPI_SR_MODF /* SPI Error flag: Mode fault flag */
#define SPI_FLAG_OVR SPI_SR_OVR /* SPI Error flag: Overrun flag */
#define SPI_FLAG_FRE SPI_SR_FRE /* SPI Error flag: TI mode frame format error flag */
#define SPI_FLAG_MASK (SPI_SR_RXNE | SPI_SR_TXE | SPI_SR_BSY | SPI_SR_CRCERR\
| SPI_SR_MODF | SPI_SR_OVR | SPI_SR_FRE)
/**
* @}
*/
/**
* @}
*/
/* Exported macros -----------------------------------------------------------*/
/** @defgroup SPI_Exported_Macros SPI Exported Macros
* @{
*/
/** @brief Reset SPI handle state.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @retval None
*/
#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
#define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) do{ \
(__HANDLE__)->State = HAL_SPI_STATE_RESET; \
(__HANDLE__)->MspInitCallback = NULL; \
(__HANDLE__)->MspDeInitCallback = NULL; \
} while(0)
#else
#define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPI_STATE_RESET)
#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
/** @brief Enable the specified SPI interrupts.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @param __INTERRUPT__ specifies the interrupt source to enable.
* This parameter can be one of the following values:
* @arg SPI_IT_TXE: Tx buffer empty interrupt enable
* @arg SPI_IT_RXNE: RX buffer not empty interrupt enable
* @arg SPI_IT_ERR: Error interrupt enable
* @retval None
*/
#define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__))
/** @brief Disable the specified SPI interrupts.
* @param __HANDLE__ specifies the SPI handle.
* This parameter can be SPIx where x: 1, 2, or 3 to select the SPI peripheral.
* @param __INTERRUPT__ specifies the interrupt source to disable.
* This parameter can be one of the following values:
* @arg SPI_IT_TXE: Tx buffer empty interrupt enable
* @arg SPI_IT_RXNE: RX buffer not empty interrupt enable
* @arg SPI_IT_ERR: Error interrupt enable
* @retval None
*/
#define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__))
/** @brief Check whether the specified SPI interrupt source is enabled or not.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @param __INTERRUPT__ specifies the SPI interrupt source to check.
* This parameter can be one of the following values:
* @arg SPI_IT_TXE: Tx buffer empty interrupt enable
* @arg SPI_IT_RXNE: RX buffer not empty interrupt enable
* @arg SPI_IT_ERR: Error interrupt enable
* @retval The new state of __IT__ (TRUE or FALSE).
*/
#define __HAL_SPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2\
& (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
/** @brief Check whether the specified SPI flag is set or not.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @param __FLAG__ specifies the flag to check.
* This parameter can be one of the following values:
* @arg SPI_FLAG_RXNE: Receive buffer not empty flag
* @arg SPI_FLAG_TXE: Transmit buffer empty flag
* @arg SPI_FLAG_CRCERR: CRC error flag
* @arg SPI_FLAG_MODF: Mode fault flag
* @arg SPI_FLAG_OVR: Overrun flag
* @arg SPI_FLAG_BSY: Busy flag
* @arg SPI_FLAG_FRE: Frame format error flag
* @retval The new state of __FLAG__ (TRUE or FALSE).
*/
#define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
/** @brief Clear the SPI CRCERR pending flag.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @retval None
*/
#define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) ((__HANDLE__)->Instance->SR = (uint16_t)(~SPI_FLAG_CRCERR))
/** @brief Clear the SPI MODF pending flag.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @retval None
*/
#define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__) \
do{ \
__IO uint32_t tmpreg_modf = 0x00U; \
tmpreg_modf = (__HANDLE__)->Instance->SR; \
CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE); \
UNUSED(tmpreg_modf); \
} while(0U)
/** @brief Clear the SPI OVR pending flag.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @retval None
*/
#define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__) \
do{ \
__IO uint32_t tmpreg_ovr = 0x00U; \
tmpreg_ovr = (__HANDLE__)->Instance->DR; \
tmpreg_ovr = (__HANDLE__)->Instance->SR; \
UNUSED(tmpreg_ovr); \
} while(0U)
/** @brief Clear the SPI FRE pending flag.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @retval None
*/
#define __HAL_SPI_CLEAR_FREFLAG(__HANDLE__) \
do{ \
__IO uint32_t tmpreg_fre = 0x00U; \
tmpreg_fre = (__HANDLE__)->Instance->SR; \
UNUSED(tmpreg_fre); \
}while(0U)
/** @brief Enable the SPI peripheral.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @retval None
*/
#define __HAL_SPI_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE)
/** @brief Disable the SPI peripheral.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @retval None
*/
#define __HAL_SPI_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE)
/**
* @}
*/
/* Private macros ------------------------------------------------------------*/
/** @defgroup SPI_Private_Macros SPI Private Macros
* @{
*/
/** @brief Set the SPI transmit-only mode.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @retval None
*/
#define SPI_1LINE_TX(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_BIDIOE)
/** @brief Set the SPI receive-only mode.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @retval None
*/
#define SPI_1LINE_RX(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_BIDIOE)
/** @brief Reset the CRC calculation of the SPI.
* @param __HANDLE__ specifies the SPI Handle.
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
* @retval None
*/
#define SPI_RESET_CRC(__HANDLE__) do{CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_CRCEN);\
SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_CRCEN);}while(0U)
/** @brief Check whether the specified SPI flag is set or not.
* @param __SR__ copy of SPI SR register.
* @param __FLAG__ specifies the flag to check.
* This parameter can be one of the following values:
* @arg SPI_FLAG_RXNE: Receive buffer not empty flag
* @arg SPI_FLAG_TXE: Transmit buffer empty flag
* @arg SPI_FLAG_CRCERR: CRC error flag
* @arg SPI_FLAG_MODF: Mode fault flag
* @arg SPI_FLAG_OVR: Overrun flag
* @arg SPI_FLAG_BSY: Busy flag
* @arg SPI_FLAG_FRE: Frame format error flag
* @retval SET or RESET.
*/
#define SPI_CHECK_FLAG(__SR__, __FLAG__) ((((__SR__) & ((__FLAG__) & SPI_FLAG_MASK)) == \
((__FLAG__) & SPI_FLAG_MASK)) ? SET : RESET)
/** @brief Check whether the specified SPI Interrupt is set or not.
* @param __CR2__ copy of SPI CR2 register.
* @param __INTERRUPT__ specifies the SPI interrupt source to check.
* This parameter can be one of the following values:
* @arg SPI_IT_TXE: Tx buffer empty interrupt enable
* @arg SPI_IT_RXNE: RX buffer not empty interrupt enable
* @arg SPI_IT_ERR: Error interrupt enable
* @retval SET or RESET.
*/
#define SPI_CHECK_IT_SOURCE(__CR2__, __INTERRUPT__) ((((__CR2__) & (__INTERRUPT__)) == \
(__INTERRUPT__)) ? SET : RESET)
/** @brief Checks if SPI Mode parameter is in allowed range.
* @param __MODE__ specifies the SPI Mode.
* This parameter can be a value of @ref SPI_Mode
* @retval None
*/
#define IS_SPI_MODE(__MODE__) (((__MODE__) == SPI_MODE_SLAVE) || \
((__MODE__) == SPI_MODE_MASTER))
/** @brief Checks if SPI Direction Mode parameter is in allowed range.
* @param __MODE__ specifies the SPI Direction Mode.
* This parameter can be a value of @ref SPI_Direction
* @retval None
*/
#define IS_SPI_DIRECTION(__MODE__) (((__MODE__) == SPI_DIRECTION_2LINES) || \
((__MODE__) == SPI_DIRECTION_2LINES_RXONLY) || \
((__MODE__) == SPI_DIRECTION_1LINE))
/** @brief Checks if SPI Direction Mode parameter is 2 lines.
* @param __MODE__ specifies the SPI Direction Mode.
* @retval None
*/
#define IS_SPI_DIRECTION_2LINES(__MODE__) ((__MODE__) == SPI_DIRECTION_2LINES)
/** @brief Checks if SPI Direction Mode parameter is 1 or 2 lines.
* @param __MODE__ specifies the SPI Direction Mode.
* @retval None
*/
#define IS_SPI_DIRECTION_2LINES_OR_1LINE(__MODE__) (((__MODE__) == SPI_DIRECTION_2LINES) || \
((__MODE__) == SPI_DIRECTION_1LINE))
/** @brief Checks if SPI Data Size parameter is in allowed range.
* @param __DATASIZE__ specifies the SPI Data Size.
* This parameter can be a value of @ref SPI_Data_Size
* @retval None
*/
#define IS_SPI_DATASIZE(__DATASIZE__) (((__DATASIZE__) == SPI_DATASIZE_16BIT) || \
((__DATASIZE__) == SPI_DATASIZE_8BIT))
/** @brief Checks if SPI Serial clock steady state parameter is in allowed range.
* @param __CPOL__ specifies the SPI serial clock steady state.
* This parameter can be a value of @ref SPI_Clock_Polarity
* @retval None
*/
#define IS_SPI_CPOL(__CPOL__) (((__CPOL__) == SPI_POLARITY_LOW) || \
((__CPOL__) == SPI_POLARITY_HIGH))
/** @brief Checks if SPI Clock Phase parameter is in allowed range.
* @param __CPHA__ specifies the SPI Clock Phase.
* This parameter can be a value of @ref SPI_Clock_Phase
* @retval None
*/
#define IS_SPI_CPHA(__CPHA__) (((__CPHA__) == SPI_PHASE_1EDGE) || \
((__CPHA__) == SPI_PHASE_2EDGE))
/** @brief Checks if SPI Slave Select parameter is in allowed range.
* @param __NSS__ specifies the SPI Slave Select management parameter.
* This parameter can be a value of @ref SPI_Slave_Select_management
* @retval None
*/
#define IS_SPI_NSS(__NSS__) (((__NSS__) == SPI_NSS_SOFT) || \
((__NSS__) == SPI_NSS_HARD_INPUT) || \
((__NSS__) == SPI_NSS_HARD_OUTPUT))
/** @brief Checks if SPI Baudrate prescaler parameter is in allowed range.
* @param __PRESCALER__ specifies the SPI Baudrate prescaler.
* This parameter can be a value of @ref SPI_BaudRate_Prescaler
* @retval None
*/
#define IS_SPI_BAUDRATE_PRESCALER(__PRESCALER__) (((__PRESCALER__) == SPI_BAUDRATEPRESCALER_2) || \
((__PRESCALER__) == SPI_BAUDRATEPRESCALER_4) || \
((__PRESCALER__) == SPI_BAUDRATEPRESCALER_8) || \
((__PRESCALER__) == SPI_BAUDRATEPRESCALER_16) || \
((__PRESCALER__) == SPI_BAUDRATEPRESCALER_32) || \
((__PRESCALER__) == SPI_BAUDRATEPRESCALER_64) || \
((__PRESCALER__) == SPI_BAUDRATEPRESCALER_128) || \
((__PRESCALER__) == SPI_BAUDRATEPRESCALER_256))
/** @brief Checks if SPI MSB LSB transmission parameter is in allowed range.
* @param __BIT__ specifies the SPI MSB LSB transmission (whether data transfer starts from MSB or LSB bit).
* This parameter can be a value of @ref SPI_MSB_LSB_transmission
* @retval None
*/
#define IS_SPI_FIRST_BIT(__BIT__) (((__BIT__) == SPI_FIRSTBIT_MSB) || \
((__BIT__) == SPI_FIRSTBIT_LSB))
/** @brief Checks if SPI TI mode parameter is in allowed range.
* @param __MODE__ specifies the SPI TI mode.
* This parameter can be a value of @ref SPI_TI_mode
* @retval None
*/
#define IS_SPI_TIMODE(__MODE__) (((__MODE__) == SPI_TIMODE_DISABLE) || \
((__MODE__) == SPI_TIMODE_ENABLE))
/** @brief Checks if SPI CRC calculation enabled state is in allowed range.
* @param __CALCULATION__ specifies the SPI CRC calculation enable state.
* This parameter can be a value of @ref SPI_CRC_Calculation
* @retval None
*/
#define IS_SPI_CRC_CALCULATION(__CALCULATION__) (((__CALCULATION__) == SPI_CRCCALCULATION_DISABLE) || \
((__CALCULATION__) == SPI_CRCCALCULATION_ENABLE))
/** @brief Checks if SPI polynomial value to be used for the CRC calculation, is in allowed range.
* @param __POLYNOMIAL__ specifies the SPI polynomial value to be used for the CRC calculation.
* This parameter must be a number between Min_Data = 0 and Max_Data = 65535
* @retval None
*/
#define IS_SPI_CRC_POLYNOMIAL(__POLYNOMIAL__) (((__POLYNOMIAL__) >= 0x1U) && \
((__POLYNOMIAL__) <= 0xFFFFU) && \
(((__POLYNOMIAL__)&0x1U) != 0U))
/** @brief Checks if DMA handle is valid.
* @param __HANDLE__ specifies a DMA Handle.
* @retval None
*/
#define IS_SPI_DMA_HANDLE(__HANDLE__) ((__HANDLE__) != NULL)
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
/** @addtogroup SPI_Exported_Functions
* @{
*/
/** @addtogroup SPI_Exported_Functions_Group1
* @{
*/
/* Initialization/de-initialization functions ********************************/
HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi);
HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi);
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi);
void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID,
pSPI_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
/**
* @}
*/
/** @addtogroup SPI_Exported_Functions_Group2
* @{
*/
/* I/O operation functions ***************************************************/
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size,
uint32_t Timeout);
HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData,
uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData,
uint16_t Size);
HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi);
HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi);
HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi);
/* Transfer Abort functions */
HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi);
HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi);
void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi);
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi);
/**
* @}
*/
/** @addtogroup SPI_Exported_Functions_Group3
* @{
*/
/* Peripheral State and Error functions ***************************************/
HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi);
uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* STM32F4xx_HAL_SPI_H */

Some files were not shown because too many files have changed in this diff Show More