diff --git a/.vscode/settings.json b/.vscode/settings.json index faa9b76..676a653 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,8 +4,7 @@ "board.h": "c", "motor.h": "c", "main.h": "c", - "app.h": "c", - "type_traits": "c" + "app.h": "c" }, "C_Cpp.errorSquiggles": "disabled" } \ No newline at end of file diff --git a/Core/Src/stm32l0xx_it.c b/Core/Src/stm32l0xx_it.c index 6c5d0af..21674ef 100644 --- a/Core/Src/stm32l0xx_it.c +++ b/Core/Src/stm32l0xx_it.c @@ -154,7 +154,7 @@ void DMA1_Channel1_IRQHandler(void) /* USER CODE END DMA1_Channel1_IRQn 0 */ /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */ - adc_convert_callback(adc1); + /* USER CODE END DMA1_Channel1_IRQn 1 */ } @@ -168,7 +168,7 @@ void DMA1_Channel2_3_IRQHandler(void) /* USER CODE END DMA1_Channel2_3_IRQn 0 */ /* USER CODE BEGIN DMA1_Channel2_3_IRQn 1 */ - uart_dma_reception_callback(uarts[UART_NUM_1]); + /* USER CODE END DMA1_Channel2_3_IRQn 1 */ } @@ -198,11 +198,13 @@ void TIM21_IRQHandler(void) /* USER CODE BEGIN TIM21_IRQn 0 */ /* USER CODE END TIM21_IRQn 0 */ - /* USER CODE BEGIN TIM21_IRQn 1 */ if (LL_TIM_IsActiveFlag_UPDATE(TIM21)) { + __NOP(); + step_motor_update(motor); LL_TIM_ClearFlag_UPDATE(TIM21); + __NOP(); } /* USER CODE END TIM21_IRQn 1 */ } @@ -216,7 +218,7 @@ void USART1_IRQHandler(void) /* USER CODE END USART1_IRQn 0 */ /* USER CODE BEGIN USART1_IRQn 1 */ - uart_reception_callback(uarts[UART_NUM_1]); + /* USER CODE END USART1_IRQn 1 */ } diff --git a/MDK-ARM/motor/motor.hex b/MDK-ARM/motor/motor.hex index e9fd637..e221ff3 100644 --- a/MDK-ARM/motor/motor.hex +++ b/MDK-ARM/motor/motor.hex @@ -1,34 +1,34 @@ :020000040800F2 -:10000000504600209D0100081D140008FD05000851 +:10000000104300209D0100085D1B0008890D0008B9 :1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000011150008A2 -:1000300000000000000000001F1400081315000855 +:10002000000000000000000000000000511C00085B +:1000300000000000000000005F1B0008531C0008C7 :10004000AF010008AF010008AF010008AF010008D0 :10005000AF010008AF010008AF010008AF010008C0 -:10006000AF010008DD050008ED050008AF0100083C +:10006000AF010008850D0008870D0008AF010008EA :10007000AF010008AF010008AF010008AF010008A0 -:10008000AF010008F1150008AF01000800000000F2 -:10009000D9150008AF010008AF010008AF01000842 -:1000A000AF010008AF010008AF01000815160008F5 +:10008000AF010008411D0008AF010008000000009A +:10009000191D0008AF010008AF010008AF010008FA +:1000A000AF010008AF010008AF010008651D00089E :1000B000AF010008AF01000800000000AF01000818 :1000C00000F002F800F03EF80CA030C80838241800 :1000D0002D18A246671EAB4654465D46AC4201D180 :1000E00000F030F87E460F3E0FCCB6460126334274 -:1000F00000D0FB1AA246AB46334318474C21000000 -:100100006C210000103A02D378C878C1FAD852079F +:1000F00000D0FB1AA246AB46334318473C29000008 +:100100005C290000103A02D378C878C1FAD85207A7 :1001100001D330C830C101D504680C6070470000BD :100120000023002400250026103A01D378C1FBD813 :10013000520700D330C100D50B6070471FB51FBDFB -:1001400010B510BD00F00DFA1146FFF7F7FF01F0F2 -:1001500077FC00F025FA03B4FFF7F2FF03BC00F0D0 -:100160002BFA000070B505460C46164602E00FCC8F +:1001400010B510BD00F0E0FD1146FFF7F7FF02F01B +:1001500031F800F0F8FD03B4FFF7F2FF03BC00F044 +:10016000FFFD000070B505460C46164602E00FCCB8 :100170000FC5103E102EFAD2082E02D303CC03C5B1 :10018000083E042E07D301CC01C5361F03E02178B9 :100190002970641C6D1C761EF9D270BD074880471B :1001A00007480047FEE7FEE7FEE7FEE7FEE7FEE75B -:1001B00004480549054A064B70470000D51500085C -:1001C000C1000008503C0020504600205040002054 -:1001D0005040002001E004C0091F0429FBD28B0716 +:1001B00004480549054A064B70470000151D000814 +:1001C000C10000081039002010430020103D00201D +:1001D000103D002001E004C0091F0429FBD28B0759 :1001E00001D50280801CC90700D002707047002929 :1001F0000BD0C30702D00270401C491E022904D351 :10020000830702D50280801C891EE3E70022EEE707 @@ -54,511 +54,638 @@ :100340005241411A00D20146634652415B101046A9 :1003500001D34042002B00D54942704763465B10F1 :1003600000D3404201B50020C046C04602BD7047E0 -:1003700070477047F0B5FF252D04C609C209FF2755 -:1003800004462E400137CB093E4348402A402B40CB -:100390000746002A6BD0002B69D0AA4267D0AB4237 -:1003A00065D0002800DA32460125ED0529432C43AB -:1003B00009022002090AD21A4B0C7F24E31A434C8B -:1003C000000A7C44E35C7D242404121914145B00AD -:1003D000A218884201D3521C00E0400049420C465A -:1003E0005C4324115C43DB016415E318040A5C439D -:1003F000C502200D0C4644436419250A5D432303BE -:10040000EC0C0D46654300030019EB184C42A34267 -:1004100001D35B18401CD4052018002B07D05B00CB -:10042000C91804D3401C002901D1400840003F21D5 -:1004300089048A4209D3002A08DC1106090F04D076 -:10044000032149074018C00FC007F0BD0122410039 -:10045000120689187F2252069142F6D205214907D9 -:10046000C84201D59010F0BDFF20C005F0BD002F9F -:1004700000DA32461648AA4207D2AB4205D2190228 -:10048000090E17D0F80FC007F0BDFF2563002D0639 -:10049000AB42F9D84900A942F6D8AB4201D1A942F2 -:1004A000F2D0A94201D1002101E061004908D00544 -:1004B0000843F0BD1102090EFBD0FF200243D00516 -:1004C000F0BD0A460146104654E70000421E0000F7 -:1004D0000000C07F0102C21504D00123DB071943CD -:1004E000002A0ADB9E239A1A02D40846D04070479D -:1004F000FF2241001206914201D900207047C01727 -:10050000C04370471F22030C02D10F2200041CD0ED -:10051000030E01D10002083A030F01D10001121F9E -:10052000830F01D18000921E002801DB4000521E83 -:10053000D2055118021251181922904004D3491CB7 -:10054000002801D14908490008467047C10FC90772 -:1005500000D04042012292071143D3E701218907CD -:10056000D0E7754600F024F8AE46050069465346CC -:10057000C008C000854618B020B5FFF719FE60BC62 -:1005800000274908B6460026C0C5C0C5C0C5C0C5BD -:10059000C0C5C0C5C0C5C0C5403D49008D467047F7 -:1005A00010B50446C046C0462046FFF7D4FD10BD36 -:1005B00000487047EC3B002001491820ABBEFEE725 -:1005C0002600020070470000002801D0012070477B -:1005D00001480180FEE70000A800002010B5024895 -:1005E00007C801F0D3F810BD8000002010B5024804 -:1005F000006801F018FC10BDE0390020FEE70000A3 -:1006000070B583680022DB07DB0F02D001221046A1 -:1006100070BD8C684B68C5682343CC68054E354077 -:100620002C432343C360036909689B009B080B4369 -:100630000361ECE7C73FFFFF30B583680022DB07AB -:10064000DB0F02D00122104630BD18C94D6823438C -:100650000C6889682C4323430B43C168024C21403A -:100660000B43C360EFE700003CC2FEFF044A511891 -:100670002039C97F4258520852004250704700004A -:10068000CF210008044A51182039C97F425801235C -:100690001A43425070470000CF210008054B10B5A7 -:1006A00059182039C97F435803242403A343134313 -:1006B000435010BD71210008054B59182039C97FDE -:1006C000001D0B581B0C1B0413430B5070470000FC -:1006D000CF210008054B10B559182039C97F435860 -:1006E000034C23401343435010BD00007121000808 -:1006F000EFBFFFFF054B10B559182039C97F43588C -:100700008024A3431343435010BD0000712100080F -:10071000054B10B559182039C97F43580324A4024A -:10072000A3431343435010BD71210008054B10B57E -:1007300059182039C97F43582024A34313434350F9 -:1007400010BD000071210008054B10B55918203963 -:10075000C97F43584024A3431343435010BD0000B6 -:100760007121000889000F23091F10B58B408030CC -:10077000846A8A409C431443846210BD054B10B5C3 -:1007800059182039C97F435803242402A343134333 -:10079000435010BD7121000810B504790023254A8B -:1007A0000168002C3DD0002942D04479002C0FD0A4 -:1007B000012C15D0022C16D001238179002937D0C5 -:1007C000012918D002291FD0032921D001232FE0AD -:1007D00054688C435460016814680C431460ECE75F -:1007E00014688C4301E014680C4314600168546879 -:1007F0000C435460E1E70168D4688C43D46000681E -:1008000091680143916013E0016894688C4302E0B1 -:10081000016894680C4394600068D1680143D1601A -:1008200006E014688C43146000685168814351608D -:10083000184610BD00040140F0B500234CE001242F -:100840009C40224047D04C68012C01D0022C10D192 -:100850008D688668144654436700E719BE436C43AD -:1008600026438660CD680C684668A6436C432643E1 -:1008700046600F69C6681446544365006519AC4666 -:10088000AE4325467D432E43C6604D68022D1BD1E5 -:10089000FF2A0CD84F69056A1646224672437243F6 -:1008A0001601B61AB5437A43154305620CE0150AE2 -:1008B0002A466A436A436A4315014E69476AAD1A7C -:1008C000AF437243174347624A6805686646B543BB -:1008D0005443254305605B1C0A681446DC40AED1D6 -:1008E0000020F0BD08B50449CA6A0243CA62C96A59 -:1008F0000140009108BD00000010024010B57D21AC -:10090000C900FFF787FC0449401E48610020886148 -:100910000520086110BD000000E000E010B50446AD -:1009200000F0A4FD206000F07BFD606000F086FD1B -:10093000A060606800F08EFDE06010BDF8B5204D4D -:1009400001270024AE00FF03032802D00C2824D086 -:1009500021E000F03BF81B4940182ED0012809D0B7 -:10096000022813D000F082FD00F05AFD00F072FD65 -:10097000044610E000F032F800280CD000F036F801 -:10098000002801D02C4606E0344604E000F036F89A -:10099000002800D03C462046F8BD00F017F80A4970 -:1009A00040180AD00428E5D00828EFD000F05EFDFA -:1009B00000F036FD00F042FDDAE700F057FDD7E722 -:1009C00000093D00FFFFFCFFFCFFF3FF0249C9687F -:1009D000014000040843704740100240024800688C -:1009E0004007C00F70470000001002400248006836 -:1009F000C006C00F704700000010024002480069A6 -:100A00008005C00F70470000401002400149086097 -:100A10007047000000000020F0B502680124A40720 -:100A2000134D144E144FA04205D0A84203D0B0423B -:100A300001D0B84203D170239A434B681A43A042B5 -:100A400005D0A84203D0B04201D0B84204D103235C -:100A50001B029A43CB681A4302608A68C262098803 -:100A6000816241690122114341610020F0BD000013 -:100A7000000400400008014000140140F0B50124CA -:100A800000237025012926D003273F0210293BD0DF -:100A9000FF39491E57D00F252D02A94251D1016AB5 -:100AA0002603B1430162016A4468C569BD43072753 -:100AB0003F03BD4317683F023D437700B943D76802 -:100AC0003F033943B1435668446036033143C5613F -:100AD0009268026433E0016A490849000162016AD0 -:100AE00046688469A408A400AC4315682C43022519 -:100AF000A943D568294349085568490029434660F8 -:100B00008461926842631AE0016A1026B14301626F -:100B1000016A45688469BC4307273F03BC431768E3 -:100B20003F023C432027B943D7683F013943B143D3 -:100B30005668456036013143846192688263016280 -:100B40001C462046F0BD016AFF270137B943016208 -:100B5000016A4468C669B608B600AE4315682E43FC -:100B60007D00A943D5682D0229435568B9432D025C -:100B700029434460C6619268C263E0E77FB50446DA -:100B800000680D46012630404CD1E9686868AA69C2 -:100B900008432969114308432168244A1140084346 -:100BA0002060A868616803221203914301436160D9 -:100BB0006869A168121191430143A1601C488442F5 -:100BC00001D1032003E01B48844203D10C20FFF72E -:100BD000B5FE09E01848844202D01848844221D169 -:100BE0006846FFF79BFE029800281BD02968002961 -:100BF00018D00123AA690026DB039A420CD14000D9 -:100C00004A088018FFF706FB0D4980B20140000733 -:100C1000420F0A43E26005E04A081018FFF7FAFAAB -:100C200080B2E060304604B070BD0000F369FFEFB1 -:100C30000038014000440040004C0040005000409B -:100C4000F0FF000008B506490A690092421C00D076 -:100C5000401C0A69D20300D5401E0028F9D108BD06 -:100C600000E000E0F0B591B014216846FFF7D0FA3B -:100C700000200590069007900890182109A8FFF71A -:100C8000C7FA4B48406B0121490208434849486371 -:100C9000486B4915084046490F90C96A0420444AE8 -:100CA0000143D162D16A0324014000200A9408273D -:100CB0000F910D90099709A93E48FFF7BDFD3E49E8 -:100CC0003D4880318A6A120912018A623B490A78DA -:100CD00083583B4D2B4083500B78BA02C5582603EE -:100CE000B5431543C5500B78C5582026B543354349 -:100CF000C5500B78C5584026B543C5500B78C5582C -:100D00008026B5433543C5500B78C5582602B543F8 -:100D100086153543C550097803154558A602B543D5 -:100D20001D434550274DA86A1043A862002001A921 -:100D3000009015C1049069462846FFF77DFC69695B -:100D40000720814301436961286940084000286108 -:100D5000E86804218843E8601B490868BA059043A5 -:100D6000086068680421884368606868B843686000 -:100D700008070590002006900790089005A92846CE -:100D8000FFF73EFCA8681149084079060843A860AF -:100D900010480F490068FFF73DFA0A214843FFF762 -:100DA00039FA00E0401E0028FCD111B0F0BD00006F -:100DB0000010024000080050000002405C210008C2 -:100DC000EFBFFFFF0024014008270140E8FFFF7F3D -:100DD000400D03000000002008B50B480121026B04 -:100DE0000A430263006B084000900321092000F0D1 -:100DF0003FFC092000F024FC01210A2000F038FC0F -:100E00000A2000F01DFC08BD00100240F0B589B0BA -:100E100000240694182168460794FFF7F9F9042086 -:100E2000FFF760FD8020FFF75DFD0120FFF75AFD11 -:100E30000220FFF757FD0820FFF754FD0120C14FA6 -:100E40000003B8624000B86103250090694601952F -:100E50000494BD48FFF7F0FC380100906946019505 -:100E60000494B948FFF7E8FC7801009069460195C1 -:100E70000494B548FFF7E0FC01266946B2480096A5 -:100E800001950494FFF7D8FC022000906946019573 -:100E90000494AD48FFF7D0FC04200090694601950A -:100EA0000494A948FFF7C8FC05206946000700968E -:100EB00001950494FFF7C0FC0220009005206946CC -:100EC000019504940007FFF7B7FC0420009005206B -:100ED0006946019504940007FFF7AEFC08200090D6 -:100EE00005206946019504940007FFF7A5FC102032 -:100EF000009005206946019504940007FFF79CFCCB -:100F00002020009005206946019504940007FFF712 -:100F100093FC402000900520694601950494000749 -:100F2000FFF78AFC80200090052069460195049413 -:100F30000007FFF781FC102000906946019504949A -:100F40008148FFF779FC20200090694601950494C0 -:100F50007D48FFF771FC6946384600960195049478 -:100F6000FFF76AFC02200090694601950494384618 -:100F7000FFF762FC0420009069460195049438460E -:100F8000FFF75AFCB0020090694601950494384678 -:100F9000FFF752FCF0020090694601950494384630 -:100FA000FFF74AFC30030090022002900196039460 -:100FB000694604943846FFF73FFC70030090022016 -:100FC000029001960394694604943846FFF734FC76 -:100FD000402000906946019504945B48FFF72CFC83 -:100FE000802000906946019504945748FFF724FC3F -:100FF000300200906946019504945348FFF71CFCA9 -:10100000700200906946019504944F48FFF714FC64 -:101010003002009005206946019504940007FFF70F -:101020000BFCF0020090052069460195049400072E -:10103000FFF702FC300300900520694601950494F7 -:101040000007FFF7F9FBF0030090052069460195C2 -:1010500004940007FFF7F0FBB00200906946019589 -:1010600004943948FFF7E8FBF002009069460195C7 -:1010700004943548FFF7E0FB300300906946019582 -:1010800004943148FFF7D8FB04200090694601958D -:1010900004942E48FFF7D0FB082000906946019584 -:1010A00004943846FFF7C8FB10200090694601956C -:1010B00004943846FFF7C0FB202000906946019554 -:1010C00004943846FFF7B8FB40200090694601952C -:1010D00004943846FFF7B0FB8020009069460195E4 -:1010E00004943846FFF7A8FB30020090694601954A -:1010F00004943846FFF7A0FB700200906946019502 -:1011000004943846FFF798FB114880680F210903C3 -:101110008843310308430E498860F868B1078000AE -:1011200080080843F8603868800080083860C81379 -:101130000690684606774477867706A8FFF72CFB6B -:1011400009B0F0BD0004005000080050000C005031 -:101150000C000140F0B58FB0002406940794089469 -:1011600009940A940B940C94182168460D94FFF787 -:101170004FF82E4904204A6B02434A63496B0140F1 -:101180000E910021142000F095FA142000F064FA6A -:101190001F20694608832648264E0890079406A912 -:1011A00009943046FFF738FC3168802211433160E2 -:1011B000214881781F4818300D1828681E4F0821D3 -:1011C000FF1DBA7891400843286060200A90FF20F4 -:1011D000F5300C900B940AAA10210D943046FFF7BD -:1011E0004DFC2868BA7804219140884328607068D3 -:1011F000702188437060B06880218843B0600B49DB -:101200000220CA6A0243CA62C96A029401404003CA -:101210000090022001900E91062005900394049402 -:1012200069460648FFF708FB0FB0F0BD001002400A -:10123000E70300000008014063210008000400509B -:1012400010B586B0002415490094019402940394CB -:101250008A6B102002438A63896B01400491214606 -:10126000112000F027FA112000F0F6F90C48694629 -:101270000880019463200B4C02902046FFF7CCFBC2 -:1012800020688021884320606068702290436060FD -:10129000A0688843A06006B010BD000000100240A6 -:1012A0007F0C000000100040F0B58FB01C2106A894 -:1012B000FEF7AEFF18216846FEF7AAFF524801214B -:1012C000426B89030A434263426B0A400D92C26A31 -:1012D00001210A43C262C06A042708400D904802F7 -:1012E00005970024009002260325052003946946F3 -:1012F0000196029504940007FFF79EFA7002059785 -:101300000090052003946946019602950494000715 -:10131000FFF792FA3D4D032211462846FFF722FAC5 -:10132000002203212846FFF7D5F900220321284691 -:10133000FFF7B4F9002203212846FFF7F7F900224E -:1013400003212846FFF700FA802203212846FFF7F1 -:10135000D1F9002203212846FFF710FA00220321C9 -:101360002846FFF7D5F9032202212846FFF7FAF9AC -:10137000102202212846FFF7ADF90022022128465B -:10138000FFF78CF9002202212846FFF7CFF900224F -:1013900002212846FFF7D8F9802202212846FFF7CC -:1013A000A9F9002202212846FFF7E8F900220221CC -:1013B0002846FFF7ADF9164801680902090A6A03D1 -:1013C0001143016001251349D0100860E12040025B -:1013D00006900794089409940B940C940C200E4CDE -:1013E0000A9006A92046FFF7C9FB60680921C902D7 -:1013F00088436060A0682A218843A0602068284351 -:1014000020600FB0F0BD000000100240000002405C -:1014100018E400E000E100E000380140FEE770471A -:101420000449C968F0221140034A0909515CC840C7 -:101430007047000000100240782100080349C96885 -:10144000034A4905490F515CC840704700100240EB -:10145000912100080349C968034A8904490F515C76 -:10146000C8407047001002409121000810B50F4A93 -:10147000D1680C2001400E4805D0042909D0082964 -:101480000FD00C290FD051680904490F491C88401E -:1014900010BDFFF7ABFA002801D0064810BD064882 -:1014A00010BD064810BD00F00BF810BD0010024042 -:1014B0000080000000093D000024F40000127A00C2 -:1014C00010B50E4CE06801210904084205D1FFF770 -:1014D0008DFA00280FD00A4A00E00A4AE0680002AC -:1014E000810FE068084B8002000F185C491C5043D4 -:1014F000FEF790FE10BD054AF0E700000010024024 -:1015000000093D0000127A00882100080024F40040 -:101510007047704710B52B48012102688A430A437F -:1015200002600168C907C90FFBD027480122016882 -:10153000D2020323DB029943114301604168C906CB -:10154000C90FFBD121480168012212041143016037 -:1015500001688903C90FFBD0C168FD2212049143C1 -:101560004D2212041143C160016801221206114389 -:10157000016001688901C90FFBD0C168F022914365 -:10158000C160C168072212029143C160C168D200E4 -:101590009143C160C26803218A430A43C2600C229E -:1015A000C16811400C29FBD1094C2046FFF7A6F970 -:1015B0002046FFF72BFA05484030C16889088900AA -:1015C000C16010BD002002400070004000100240C9 -:1015D0000048E8017047000004480169C907C90FC5 -:1015E00002D00121C9430161704700000008014099 -:1015F00006480169C907C90F06D005490A68521C87 -:101600000A600121C94301617047000000100040D9 -:101610006400002010B50248006800F0A3FC10BD73 -:10162000E039002030B47446641E2578641CAB4257 -:1016300000D21D46635D5B00E31830BC1847000014 -:10164000002805DBC106C90E012088400149086059 -:101650007047000000E100E0002805DBC106C90E6C -:1016600001208840014908607047000000E100E067 -:101670008307FF22DB0E9A408907090E9940002854 -:1016800008DB830809489B001818036893430B4341 -:10169000036070470007000F0838830804489B0068 -:1016A0001818C36993430B43C361704700E400E01B -:1016B00000ED00E08307FF22DB0E9A408907090E48 -:1016C0009940002808DB830809489B001818036824 -:1016D00093430B43036070470007000F08388308EB -:1016E00004489B001818C36993430B43C3617047B8 -:1016F00000E400E000ED00E00549103000E0001DCE -:101700000268002A02D14A689042F8D3704700006C -:101710002000002010B5044C206801E0FFF7ECFF2A -:1017200061688842FAD310BD2000002001E00170FA -:10173000401C1346521E92B2002BF8D170470FB4D2 -:101740000098694689880069814302D0002004B06E -:1017500070470120FBE70FB46946009889888162D1 -:1017600004B070470FB4694600988988816104B05D -:1017700070470FB40099684680884A691346034051 -:101780001B04904303438B6104B070470A689207BF -:10179000D20F09D002224A608268074B1A401032E9 -:1017A0008260064A0120107008680007C00F01D04F -:1017B0000820486070470000E8FFFF7F74000020A9 -:1017C000034610B50020084A01465C0018234B432D -:1017D0009B181B5B491C181889B21429F6D31421D5 -:1017E000FEF718FD80B210BD00380020F8B50D4698 -:1017F0000446234901204870E06817468607E068E0 -:10180000B60F80088000E060A06817218843C907F0 -:101810000843A060A068C00FFCD1E0688008800089 -:101820003043E0600A20FFF70DFAA0681549084030 -:10183000401CA0600A20FFF705FA1348F023C019E6 -:101840002038C27F291D57583F0C3F041F43575073 -:1018500021464031C27F2B460833D150C27F0B490D -:101860001B1DD150C07F2958012211432950032E3E -:1018700004D1A06803490840001DA060F8BD000025 -:1018800074000020E8FFFF7FC82100080038002016 -:1018900010B500F04FF810BD10B500F055F810BDB0 -:1018A00070B500201D4C98B00146606014221C48A1 -:1018B000FFF73CFF002000F025F9012000F0F2F8CE -:1018C00005466060182217490CA8FEF74BFC154925 -:1018D0001822183112A8FEF745FC144810221249AC -:1018E00009AB07C3182212A903A8FEF73BFC0FABF4 -:1018F00007CB6B4607C32846EE6A0CAD0ECDB0474A -:10190000083407CCFFF772FF0948026801210A4337 -:101910000260C2680A43C26018B070BD780000203F -:10192000E0390020D8210008000801400AD7A33C74 -:1019300000100040034900200860083108600831A9 -:101940000860704708000020F8B50025684605705B -:10195000254E264C306800281DD0152824D0684616 -:1019600035600570684605701F4908310868002811 -:1019700020D01F2822D068460D600570684605708B -:10198000194E1036306800281ED02A2826D0684606 -:1019900035600570F8BD0920FFF712FF1449886013 -:1019A000206870601520306070682168081A0A2865 -:1019B000D8D3F0E7206848601F2008604868226894 -:1019C000101A0A28DAD3F5E77D20C00000F028F9C4 -:1019D00008490870206870602A20306070682168AB -:1019E000081A6428F0D2F8BD080000206400002026 -:1019F0009C0000200400002070B50D46064618210A -:101A0000002000F0F7F8040001D0012000E00020E1 -:101A10003621FEF7D9FD2660A5800548A06005485F -:101A2000E0600548206105486061204670BD000007 -:101A30006517000857170008731700083F170008BC -:101A400008B516480121426B0A434263416BC9073E -:101A5000C90F0091826B01040A438263806B0840C6 -:101A600000900F48C16903220902090A9207114335 -:101A7000C161FFF74FFDFFF7C9F9FFF7ADF9FFF7B8 -:101A8000F1F8FFF711FCFFF7DBFBFFF763FBFFF754 -:101A900007FFFFF7FDFEFFF7FFFEFCE70010024027 -:101AA00004ED00E070B505464021002000F0A2F8EA -:101AB000040001D0012000E000206021FEF784FD39 -:101AC00000222146402001E00A70491C0346401EC6 -:101AD00080B2002BF8D12570012D01D0002070BDFF -:101AE0000448E06204482063044860630448A0633B -:101AF000204670BD511C0008A11C0008DD1D000817 -:101B0000831D0008F0B5054684000A480A4F0059B5 -:101B1000E61942000021306900F07CF805480021F8 -:101B200010300259B06800F075F801207919087674 -:101B3000F0BD0000B021000828000020F8B51D4EBF -:101B400005467019007E00240F46002802D1316836 -:101B500028468847002F29D01748AD0041593846FC -:101B6000FEF758FB0246002900D0421C12480838F4 -:101B70004159491E1AD4AF1938694B00C35A002B7A -:101B800005D0002494420FD1002093B206E0641CDB -:101B9000F8E70E1876003C69401CA3539042F8D336 -:101BA000054840594843F8BD491EE6D50020C043CA -:101BB000F8BD000028000020B821000870B50B49CE -:101BC000002380000A4C09581A46001906E00469EF -:101BD0005500645B002C00D05B1C521C9142F6D86F -:101BE00064205843FEF716FBC0B270BDB021000858 -:101BF0002800002010B50446FFF7A0FF411C05D0C7 -:101C0000034AA10089188968081810BD002010BD7A -:101C10002800002001E00170401C521EFBD27047DA -:101C200070B5FEF79BFC084C05462068FEF796FC55 -:101C30002946FEF79FFB00212160044900F036FA97 -:101C4000FEF748FC70BD0000680000200000C8429C -:101C50000FB4F8B5139F159E149D040001D0012008 -:101C600000E000200621FEF7AFFC6846018C0798D3 -:101C7000FFF7C2FE60606846018F0D98FFF7BCFE5B -:101C800021460831E1C12868400840002860E0682A -:101C90002169026A8A430262F8BC08BC04B0184792 -:101CA000FEB50D46040001D0012000E00020112106 -:101CB000FEF78AFC241D01D0012000E00020132142 -:101CC000FEF782FC012725766776002D2568696975 -:101CD0002869019100902ED00820281801782E79CB -:101CE0000A464178EB6809020A438178C078090402 -:101CF0000A4331466E79000636023143AE7902431B -:101D00003604E879314300062E78014330466E7878 -:101D100036023043AE78ED78360430432D06284342 -:101D20009847A068016839430160A068E168026AC9 -:101D30000A430262FEBD0C20281801782E790B465A -:101D40004178AA6809020B438178C07809040B43E3 -:101D500031466E79000636023143AE7903433604CC -:101D6000E879314300062E78014330466E7836021A -:101D70003043AE78ED78360430432D062843904743 -:101D8000CFE7F8B516460F46050001D0012000E068 -:101D900000202B21FEF718FC2C1D01D0012000E0B3 -:101DA00000202D21FEF710FC607E012811D038465E -:101DB000FEF7D4FB2169FEF7DDFAFEF78BFBE0614D -:101DC00000206062E069002804D0E26A31462846BB -:101DD0009047F8BD216B28468847F8BD70B50500CF -:101DE00001D0012000E000201C21FEF7EDFB2C1D9E -:101DF00001D0012000E000201E21FEF7E5FB0020BD -:101E000060766061E061A168086840084000086091 -:101E1000A068E168026A8A430262A16B002901D0CE -:101E20002846884770BD10B5040001D0012000E0AD -:101E30000020FF216B31FEF7C7FB2169A068FEF788 -:101E400015FC2069401C0300FFF7ECFB083B050C68 -:101E5000131B232B333BA06801688907C90F30D0BF -:101E600002212DE0A06801688906C90F29D0202130 -:101E700026E0A06801688905C90F22D00121490226 -:101E80001EE0A06801688904C90F1AD00121490326 -:101E900016E0A06801688903C90F12D00121490426 -:101EA0000EE0A06801688902C90F0AD00121490526 -:101EB00006E0A06801688901C90F02D00121490626 -:101EC0004160EFF31081012282F31088606802689C -:101ED00040231A43026081F3108801212A20015512 -:101EE0002069401C0300FFF79DFB0813050C141C20 -:101EF000242C3413A06801680907C90F08D00821F1 -:101F000005E0A06801680906C90F01D08021416081 -:101F100010BDA06801680905C90FF9D00121C902E7 -:101F2000F5E7A06801680904C90FF1D00121C903D0 -:101F3000EDE7A06801680903C90FE9D00121C904D0 -:101F4000E5E7A06801680902C90FE1D00121C905D0 -:101F5000DDE7A06801680901C90FD9D00121C906D0 -:101F6000D5E7000070B5040001D0012000E000209A -:101F7000FF212431FEF728FB6068016800258906EF -:101F8000C90F002915D0C1698906C90F11D0416A4E -:101F9000A08AA369421CA2821954A07D002845D1C1 -:101FA000E36A002B03D0A28A2078A1699847A58212 -:101FB0003CE00168C906C90F38D0C069C006C00F2F -:101FC00034D0A07D01282DD1E168A068FEF74EFB3A -:101FD000354AE168A06851182039C97F001D0958A9 -:101FE000A08B411A8AB2A282E36A002B11D0002A88 -:101FF0000FD082420DD82078A16998470022A08B8B -:10200000A16901E00A70491C0346401E80B2002B02 -:10201000F8D1A28BE168A068FEF74EFBE168A068EA -:10202000FEF730FBA58260681021016260680168DC -:102030004906C90F0AD0C0694006C00F06D0206B00 -:10204000002800D080476068402101626068016814 -:10205000C905C90F05D0C169C907C90F01D0012140 -:1020600001626068C1698907C90F05D0C169890724 -:10207000C90F01D0022101626068C1694907C90F17 -:1020800005D0C1694907C90F01D004210162606808 -:10209000C1690907C90F05D0C1690907C90F01D076 -:1020A0000821016270BD0000CF21000870B5420018 -:1020B00064414B005C41120E39D01B0E38D0FF2A10 -:1020C0003CD0FF2B3AD040024902400A490A0600A0 -:1020D00045184E43000A090AD2184843ED017F3AD9 -:1020E0000104731A4019190C4318990F04D00121E7 -:1020F0005B0849075B1A521CD80904D3401CF5033E -:1021000001D19D0607D0FF2A08D2D50506D0E407E5 -:102110002043401970BD0125A843F4E7002A01DCE3 -:10212000E00770BD2402FF202043C00570BD1B0ED8 -:10213000FF2A03D0FF2B01D0E00770BDFF2645002A -:102140003606B54206D84D00B54203D8D218FF2A4C -:1021500000D0E7E7004870BD0000C07F081C304495 -:10216000586C80000000000400040000080000001B -:1021700008081C3044586C8000000000000000007B -:102180000102030406070809030406080C101820BE -:102190003000000000010203045F6C697374006C7E -:1021A00069737420616C6C20636F6D6D616E640087 -:1021B000A00100000100000020000000200000003D -:1021C0000034000020000000081C3044586C8008D7 -:1021D0001C3044586C8000000004005000200000B7 -:1021E00000000000000000000000000000000000EF -:1021F000000400500010000000000000000000007B -:1022000000000000000000008182838485868788AA -:10221000898B8C8D8E8F919293959697999A9C9D90 -:102220009FA0A2A3A5A7A8AAACAEB0B2B3B5B7B9F8 -:10223000BCBEC0C2C5C7C9CCCED1D4D7D9DCDFE2C1 -:10224000E6E9ECF0F3F7FAFE68220008000000204F -:102250009C00000004010008042300089C000020EA -:10226000B44500002001000800002000000000002C -:10227000000000000000000000000000000000005E -:10228000000000000000000000000000000000004E -:10229000051B0008BD1B0008C000002060000020D6 -:1022A000C034002062000020000000000000000098 -:1022B000000000000000000000000000000000001E -:1022C000000000000000000000000000000000000E -:1022D00000000000000000000000000000000000FE -:1022E0000000000000000000002401400000024047 -:1022F00001000000992100089F210008C6E533B4C1 -:0423000015170008A5 +:10037000704770470246C80FC00781434B0030B535 +:100380004B405B009B0D20D01923DB06C9180123CD +:100390001B05994220DB0324A40704251346AB4028 +:1003A0000BD3002B04D1EB0613409B00E34204D493 +:1003B00001246407002312195941FF231B059942A8 +:1003C0000BD2C9000143500F09E0CB0204D5014311 +:1003D0000803024305D0054830BDFF21C905084385 +:1003E00030BD084607210905884330BD0000C07FA5 +:1003F000F0B5F94D0C091E092C402E402F468BB04C +:10040000A7437DD0B543FCD0002E7AD0002CFCD081 +:100410000D465D40ED0F2543AC1BFF25AD0464196F +:100420000894C502440DC9022143500DDC02044367 +:100430000120C00701430443D2020191200C110C9A +:1004400000958C46010423468B430A9161460904BA +:10045000E24D8A430991010A7D444919803909789E +:1004600005464D4301266D18F605751B6943C90CF9 +:10047000640B891C4C436418B5012C1B250C2E04FD +:10048000B4434C434D43210C691889090591009DE3 +:10049000E90701D00121C90704912C460199670899 +:1004A000CD072F434C08059DE10B4D432D0C2946EC +:1004B0006646754302950D4645432E46029D7D1BBB +:1004C000B44100950D465D4301942C0C2F040D465C +:1004D0005543AE462D0C3D43029503947546049C4E +:1004E0002D04641B049406D2029C039D641C002608 +:1004F00075410395029401AC70CC009F7D1B01E017 +:100500003EE162E1B4410904009507910194059927 +:10051000A4086143090C0C464443650BE7040C46F0 +:1005200066467443A646640B3C43039502947446A6 +:10053000049DE4042C1B049406D2029C039D641CBD +:10054000002675410395029401AC70CC009F7D1B81 +:10055000B44101940C465C430095650FE7000C46DE +:100560005443A646640F3C43039502947446049D8D +:10057000E4002C1B049406D2029C039D641C0026FC +:1005800075410395029401AC70CC009F7D1BB44172 +:10059000AE09AF06049DC900AD092F43049DA40612 +:1005A000AD060495079D344369180791059DE10B3D +:1005B0004D432D0C29466646754302950D4645432D +:1005C0002E46029D7D1BB44100950D465D4301946E +:1005D0002C0C2F040D465543AE462D0C3D43029581 +:1005E00003947546049C2D04641B049406D2029C5B +:1005F000039D641C002675410395029401AC70CCE8 +:10060000009F7D1BB44101948C050694079C890AC8 +:10061000611800950791019C0599A4086143090C94 +:100620000D464543680BEF040D46644665436C0B6D +:100630003C43049FED047D1BAC4602D20025641CA4 +:100640006841009E019D371B85410846584301952E +:100650000C46460FC5005443600F28436546E4002E +:100660002C1B02D20025401C6E41019D3F1AB54152 +:100670002846BD09800628438446A009BF064E02CD +:100680000699A40676180743079D002068410A9939 +:10069000079019430020099B00906046FF191343FF +:1006A0004041E20F64003A43A4460446D71A8C4105 +:1006B000A04203D90120009020463A46C70F941863 +:1006C00040416246D20F2243644664000494009C79 +:1006D000BE466400D71AA446044602978C4177466A +:1006E000002F01D1A04204D96046401C8446029AE2 +:1006F0002046C40FA64694184041049A0546D20FDE +:10070000224364466400D31A8D417146002901D109 +:10071000A84202D928461A46641C10430122002828 +:1007200000D0164361020020079B891904465C41F2 +:100730000223002C02DB491813466441089DCE0AAF +:100740002D145D194B056705E10A2C050D19089953 +:100750003E43C9076940002B08D0934006D30022CE +:10076000761C5141002B01D1760876001C4A002DE1 +:1007700043DB154241D0AA433FD030460BB0F0BD19 +:1007800006180D464D41174C7642AC411AD39518C8 +:100790001C465C41134A6D42A24113D3012252050B +:1007A0004C00D4420AD15C00D4420BD04B4002D55D +:1007B00092021143E2E749004908DFE75940C90FB7 +:1007C000C90718E000200849D8E7054801420DD1C3 +:1007D0000342F7D0F2E700000000FF071C250000ED +:1007E0000000F07F0000E0FF0000F87F1148594052 +:1007F0000143C01241400020C0E70123089A9B0634 +:100800009A4205DC032252078918C90FC907B5E7C8 +:10081000052252078918074A1143D2125140ADE709 +:1008200070B515461C4602460B4628462146FFF782 +:10083000DFFD70BDFFFFFF7FF0B58B4C0F09254634 +:1008400089B0BD437BD01D092646AE43FAD00E4683 +:100850005E402740F60F3E43254071D024012142DF +:10086000FBD0FF24AD19A4042D1B039501252D05F4 +:10087000DB02DB0AC9022B43C90A29431E01090115 +:10088000040F130F050121431701880B82039143C5 +:100890002D098C46A90B1E438A039543B30B9A037B +:1008A00096433F09BA0B9403A74302962E467E4314 +:1008B0000497B6464E19D7190C460196544305972E +:1008C0007E43371B7646BF1B3601B646BE0B361934 +:1008D00000967646BC043719009C01D3641C009432 +:1008E0006400002F01D001263443029E049F75430B +:1008F00066467E430496760034196E0034190094DF +:10090000029C019E1C196643751BAE460694654603 +:100910004519059C05956C43594375460891691A1C +:100920000191049E01465143A41B0491611A009C4D +:100930000791E10605D061090122114302E072E04E +:100940006EE06109089D00272C0A2D066918049D98 +:100950007C412A0A2D066918019D6241AC0DAD0249 +:100960006D185441079A910D920255196141029AEE +:10097000644658435443069B059A5A43121A131B64 +:100980009A0E9B015B187A41010B0005C318514177 +:10099000220A200644195A419A4200D2491C0120D9 +:1009A0004002814203D315230226F64302E01423BA +:1009B0000326F6432020C51AA9401746AF40DA4067 +:1009C0000A4320460399D840091473181905511891 +:1009D000039A3843D2075140AC4009D001229440D9 +:1009E00006D30022401C5141002C01D14008400098 +:1009F0001E4A934212D3012203989206904207DBCB +:100A00000520400709181A480143C012414004E07C +:100A1000032040070818C10FC907002009B0F0BD26 +:100A20000020F107FAE705180C464C4111486D42C9 +:100A3000A04115D394181A465A410E486442904179 +:100A40000ED301204A004005824209D35A00824257 +:100A500006D35940C90F084AC90700201143DDE7F2 +:100A600000200649DAE700000000FF07FE0700004B +:100A7000FFFFFF7F0000E0FF0000F07F0000F87F35 +:100A80000121C9050123411842001B06D3185B0E42 +:100A90000AD0C1100722D206891840075242D1421B +:100AA00001D5520089187047090208D50146002A6D +:100AB00003D0C10FC907002070471046704742029B +:100AC00002D0002002497047072109050143F4E7DD +:100AD0000000F87FF0B5FF252D04C609C209FF27E5 +:100AE00004462E400137CB093E4348402A402B4064 +:100AF0000746002A6BD0002B69D0AA4267D0AB42D0 +:100B000065D0002800DA32460125ED0529432C4343 +:100B100009022002090AD21A4B0C7F24E31A434C23 +:100B2000000A7C44E35C7D242404121914145B0045 +:100B3000A218884201D3521C00E0400049420C46F2 +:100B40005C4324115C43DB016415E318040A5C4335 +:100B5000C502200D0C4644436419250A5D43230356 +:100B6000EC0C0D46654300030019EB184C42A34200 +:100B700001D35B18401CD4052018002B07D05B0064 +:100B8000C91804D3401C002901D1400840003F216E +:100B900089048A4209D3002A08DC1106090F04D00F +:100BA000032149074018C00FC007F0BD01224100D2 +:100BB000120689187F2252069142F6D20521490772 +:100BC000C84201D59010F0BDFF20C005F0BD002F38 +:100BD00000DA32461648AA4207D2AB4205D21902C1 +:100BE000090E17D0F80FC007F0BDFF2563002D06D2 +:100BF000AB42F9D84900A942F6D8AB4201D1A9428B +:100C0000F2D0A94201D1002101E061004908D005DC +:100C10000843F0BD1102090EFBD0FF200243D005AE +:100C2000F0BD0A460146104654E70000D21E0000FF +:100C30000000C07F0102C21504D00123DB07194365 +:100C4000002A0ADB9E239A1A02D40846D040704735 +:100C5000FF2241001206914201D900207047C017BF +:100C6000C04370471F22030C02D10F2200041CD086 +:100C7000030E01D10002083A030F01D10001121F37 +:100C8000830F01D18000921E002801DB4000521E1C +:100C9000D2055118021251181922904004D3491C50 +:100CA000002801D14908490008467047C10FC9070B +:100CB00000D04042012292071143D3E70121890766 +:100CC000D0E7000010B5FF22C30D134009D05A40F1 +:100CD00007D0914205DA5C42A14202DDC90508183D +:100CE00010BDC40FE407002B06D0002A06D000294F +:100CF00002DBFF20C0050443204610BD4102FCD0AA +:100D0000004810BD0000C07F754600F025F8AE46D3 +:100D1000050069465346C008C000854618B020B596 +:100D2000FFF746FA60BC00274908B6460026C0C552 +:100D3000C0C5C0C5C0C5C0C5C0C5C0C5C0C5403D93 +:100D400049008D46704710B50446C046C04620464F +:100D5000FFF701FA10BD000000487047AC380020D2 +:100D600001491820ABBEFEE72600020070470000D4 +:100D7000002801D00120704701480180FEE70000F3 +:100D8000C400002070477047FEE7000070B583681C +:100D90000022DB07DB0F02D00122104670BD8C68F9 +:100DA0004B68C5682343CC68054E35402C4323432C +:100DB000C360036909689B009B080B430361ECE770 +:100DC000C73FFFFF30B583680022DB07DB0F02D08F +:100DD0000122104630BD18C94D6823430C6889684C +:100DE0002C4323430B43C168024C21400B43C36097 +:100DF000EFE700003CC2FEFF054B10B55918203943 +:100E0000C97F435803242403A3431343435010BD15 +:100E1000E9280008054B10B559182039C97F4358F7 +:100E2000034C23401343435010BD0000E928000841 +:100E3000EFBFFFFF054B10B559182039C97F435844 +:100E40008024A3431343435010BD0000E928000849 +:100E5000054B10B559182039C97F43580324A40203 +:100E6000A3431343435010BDE9280008054B10B5B8 +:100E700059182039C97F43582024A34313434350B2 +:100E800010BD0000E9280008054B10B5591820399D +:100E9000C97F43584024A3431343435010BD00006F +:100EA000E928000889000F23091F10B58B40803006 +:100EB000846A8A409C431443846210BD054B10B57C +:100EC00059182039C97F435803242402A3431343EC +:100ED000435010BDE928000810B504790023254AC5 +:100EE0000168002C3DD0002942D04479002C0FD05D +:100EF000012C15D0022C16D001238179002937D07E +:100F0000012918D002291FD0032921D001232FE065 +:100F100054688C435460016814680C431460ECE717 +:100F200014688C4301E014680C4314600168546831 +:100F30000C435460E1E70168D4688C43D4600068D6 +:100F400091680143916013E0016894688C4302E06A +:100F5000016894680C4394600068D1680143D160D3 +:100F600006E014688C431460006851688143516046 +:100F7000184610BD00040140F0B500234CE00124E8 +:100F80009C40224047D04C68012C01D0022C10D14B +:100F90008D688668144654436700E719BE436C4366 +:100FA00026438660CD680C684668A6436C4326439A +:100FB00046600F69C6681446544365006519AC461F +:100FC000AE4325467D432E43C6604D68022D1BD19E +:100FD000FF2A0CD84F69056A1646224672437243AF +:100FE0001601B61AB5437A43154305620CE0150A9B +:100FF0002A466A436A436A4315014E69476AAD1A35 +:10100000AF437243174347624A6805686646B54373 +:101010005443254305605B1C0A681446DC40AED18E +:101020000020F0BD08B50449CA6A0243CA62C96A11 +:101030000140009108BD00000010024010B57D2164 +:10104000C900FFF7E7F80449401E486100208861A5 +:101050000520086110BD000000E000E010B5044666 +:1010600000F0A4FD206000F07BFD606000F086FDD4 +:10107000A060606800F08EFDE06010BDF8B5204D06 +:1010800001270024AE00FF03032802D00C2824D03F +:1010900021E000F03BF81B4940182ED0012809D070 +:1010A000022813D000F082FD00F05AFD00F072FD1E +:1010B000044610E000F032F800280CD000F036F8BA +:1010C000002801D02C4606E0344604E000F036F853 +:1010D000002800D03C462046F8BD00F017F80A4929 +:1010E00040180AD00428E5D00828EFD000F05EFDB3 +:1010F00000F036FD00F042FDDAE700F057FDD7E7DB +:1011000000093D00FFFFFCFFFCFFF3FF0249C96837 +:101110000140000408437047401002400248006844 +:101120004007C00F704700000010024002480068EE +:10113000C006C00F7047000000100240024800695E +:101140008005C00F70470000401002400149086050 +:101150007047000000000020F0B502680124A407D9 +:10116000134D144E144FA04205D0A84203D0B042F4 +:1011700001D0B84203D170239A434B681A43A0426E +:1011800005D0A84203D0B04201D0B84204D1032315 +:101190001B029A43CB681A4302608A68C2620988BC +:1011A000816241690122114341610020F0BD0000CC +:1011B000000400400008014000140140F0B5012483 +:1011C00000237025012926D003273F0210293BD098 +:1011D000FF39491E57D00F252D02A94251D1016A6E +:1011E0002603B1430162016A4468C569BD4307270C +:1011F0003F03BD4317683F023D437700B943D768BB +:101200003F033943B1435668446036033143C561F7 +:101210009268026433E0016A490849000162016A88 +:1012200046688469A408A400AC4315682C430225D1 +:10123000A943D568294349085568490029434660B0 +:101240008461926842631AE0016A1026B143016228 +:10125000016A45688469BC4307273F03BC4317689C +:101260003F023C432027B943D7683F013943B1438C +:101270005668456036013143846192688263016239 +:101280001C462046F0BD016AFF270137B9430162C1 +:10129000016A4468C669B608B600AE4315682E43B5 +:1012A0007D00A943D5682D0229435568B9432D0215 +:1012B00029434460C6619268C263E0E77FB5044693 +:1012C00000680D46012630404CD1E9686868AA697B +:1012D00008432969114308432168244A11400843FF +:1012E0002060A86861680322120391430143616092 +:1012F0006869A168121191430143A1601C488442AE +:1013000001D1032003E01B48844203D10C20FFF7E6 +:10131000B5FE09E01848844202D01848844221D121 +:101320006846FFF79BFE029800281BD02968002919 +:1013300018D00123AA690026DB039A420CD1400091 +:101340004A088018FEF766FF0D4980B20140000789 +:10135000420F0A43E26005E04A081018FEF75AFF00 +:1013600080B2E060304604B070BD0000F369FFEF6A +:101370000038014000440040004C00400050004054 +:10138000F0FF000008B506490A690092421C00D02F +:10139000401C0A69D20300D5401E0028F9D108BDBF +:1013A00000E000E0F0B591B014216846FEF730FF90 +:1013B00000200590069007900890182109A8FEF7D4 +:1013C00027FF4B48406B01214902084348494863C5 +:1013D000486B4915084046490F90C96A0420444AA1 +:1013E0000143D162D16A0324014000200A940827F6 +:1013F0000F910D90099709A93E48FFF7BDFD3E49A1 +:101400003D4880318A6A120912018A623B490A7892 +:1014100083583B4D2B4083500B78BA02C5582603A6 +:10142000B5431543C5500B78C5582026B543354301 +:10143000C5500B78C5584026B543C5500B78C558E4 +:101440008026B5433543C5500B78C5582602B543B1 +:1014500086153543C550097803154558A602B5438E +:101460001D434550274DA86A1043A862002001A9DA +:10147000009015C1049069462846FFF7A3FC6969EE +:1014800007208143014369612869400840002861C1 +:10149000E86804218843E8601B490868BA0590435E +:1014A000086068680421884368606868B8436860B9 +:1014B00008070590002006900790089005A9284687 +:1014C000FFF764FCA8681149084079060843A86042 +:1014D00010480F490068FEF79DFE0A214843FEF7B9 +:1014E00099FE00E0401E0028FCD111B0F0BD0000C4 +:1014F000001002400008005000000240D4280008FC +:10150000EFBFFFFF0024014008270140E8FFFF7FF5 +:10151000400D03000000002008B50B480121026BBC +:101520000A430263006B084000900321092000F089 +:1015300033FC092000F018FC01210A2000F02CFCEB +:101540000A2000F011FC08BD00100240F0B589B07F +:1015500000240694182168460794FEF759FE0420DB +:10156000FFF760FD8020FFF75DFD0120FFF75AFDCA +:101570000220FFF757FD0820FFF754FD0120C14F5F +:101580000003B8624000B8610325009069460195E8 +:101590000494BD48FFF7F0FC3801009069460195BE +:1015A0000494B948FFF7E8FC78010090694601957A +:1015B0000494B548FFF7E0FC01266946B24800965E +:1015C00001950494FFF7D8FC02200090694601952C +:1015D0000494AD48FFF7D0FC0420009069460195C3 +:1015E0000494A948FFF7C8FC052069460007009647 +:1015F00001950494FFF7C0FC022000900520694685 +:10160000019504940007FFF7B7FC04200090052023 +:101610006946019504940007FFF7AEFC082000908E +:1016200005206946019504940007FFF7A5FC1020EA +:10163000009005206946019504940007FFF79CFC83 +:101640002020009005206946019504940007FFF7CB +:1016500093FC402000900520694601950494000702 +:10166000FFF78AFC802000900520694601950494CC +:101670000007FFF781FC1020009069460195049453 +:101680008148FFF779FC2020009069460195049479 +:101690007D48FFF771FC6946384600960195049431 +:1016A000FFF76AFC022000906946019504943846D1 +:1016B000FFF762FC042000906946019504943846C7 +:1016C000FFF75AFCB0020090694601950494384631 +:1016D000FFF752FCF00200906946019504943846E9 +:1016E000FFF74AFC30030090022002900196039419 +:1016F000694604943846FFF73FFC700300900220CF +:10170000029001960394694604943846FFF734FC2E +:10171000402000906946019504945B48FFF72CFC3B +:10172000802000906946019504945748FFF724FCF7 +:10173000300200906946019504945348FFF71CFC61 +:10174000700200906946019504944F48FFF714FC1D +:101750003002009005206946019504940007FFF7C8 +:101760000BFCF002009005206946019504940007E7 +:10177000FFF702FC300300900520694601950494B0 +:101780000007FFF7F9FBF00300900520694601957B +:1017900004940007FFF7F0FBB00200906946019542 +:1017A00004943948FFF7E8FBF00200906946019580 +:1017B00004943548FFF7E0FB30030090694601953B +:1017C00004943148FFF7D8FB042000906946019546 +:1017D00004942E48FFF7D0FB08200090694601953D +:1017E00004943846FFF7C8FB102000906946019525 +:1017F00004943846FFF7C0FB20200090694601950D +:1018000004943846FFF7B8FB4020009069460195E4 +:1018100004943846FFF7B0FB80200090694601959C +:1018200004943846FFF7A8FB300200906946019502 +:1018300004943846FFF7A0FB7002009069460195BA +:1018400004943846FFF798FB114880680F2109037C +:101850008843310308430E498860F868B107800067 +:1018600080080843F8603868800080083860C81332 +:101870000690684606774477867706A8FFF72CFB24 +:1018800009B0F0BD0004005000080050000C0050EA +:101890000C000140F0B58FB0002406940794089422 +:1018A00009940A940B940C94182168460D94FEF741 +:1018B000AFFC2E4904204A6B02434A63496B014046 +:1018C0000E910021142000F089FA142000F058FA3B +:1018D0001F20694608832648264E0890079406A9CB +:1018E00009943046FFF738FC31688022114331609B +:1018F000214881781F4818300D1828681E4F08218C +:10190000FF1DBA7891400843286060200A90FF20AC +:10191000F5300C900B940AAA10210D943046FFF775 +:101920004DFC2868BA78042191408843286070688B +:10193000702188437060B06880218843B0600B4993 +:101940000220CA6A0243CA62C96A02940140400383 +:101950000090022001900E910620059003940494BB +:1019600069460648FFF708FB0FB0F0BD00100240C3 +:10197000E703000000080140DB28000800040050D5 +:1019800010B586B000241549009401940294039484 +:101990008A6B102002438A63896B014004912146BF +:1019A000112000F01BFA112000F0EAF90C486946FA +:1019B0000880019463200B4C02902046FFF7CCFB7B +:1019C00020688021884320606068702290436060B6 +:1019D000A0688843A06006B010BD0000001002405F +:1019E0007F0C000000100040F0B58FB01C2106A84D +:1019F000FEF70EFC18216846FEF70AFC524801214A +:101A0000426B89030A434263426B0A400D92C26AE9 +:101A100001210A43C262C06A042708400D904802AF +:101A200005970024009002260325052003946946AB +:101A30000196029504940007FFF79EFA700205973D +:101A400000900520039469460196029504940007CE +:101A5000FFF792FA3D4D032211462846FFF722FA7E +:101A6000002203212846FFF7D5F90022032128464A +:101A7000FFF7C2F9002203212846FFF7F7F90022F9 +:101A800003212846FFF700FA802203212846FFF7AA +:101A9000D1F9002203212846FFF710FA0022032182 +:101AA0002846FFF7D5F9032202212846FFF7FAF965 +:101AB000102202212846FFF7ADF900220221284614 +:101AC000FFF79AF9002202212846FFF7CFF90022FA +:101AD00002212846FFF7D8F9802202212846FFF785 +:101AE000A9F9002202212846FFF7E8F90022022185 +:101AF0002846FFF7ADF9164801680902090A6A038A +:101B00001143016001251349D0100860E120400213 +:101B100006900794089409940B940C940C200E4C96 +:101B20000A9006A92046FFF7C9FB60680921C9028F +:101B300088436060A0682A218843A0602068284309 +:101B400020600FB0F0BD0000001002400000024015 +:101B500018E400E000E100E000380140FEE77047D3 +:101B60000449C968F0221140034A0909515CC84080 +:101B70007047000000100240F02800080349C968BF +:101B8000034A4905490F515CC840704700100240A4 +:101B9000092900080349C968034A8904490F515CAF +:101BA000C8407047001002400929000810B50F4ACC +:101BB000D1680C2001400E4805D0042909D008291D +:101BC0000FD00C290FD051680904490F491C8840D7 +:101BD00010BDFFF7ABFA002801D0064810BD06483B +:101BE00010BD064810BD00F00BF810BD00100240FB +:101BF0000080000000093D000024F40000127A007B +:101C000010B50E4CE06801210904084205D1FFF728 +:101C10008DFA00280FD00A4A00E00A4AE068000264 +:101C2000810FE068084B8002000F185C491C50438C +:101C3000FEF7F0FA10BD054AF0E700000010024080 +:101C400000093D0000127A00002900080024F40079 +:101C50007047704710B52B48012102688A430A4338 +:101C600002600168C907C90FFBD02748012201683B +:101C7000D2020323DB029943114301604168C90684 +:101C8000C90FFBD1214801680122120411430160F0 +:101C900001688903C90FFBD0C168FD22120491437A +:101CA0004D2212041143C160016801221206114342 +:101CB000016001688901C90FFBD0C168F02291431E +:101CC000C160C168072212029143C160C168D2009D +:101CD0009143C160C26803218A430A43C2600C2257 +:101CE000C16811400C29FBD1094C2046FFF7A6F929 +:101CF0002046FFF72BFA05484030C1688908890063 +:101D0000C16010BD00200240007000400010024081 +:101D10000048E8017047000010B5074C2069C00773 +:101D2000C00F08D000BF0548006800F08AFC012001 +:101D3000C043206100BF10BD0008014080000020AA +:101D400006480169C907C90F06D005490A68521C2F +:101D50000A600121C9430161704700000010004082 +:101D60006400002070470000002805DBC106C90E92 +:101D700001208840014908607047000000E100E050 +:101D8000002805DBC106C90E012088400149086012 +:101D90007047000000E100E08307FF22DB0E9A405D +:101DA0008907090E9940002808DB830809489B0031 +:101DB0001818036893430B43036070470007000F34 +:101DC0000838830804489B001818C36993430B43E1 +:101DD000C361704700E400E000ED00E08307FF22EC +:101DE000DB0E9A408907090E9940002808DB83081A +:101DF00009489B001818036893430B43036070471E +:101E00000007000F0838830804489B001818C369AE +:101E100093430B43C361704700E400E000ED00E032 +:101E20000549103000E0001D0268002A02D14A680E +:101E30009042F8D3704700002000002010B5044CF9 +:101E4000206801E0FFF7ECFF61688842FAD310BD1B +:101E50002000002001E00170401C1346521E92B287 +:101E6000002BF8D170470FB4009869468988006943 +:101E7000814302D0002004B070470120FBE70FB47B +:101E8000694600988988816204B070470FB469463A +:101E900000988988816104B070470FB40099684642 +:101EA00080884A69134603401B04904303438B61B7 +:101EB00004B07047034610B50020084A01465C0094 +:101EC00006234B439B181B5B491C181889B2142925 +:101ED000F6D31421FEF79EF980B210BD2038002001 +:101EE000F8B50D460446234901204870E0681746BE +:101EF0008607E068B60F80088000E060A0681721C0 +:101F00008843C9070843A060A068C00FFCD1E068FF +:101F1000800880003043E0600A20FFF733FAA068B1 +:101F200015490840401CA0600A20FFF72BFA13480F +:101F30003C23C0192038C27F291D57583F0C3F044D +:101F40001F43575021464031C27F2B460833D150A2 +:101F5000C27F0B491B1DD150C07F2958012211435C +:101F60002950032E04D1A06803490840001DA06039 +:101F7000F8BD000074000020E8FFFF7F4029000842 +:101F800020380020F8B50446002069460870216812 +:101F9000184E002906D01D2924D0694620600870FB +:101FA0000320F8BD0220FFF785FF134DA860A86845 +:101FB00080B200F06DFB68600020FFF77BFF686176 +:101FC000686980B200F01EFA28610120FFF772FFF5 +:101FD0002862286A80B200F065F8E86130686060C5 +:101FE0001D20206060683168081A0A28DAD20020B3 +:101FF000F8BD000064000020A000002010B500F033 +:102000005DF900F067F810BD10B500F06DF810BD77 +:1020100070B500201D4C98B00146A06014221C48E9 +:10202000FFF718FF002000F05FF9012000F0F4F83E +:102030000546A060182217490CA8FEF793F8154929 +:102040001822183112A8FEF78DF8144810221249F0 +:1020500009AB07C3182212A903A8FEF783F80FAB38 +:1020600007CB6B4607C32846EE6A0CAD0ECDB047D2 +:102070000C3407CCFFF734FF0948026801210A43FA +:102080000260C2680A43C26018B070BD78000020C8 +:102090009838002048290008000801400AD7A33CCE +:1020A0000010004010B5FEF709FE074900F0AAFB3A +:1020B0000649FEF70FFD0321C943FEF703FE04495D +:1020C00000F048FB10BD000000001644000016435D +:1020D0000000964303490020086008310860083179 +:1020E0000860704708000020F8B51D48FFF74AFF58 +:1020F0000024684604701A4D1A4E083528680028D6 +:1021000011D0282815D068462C60047068460470E9 +:10211000134D10352868002811D0332819D068468F +:102120002C600470F8BD00F0A7F8306868602820C3 +:10213000286068683168081A0A28E7D3F3E77D2029 +:10214000C00000F077F908490870306868603320F3 +:10215000286068683168081A6428F0D2F8BD000069 +:1021600008000020640000200400002070B50D4627 +:1021700006461821002000F02FF9040001D00120AC +:1021800000E000203621FEF7F3FD2660A58005481B +:10219000A0600548E0600548206105486061204670 +:1021A00070BD00008D1E00087F1E00089B1E0008E9 +:1021B000671E000808B516480121426B0A434263B6 +:1021C000416BC907C90F0091826B01040A43826306 +:1021D000806B084000900F48C16903220902090A78 +:1021E00092071143C161FFF735FDFFF7AFF9FFF724 +:1021F00093F9FFF7D7F8FFF7F7FBFFF7C1FBFFF7FE +:1022000049FBFFF705FFFFF7F9FEFFF7FDFEFCE7CF +:102210000010024004ED00E070B5054640210020AA +:1022200000F0DAF8040001D0012000E00020632172 +:10223000FEF79EFD00222146402001E00A70491C65 +:102240000346401E80B2002BF8D12570012D01D02D +:10225000002070BD0448E0620448206304486063C5 +:102260000448A063204670BD65240008B52400081A +:10227000F92500089F25000870B50F4DA86829783A +:10228000041D002916D00026012904D0022907D0F8 +:1022900003290FD107E06968E26A0978904708E0EE +:1022A000216B88472E706868636B02784168A86864 +:1022B00098472E7070BD00007800002010B50821EE +:1022C000002000F089F8074C0028606000D0012051 +:1022D0003B21FEF74DFD082200216068FFF7BAFDA3 +:1022E00010BD000078000020F0B5054684000A48C3 +:1022F0000A4F0059E61942000021306900F07CF8CD +:102300000548002110300259B06800F075F801202E +:1023100079190876F0BD000028290008280000205F +:10232000F8B51D4E05467019007E00240F460028A2 +:1023300002D1316828468847002F29D01748AD00C0 +:1023400041593846FDF766FF0246002900D0421C7D +:10235000124808384159491E1AD4AF1938694B0040 +:10236000C35A002B05D0002494420FD1002093B211 +:1023700006E0641CF8E70E1876003C69401CA35385 +:102380009042F8D3054840594843F8BD491EE6D568 +:102390000020C043F8BD00002800002030290008BC +:1023A00070B50B49002380000A4C09581A460019E1 +:1023B00006E004695500645B002C00D05B1C521CD5 +:1023C0009142F6D864205843FDF724FFC0B270BD97 +:1023D000282900082800002010B50446FFF7A0FFB8 +:1023E000411C05D0034AA10089188968081810BD4E +:1023F000002010BD2800002001E00170401C521E8A +:10240000FBD2704710B5FEF759FC074900F0FAF906 +:102410000649FEF75FFB0321C943FEF753FC04495D +:1024200000F098F910BD00000000164400001643AB +:102430000000204170B5FEF741FC084C05462068BD +:10244000FEF73CFC2946FEF745FB002121600449CC +:1024500000F080F9FEF7EEFB70BD00006800002080 +:102460000000C8420FB4F8B5139F159E149D0400D8 +:1024700001D0012000E000200621FEF779FC68462B +:10248000018C0798FFF772FE60606846018F0D9817 +:10249000FFF76CFE21460831E1C128684008400082 +:1024A0002860E0682169026A8A430262F8BC08BCBD +:1024B00004B01847FEB50D46040001D0012000E02D +:1024C00000201121FEF754FC241D01D0012000E062 +:1024D00000201321FEF74CFC012725766776002D9E +:1024E0002568696928690191009032D00820281870 +:1024F00001782E790A464178EB6809020A4381780F +:10250000C07809040A4331466E7900063602314329 +:10251000AE7902433604E879314300062E78014350 +:1025200030466E7836023043AE78ED78360430436C +:102530002D0628439847A068C1683943C160A06848 +:10254000016839430160A068E168026A0A430262D7 +:10255000FEBD0C20281801782E790B464178AA6818 +:1025600009020B438178C07809040B4331466E7928 +:10257000000636023143AE7903433604E87931432D +:1025800000062E78014330466E7836023043AE782E +:10259000ED78360430432D0628439047CBE7F8B555 +:1025A00016460F46050001D0012000E000202D2135 +:1025B000FEF7DEFB2C1D01D0012000E000202F21C2 +:1025C000FEF7D6FB607E012811D03846FEF776FB79 +:1025D0002169FEF77FFAFEF72DFBE06100206062C3 +:1025E000E069002804D0E26A314628469047F8BDE9 +:1025F000216B28468847F8BD70B5050001D0012041 +:1026000000E000201E21FEF7B3FB2C1D01D00120AD +:1026100000E000202021FEF7ABFB00206076606127 +:10262000E061A1680868400840000860A068E168AF +:10263000026A8A430262A16B002901D028468847BA +:1026400070BD70B5050001D0012000E000204921D7 +:10265000FEF78EFB2C1D01D0012000E000204B2155 +:10266000FEF786FBE069401EE061606A401C606224 +:10267000207E0128206A08D0401E2062E0690028E0 +:1026800002D1216B2846884770BD401CF5E7000049 +:1026900010B5FEF713FB084900F0B4F8FEF7F0F9A7 +:1026A000064A074BFDF7A4FE0022064BFEF7C4F8CE +:1026B000FDF760FE10BD00000080BB446891ED7C1A +:1026C0003F3517400000244070B501250400ED0798 +:1026D0004C4020D4441A01D2001B0919C60D4B00EE +:1026E000F2B2FF2A29D01B0E2CD000020C02D31A02 +:1026F0002C43DC402843051910D2280A02D3401C81 +:102700006D0611D0761EF6058019FF2A00DA70BD1D +:10271000C00DC00570BD694000F07AF80120054386 +:10272000C541521C761CE8E764089C40C901614021 +:102730008900E7D10124A043E4E71B0E440200D046 +:10274000034870BD002AFCD1C00FC00770BD00BF98 +:102750000000C07F70B5420064414B005C41120E26 +:1027600039D01B0E38D0FF2A3CD0FF2B3AD0400284 +:102770004902400A490A060045184E43000A090A60 +:10278000D2184843ED017F3A0104731A4019190C1D +:102790004318990F04D001215B0849075B1A521CAA +:1027A000D80904D3401CF50301D19D0607D0FF2AA8 +:1027B00008D2D50506D0E4072043401970BD012595 +:1027C000A843F4E7002A01DCE00770BD2402FF20E3 +:1027D0002043C00570BD1B0EFF2A03D0FF2B01D084 +:1027E000E00770BDFF2645003606B54206D84D000D +:1027F000B54203D8D218FF2A00D0E7E7004870BDE1 +:102800000000C07F70B501250400ED074C4022D4C4 +:10281000441A02D26C40001B0919C60D4B00F2B2DB +:10282000FF2A4BD01B0E50D000020C02D31A2C43AF +:10283000DC40A843051B05D5AD0019D36D08761EF5 +:10284000521E37D0F605280A01D2801970BD70419A +:102850006D0603D070BD6940FFF73CFF9C40090244 +:102860006140490001D0401E70BD0124A04370BDED +:102870006D081DD001202B0C01D12D0410302B0E22 +:1028800001D12D0208302B0F01D12D01001DAB0FFE +:1028900001D1AD00801CEB0F01D16D00401C6D001B +:1028A000361A121A680AF5054019012A02DB70BDB2 +:1028B000002070BDC036300AC00770BD1B0E440238 +:1028C00001D1FF2B00D1024870BD002AF0D070BDAD +:1028D0000000C07F081C3044586C800000000004D9 +:1028E000000400000800000008081C3044586C80F8 +:1028F00000000000000000000102030406070809B0 +:10290000030406080C101820300000000001020328 +:10291000045F6C697374006C69737420616C6C2063 +:10292000636F6D6D616E6400A00100000100000026 +:102930002000000020000000003400002000000003 +:10294000081C3044586C8000000400500020000037 +:102950000000000000000000000000000000000077 +:102960000004005000100000000000000000000003 +:10297000000000000000000080807F7E7D7C7B7A6C +:102980007978777676757473727171706F6E6E6D1B +:102990006C6C6B6A6A6968686766666564646363C1 +:1029A00062616160605F5F5E5E5D5D5C5C5B5B5A47 +:1029B0005A595958585757565655555554545353B4 +:1029C00052525251515050504F4F4F4E4E4D4D4D0F +:1029D0004C4C4C4B4B4B4A4A4A494949484848475A +:1029E0004747474646464545454444444443434398 +:1029F00043424242424141418182838485868788A5 +:102A0000898B8C8D8E8F919293959697999A9C9D98 +:102A10009FA0A2A3A5A7A8AAACAEB0B2B3B5B7B900 +:102A2000BCBEC0C2C5C7C9CCCED1D4D7D9DCDFE2C9 +:102A3000E6E9ECF0F3F7FAFE582A0008000000205F +:102A4000A000000004010008F82A0008A0000020EF +:102A5000704200002001000800002000000000007B +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A8000E9220008A1230008E000002060000020E7 +:102A9000E034002062000020000000000000000080 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD0000000000000000000000000000024014091 +:102AE0000000024001000000112900081729000819 +:082AF000C6E533B43D1E0008E9 :04000005080000C12E :00000001FF diff --git a/User/app.c b/User/app.c index 03d85aa..a80f3ec 100644 --- a/User/app.c +++ b/User/app.c @@ -1,5 +1,5 @@ #include "app.h" -// #include "board.h" +#include "board.h" #include "uarts.h" #include "sys.h" #include @@ -12,6 +12,7 @@ uint8_t mem_percent = 0; // 内存使用率 void app_init(void) { + motor_process_init(); flow_init(); // 流程初始化 } diff --git a/User/app.h b/User/app.h index f250b53..080522e 100644 --- a/User/app.h +++ b/User/app.h @@ -8,13 +8,15 @@ typedef struct { bool is_open; - uint32_t calibration_value; + float32 calibration_value; uint32_t original_value; } calibration_sensor_data_t; typedef struct { calibration_sensor_data_t torsion_in13; // 扭力 + calibration_sensor_data_t pressure_in7; // 压力 + calibration_sensor_data_t pressure_in8; // 流量 } adcs_t; typedef struct diff --git a/User/app_flow.c b/User/app_flow.c index 1ee5738..e132e0f 100644 --- a/User/app_flow.c +++ b/User/app_flow.c @@ -17,7 +17,15 @@ static uint8_t adc_inspection(struct flow *fl) FL_HEAD(fl); for (;;) { + // 扭力 app.adc.torsion_in13.original_value = adc_get_result_average(IN13); + app.adc.torsion_in13.calibration_value = torsion_detect(app.adc.torsion_in13.original_value); + // 压力 + app.adc.pressure_in7.original_value = adc_get_result_average(IN7); + app.adc.pressure_in7.calibration_value = pressure_detect(app.adc.pressure_in7.original_value); + // 流量 + app.adc.pressure_in8.original_value = adc_get_result_average(IN8); + app.adc.pressure_in8.calibration_value = flow_detect(app.adc.pressure_in8.original_value); FL_LOCK_DELAY(fl, FL_CLOCK_100MSEC); /* 延时100毫秒 */ } FL_TAIL(fl); @@ -28,6 +36,7 @@ static uint8_t systom_inspection(struct flow *fl) FL_HEAD(fl); for (;;) { + motor_process(); FL_LOCK_DELAY(fl, FL_CLOCK_100MSEC); /* 延时100毫秒 */ } FL_TAIL(fl); diff --git a/User/application/motor_app.c b/User/application/motor_app.c deleted file mode 100644 index 3b231c0..0000000 --- a/User/application/motor_app.c +++ /dev/null @@ -1,2 +0,0 @@ -#include "motor.h" - diff --git a/User/application/motor_app.h b/User/application/motor_app.h deleted file mode 100644 index 8006683..0000000 --- a/User/application/motor_app.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __MOTOR_APP_H__ -#define __MOTOR_APP_H__ - - - -extern void motor_process(void); - -#endif \ No newline at end of file diff --git a/User/board/board.c b/User/board/board.c index dc18dc6..2bb64ec 100644 --- a/User/board/board.c +++ b/User/board/board.c @@ -1,167 +1,44 @@ #include "board.h" #include "motor.h" -void motor_process(frame_msg_t *rx, frame_msg_t *bk); -void sensor_procss(frame_msg_t *rx, frame_msg_t *bk); - -/************************************* 串口通讯 *************************************/ uart_t *uarts[UART_NUM_MAX]; -__IO static BOOL deal_done_flag = FALSE; // 数据处理标志 -__IO static frame_msg_t rx_frame; -__IO static frame_msg_t bk_frame; -__IO static uint8_t send_buffer[UART_TXSIZE]; - -// 串口发送 -static void host_send_msg(uint8_t *data, uint16_t len) -{ - uart_send_data(uarts[UART_NUM_1], data, len); -} - -// 接收数据解码 -static void host_data_decode(uint8_t *data, uint16_t len, frame_msg_t *msg) -{ - DBG_ASSERT(data != NULL __DBG_LINE); - DBG_ASSERT(msg != NULL __DBG_LINE); - - msg->state = data[1]; - msg->dev_no = data[2]; - msg->cmd_no = data[3]; - msg->len = data[4]; - osel_memcpy(msg->data, (uint8_t *)&data[5], msg->len); -} - -// 发送数据编码 -static void send_data_encode(frame_msg_t *msg) -{ - uint16_t ver_len = 0, ver_crc = 0; - uint8_t *sp = (uint8_t *)send_buffer; - DBG_ASSERT(msg != NULL __DBG_LINE); - - *sp++ = PACKET_STX; // 包头 - ver_len++; - *sp++ = msg->state; // 状态 - ver_len++; - *sp++ = msg->dev_no; // 设备号 - ver_len++; - *sp++ = msg->cmd_no; // 命令号 - ver_len++; - *sp++ = msg->len; // 长度 - ver_len++; - osel_memcpy(sp, msg->data, msg->len); // 数据 - sp += msg->len; - ver_len += msg->len; - - ver_crc = crc16_compute((uint8_t *)&send_buffer[1], (ver_len - 1)); // 减去包头 - ver_crc = S2B_UINT16(ver_crc); - osel_memcpy(sp, (uint8_t *)&ver_crc, 2); // 校验 - sp += 2; - ver_len += 2; - - *sp++ = PACKET_ETX; // 包尾 - ver_len++; - - // 发送 - host_send_msg((uint8_t *)send_buffer, ver_len); -} - -// 数据处理 -void host_data_deal(uint8_t *data, uint16_t len) -{ - frame_msg_t *rx_msg = (frame_msg_t *)&rx_frame; - frame_msg_t *bk_msg = (frame_msg_t *)&bk_frame; - - if (deal_done_flag == TRUE) - { - return; - } - // 解析 - host_data_decode(data, len, rx_msg); - // 执行 - switch (rx_msg->dev_no) - { - case ADC_SENSOR: - sensor_procss(rx_msg, bk_msg); - break; - case MOTOR: - motor_process(rx_msg, bk_msg); - break; - default: - return; - } - // 回复(组包 + 发送) - send_data_encode(bk_msg); - // 修改标志位 - deal_done_flag = TRUE; - osel_memset((uint8_t *)rx_msg, 0, sizeof(rx_frame)); - osel_memset((uint8_t *)bk_msg, 0, sizeof(bk_frame)); -} - -// 数据完整性检查 -static BOOL host_data_verify(uint8_t *data, uint16_t len) -{ - BOOL ret = TRUE; - uint16_t ver_len = 0; - uint16_t ver_crc = 0, rx_crc = 0; - - // 包头包尾检查 - if (data[0] != PACKET_STX || data[1] != MASTER_CODE || data[len - 1] != PACKET_ETX) - { - ret = FALSE; - return ret; - } - // 帧长度检查 - ver_len = data[4] + PACKET_MIN_LEN; - if (ver_len != len) - { - ret = FALSE; - return ret; - } - // CRC校验 - ver_crc = crc16_compute((uint8_t *)(data + 1), (len - 4)); // 减去包头、包尾、校验 - ver_crc = S2B_UINT16(ver_crc); - osel_memcpy((uint8_t *)&rx_crc, (uint8_t *)(data + len - 3), 2); - if (ver_crc != rx_crc) - { - ret = FALSE; - return ret; - } - - return ret; -} - -// 串口接收回调 -static void host_rx_cb(uint8_t uart_index, uint8_t *data, uint16_t len) -{ - BOOL ret = FALSE; - - // 数据完整性检查 - ret = host_data_verify(data, len); - // 数据处理 - if (ret == TRUE && deal_done_flag == TRUE) - { - deal_done_flag = FALSE; - } -} - -// 串口初始化 -void host_uart_init(void) -{ - if (uarts[UART_NUM_1] == NULL) - { - uarts[UART_NUM_1] = uart_create(USART1, TRUE, UART_RXSIZE, host_rx_cb, TRUE, UART_TXSIZE, NULL); - uarts[UART_NUM_1]->uart_index = UART_NUM_1; - uarts[UART_NUM_1]->dma = DMA1; - uarts[UART_NUM_1]->dma_rx_channel = LL_DMA_CHANNEL_3; - uarts[UART_NUM_1]->dma_tx_channel = LL_DMA_CHANNEL_2; - uart_recv_en(uarts[UART_NUM_1]); - } -} - -/************************************* 电机 *************************************/ -// 电机对象 motor_t *motor; +motor_ctrl_t *motor_param = NULL; +uint8_t motor_state = MOTOR_IDEL; + +adc_t adc1 = { + .adc = ADC1, + .dma = DMA1, + .dma_channel = LL_DMA_CHANNEL_1, +}; + +// 单位:N·m +float32 torsion_detect(uint16_t adc) +{ + float32 val = 0; + val = ((float32)adc - 1500) / (1.934 * 3) * 10; + + return val; +} + +// 单位:kPa +float32 pressure_detect(uint16_t adc) +{ + float32 val = 0; + val = ((float32)adc - 600) / (10 * 15) / 16 * 10; + + return val; +} + +// 单位:SLPM +float32 flow_detect(uint16_t adc) +{ + float32 val = 0; + val = ((float32)adc - 600) / (10 * 15) / 16 * 300; + + return val; +} -// 电机初始化 static void motor_init(void) { motor = motor_create(STEP_MOTOR); @@ -173,73 +50,40 @@ static void motor_init(void) .port = ENA_GPIO_Port, .pin = ENA_Pin, }; - motor->handle.step_motor.interface.init(motor, dir, en, MIN_STEP_ANGLE, TIM21, LL_TIM_CHANNEL_CH2); + motor->handle.step_motor.interface.init(motor, dir, en, MAX_STEP_ANGLE, TIM21, LL_TIM_CHANNEL_CH2); } -// 电机任务 -void motor_process(frame_msg_t *rx, frame_msg_t *bk) +void motor_process_init(void) { -// BOOL ret = TRUE; + motor_param = (motor_ctrl_t *)osel_mem_alloc(sizeof(motor_ctrl_t)); + DBG_ASSERT(motor_param != NULL __DBG_LINE); + osel_memset((uint8_t *)motor_param, 0, sizeof(motor_ctrl_t)); +} - switch (rx->cmd_no) +void motor_process(void) +{ + step_motor_t *step_motor = &motor->handle.step_motor; + + switch (motor_state) { - case SET_MOTOR_SPEED: // 设置电机转速 + case MOTOR_RUN: + step_motor->interface.run(motor, (dir_e)motor_param->dir); + motor_state = MOTOR_IDEL; break; - case SET_DRIVER_PULSE: // 设置驱动器脉冲 + case MOTOR_STOP: + step_motor->interface.stop(motor); + motor_state = MOTOR_IDEL; + case MOTOR_STEP: + step_motor->interface.set_angle(motor, motor_param->angle, (dir_e)motor_param->dir); + motor_state = MOTOR_IDEL; break; - case GET_MIN_STEP: // 获取最小步距 + case MOTOR_IDEL: break; - case GET_MOTOR_STATE: // 获取电机运行状态 - break; - case MOTOR_MOVE: // 运行电机 - break; - case MOTOR_STOP: // 停止电机 + default: break; } - - bk->dev_no = MOTOR; - bk->cmd_no = rx->cmd_no; } -/************************************* ADc传感器 *************************************/ -// AD传感器 -adc_t adc1 = { - .adc = ADC1, - .dma = DMA1, - .dma_channel = LL_DMA_CHANNEL_1, -}; - -// 获取扭力值 -static BOOL get_tors_value(frame_msg_t *bk) -{ - uint16_t value = 0; - - bk->len = sizeof(uint16_t); - value = adc_get_result_average(IN13); - value = S2B_UINT16(value); - osel_memcpy(bk->data, (uint8_t *)&value, bk->len); - return TRUE; -} - -// 传感器任务 -void sensor_procss(frame_msg_t *rx, frame_msg_t *bk) -{ - BOOL ret = TRUE; - - switch (rx->cmd_no) - { - case GET_TORS_VALUE: // 获取扭力值 - ret = get_tors_value(bk); - break; - } - - bk->state = ret; - bk->dev_no = ADC_SENSOR; - bk->cmd_no = rx->cmd_no; -} - -/************************************* 板卡 *************************************/ -// 板卡初始化 void board_init(void) { motor = NULL; diff --git a/User/board/board.h b/User/board/board.h index 24c81f0..3fee36d 100644 --- a/User/board/board.h +++ b/User/board/board.h @@ -4,32 +4,11 @@ #include "adcs.h" #include "uarts.h" -// 串口协议参数 -#define UART_RXSIZE (240u) // 接收缓冲区 240个字节 -#define UART_TXSIZE (240u) // 发送缓冲区 240个字节 - -// 包头 + 状态码 + 设备号 + 命令号 + 长度 + 数据 + 校验 + 包尾 -// 1 1 1 1 1 0~128 2 1 -#define PACKET_STX 0xff // 包头 -#define PACKET_ETX 0x3c // 包尾 -#define MASTER_CODE 0x00 // 状态码-主机 - -// 最大数据长度 -#define DATA_MAX_LEN 128 -// 最小帧长度:包头 + 状态码 + 设备号 + 命令号 + 长度 + 校验 + 包尾 -#define PACKET_MIN_LEN 8 -// 最大帧长度 -#define PACKET_MAX_LEN (DATA_MAX_LEN + PACKET_MIN_LEN) - -// 电机初始默认值 -#define PULSE_REV 18000.0 // 每圈脉冲数(驱动器脉冲) -#define MIN_STEP_ANGLE (360 / PULSE_REV) // 最小步距 - -typedef enum -{ - ADC_SENSOR, - MOTOR, -} dev_id_e; +#define UART_RXSIZE (240u) // 接收240个字节 +#define UART_TXSIZE (240u) // 发送240个字节 +#define PULSE_REV 18000.0 /* 每圈脉冲数 */ +#define MAX_STEP_ANGLE (360 / PULSE_REV) /* 最小步距(360/PULSE_REV) */ +#define ANGLE 180 // 步进电机180度,转盘转动1度 typedef enum { @@ -43,37 +22,23 @@ typedef enum typedef enum { - SET_MOTOR_SPEED, - SET_DRIVER_PULSE, - GET_MIN_STEP, - GET_MOTOR_STATE, - MOTOR_MOVE, + MOTOR_IDEL, + MOTOR_RUN, MOTOR_STOP, -} motor_cmd_e; - -typedef enum -{ - GET_TORS_VALUE, -} sensor_cmd_e; - -typedef enum -{ - ST_DEV_NORMAL, - ST_DEV_BUSY, - ST_MSG_MISS, -} status_code_e; + MOTOR_STEP, +} motor_process_t; typedef struct { - uint8_t state; // 状态 - uint8_t dev_no; // 设备号 - uint8_t cmd_no; // 命令号 - uint8_t len; // 长度 - uint8_t data[DATA_MAX_LEN]; // 数据 - -} frame_msg_t; + uint8_t dir; + uint32_t angle; +} motor_ctrl_t; extern void board_init(void); -void host_data_deal(uint8_t *data, uint16_t len); +extern void motor_process_init(void); +extern void motor_process(void); +extern float32 torsion_detect(uint16_t adc); +extern float32 pressure_detect(uint16_t adc); +extern float32 flow_detect(uint16_t adc); #endif // __BOARD_H__ diff --git a/User/board/motor.c b/User/board/motor.c index 327b0eb..8092aac 100644 --- a/User/board/motor.c +++ b/User/board/motor.c @@ -20,6 +20,8 @@ static void step_motor_run(motor_t *motor, dir_e dir) handle->attribute.dir = dir; handle->attribute.en = TRUE; dir == DIR_CCW ? handle->gpios.dir->set(*handle->gpios.dir) : handle->gpios.dir->reset(*handle->gpios.dir); + LL_TIM_EnableIT_UPDATE(handle->pwm_timer); + // LL_TIM_EnableIT_CC2(handle->pwm_timer); PWM_START(handle->pwm_timer, handle->pwm_channel); } @@ -86,7 +88,8 @@ void step_motor_update(motor_t *motor) if (handle->attribute.pulse_count <= 0) /* 当脉冲数等于0的时候 代表需要发送的脉冲个数已完成,停止定时器输出 */ { LOG_PRINT("累计旋转的角度:%d\r\n", (int)(handle->attribute.add_pulse_count * handle->attribute.min_step_angle)); /* 打印累计转动了多少角度 */ - handle->interface.stop(motor); /* 停止接口一输出 */ + handle->interface.stop(motor); + /* 停止接口一输出 */ } } diff --git a/User/system/bsp/adcs.h b/User/system/bsp/adcs.h index cf7d374..6fc3a8f 100644 --- a/User/system/bsp/adcs.h +++ b/User/system/bsp/adcs.h @@ -65,24 +65,24 @@ typedef enum { - IN0 = 0, - IN1, - // IN2, - // IN3, - // IN4, - // IN5, - IN6, + // IN0 = 0, + // IN1, + // IN2, + // IN3, + // IN4, + // IN5, + // IN6, IN7, IN8, - IN9, - IN10, - IN11, - IN12, + // IN9, + // IN10, + // IN11, + // IN12, IN13, // IN14, // IN15, - INVREF, - INTEMP, + // INVREF, + // INTEMP, INMAX, } adc_num_t; // ADC通道号,根据cubemax配置的通道数量而定 diff --git a/User/system/bsp/uarts.c b/User/system/bsp/uarts.c index f0b157b..55a5185 100644 --- a/User/system/bsp/uarts.c +++ b/User/system/bsp/uarts.c @@ -41,79 +41,6 @@ } \ } while (__LINE__ == -1) -/** - * @file uarts.c - * @brief This file contains the implementation of DMA_CLEAR_FLAG_TC_CHANNEL macro. - */ - -/** - * @brief Clear the Transfer Complete (TC) flag of a specific DMA channel. - * - * @param dma The DMA peripheral. - * @param channel The DMA channel number. - */ -#define DMA_CLEAR_FLAG_TC_CHANNEL(dma, channel) \ - switch (channel) \ - { \ - case 1: \ - DMA_ClEAR_FLAG_TC(dma, 1); \ - break; \ - case 2: \ - DMA_ClEAR_FLAG_TC(dma, 2); \ - break; \ - case 3: \ - DMA_ClEAR_FLAG_TC(dma, 3); \ - break; \ - case 4: \ - DMA_ClEAR_FLAG_TC(dma, 4); \ - break; \ - case 5: \ - DMA_ClEAR_FLAG_TC(dma, 5); \ - break; \ - case 6: \ - DMA_ClEAR_FLAG_TC(dma, 6); \ - break; \ - case 7: \ - DMA_ClEAR_FLAG_TC(dma, 7); \ - break; \ - default: \ - break; \ - } - -/** - * @brief Clear the Transfer Error (TE) flag for the specified DMA channel. - * - * @param dma The DMA peripheral. - * @param channel The DMA channel number. - */ -#define DMA_CLEAR_FLAG_TE_CHANNEL(dma, channel) \ - switch (channel) \ - { \ - case 1: \ - DMA_ClEAR_FLAG_TE(dma, 1); \ - break; \ - case 2: \ - DMA_ClEAR_FLAG_TE(dma, 2); \ - break; \ - case 3: \ - DMA_ClEAR_FLAG_TE(dma, 3); \ - break; \ - case 4: \ - DMA_ClEAR_FLAG_TE(dma, 4); \ - break; \ - case 5: \ - DMA_ClEAR_FLAG_TE(dma, 5); \ - break; \ - case 6: \ - DMA_ClEAR_FLAG_TE(dma, 6); \ - break; \ - case 7: \ - DMA_ClEAR_FLAG_TE(dma, 7); \ - break; \ - default: \ - break; \ - } - /** * @brief 创建一个UART设备 * @param {USART_TypeDef} *huart USART总线设备句柄 @@ -203,8 +130,6 @@ void uart_recv_en(uart_t *uart) LL_DMA_SetMemoryAddress(uart->dma, uart->dma_tx_channel, (uint32_t)uart->txbuf); LL_DMA_EnableIT_TC(uart->dma, uart->dma_tx_channel); LL_USART_EnableDMAReq_TX(uart->huart); - - uart->tx_dma_ok = TRUE; } } @@ -244,9 +169,8 @@ void uart_send_data(uart_t *uart, uint8_t *data, uint16_t len) DBG_ASSERT(data != NULL __DBG_LINE); DBG_ASSERT(len > 0 __DBG_LINE); uint8_t count = 0; - if (TRUE == uart->tx_dma_en && uart->tx_dma_ok == TRUE) + if (TRUE == uart->tx_dma_en) { - uart->tx_dma_ok = FALSE; osel_memcpy(uart->txbuf, data, len); // 拷贝数据到发送缓冲区 LL_DMA_DisableChannel(uart->dma, uart->dma_tx_channel); // 配置数据长度 @@ -256,7 +180,6 @@ void uart_send_data(uart_t *uart, uint8_t *data, uint16_t len) } else { - count = 0; for (uint16_t i = 0; i < len; i++) { count = 0; @@ -268,13 +191,13 @@ void uart_send_data(uart_t *uart, uint8_t *data, uint16_t len) } } LL_USART_TransmitData8(uart->huart, data[i]); - } - count = 0; - while (!LL_USART_IsActiveFlag_TC(uart->huart)) - { - if (count++ >= 0xFE) + count = 0; + while (!LL_USART_IsActiveFlag_TC(uart->huart)) { - return; + if (count++ >= 0xFE) + { + return; + } } } } @@ -365,12 +288,13 @@ void uart_dma_reception_callback(uart_t *uart) LL_DMA_DisableChannel(uart->dma, uart->dma_tx_channel); // 清除发送中断标志位 - DMA_CLEAR_FLAG_TC_CHANNEL(uart->dma, uart->dma_tx_channel + 1); + DMA_ClEAR_FLAG_TC(uart->dma, 2); + DMA_ClEAR_FLAG_TC(uart->dma, 7); // 使能发送中断,用于关闭发送使能引脚 LL_USART_EnableIT_TC(uart->huart); // 使能发送中断,用于关闭发送使能引脚 - uart->tx_dma_ok = TRUE; - // 清除传输错误标志 - DMA_CLEAR_FLAG_TE_CHANNEL(uart->dma, uart->dma_tx_channel + 1); + // 清除接收中断标志位 + DMA_ClEAR_FLAG_TE(uart->dma, 2); + DMA_ClEAR_FLAG_TE(uart->dma, 7); } diff --git a/User/system/bsp/uarts.h b/User/system/bsp/uarts.h index 45fc902..28468db 100644 --- a/User/system/bsp/uarts.h +++ b/User/system/bsp/uarts.h @@ -1,132 +1,47 @@ -/** - * @file uarts.h - * @brief Header file for UARTs module. - * - * This file contains the definitions and function prototypes for UARTs module. - * The UARTs module provides functions for creating and managing UART instances, - * enabling reception, sending data, and handling interrupts. - */ - #ifndef __UARTS_H__ #define __UARTS_H__ - #include "lib.h" #include "main.h" -/** - * @brief Callback function type for UART receive interrupt. - * - * This function type is used to define the callback function for UART receive interrupt. - * The callback function is called when data is received on the UART. - * - * @param uart_index The index of the UART. - * @param data The received data. - * @param len The length of the received data. - */ +// typedef void (*rx_interupt_cb_t)(uint8_t uart_index, uint8_t *data, uint16_t len); -/** - * @brief Callback function type for UART transmit complete. - * - * This function type is used to define the callback function for UART transmit complete. - * The callback function is called when the UART transmission is complete. - */ +// typedef void (*tx_complete_cb_t)(void); -/** - * @brief Enumeration for UART status. - */ -typedef enum -{ - UART_OK = 0x00u, /**< The action was successful. */ - UART_ERROR = 0xFFu /**< Generic error. */ -} uart_status_e; - -/** - * @brief Structure representing a UART instance. - */ +// typedef struct { - uint8_t uart_index; /**< The index of the UART. */ - USART_TypeDef *huart; /**< The UART peripheral. */ - DMA_TypeDef *dma; /**< The DMA peripheral. */ - uint32_t dma_rx_channel; /**< The DMA receive channel. */ - uint32_t dma_tx_channel; /**< The DMA transmit channel. */ - uint16_t rx_index; /**< The receive data index. */ - BOOL rx_dma_en; /**< Flag indicating if DMA reception is enabled. */ - uint8_t *rxbuf; /**< The receive buffer. */ - uint16_t rxsize; /**< The size of the receive buffer. */ - uint16_t tx_index; /**< The transmit data index. */ - BOOL tx_dma_en; /**< Flag indicating if DMA transmission is enabled. */ - uint8_t *txbuf; /**< The transmit buffer. */ - uint16_t txsize; /**< The size of the transmit buffer. */ - __IO BOOL tx_dma_ok; /**< Flag indicating if DMA transmission is complete. */ - rx_interupt_cb_t rx_interupt_cb; /**< The receive interrupt callback function. */ - tx_complete_cb_t tx_complete_cb; /**< The transmit complete callback function. */ + uint8_t uart_index; // 串口索引 + USART_TypeDef *huart; + DMA_TypeDef *dma; // 外部设置 + uint32_t dma_rx_channel; // 外部设置 + uint32_t dma_tx_channel; // 外部设置 + + uint16_t rx_index; // 接收数据索引 + BOOL rx_dma_en; + uint8_t *rxbuf; + uint16_t rx_sta; + uint16_t rxsize; + + uint16_t tx_index; + BOOL tx_dma_en; + uint8_t *txbuf; + uint16_t txsize; + + // 接收中断回调 + rx_interupt_cb_t rx_interupt_cb; + // 发生完成回调 + tx_complete_cb_t tx_complete_cb; + } uart_t; -/** - * @brief Creates a UART instance. - * - * This function creates a UART instance with the specified parameters. - * - * @param huart The UART peripheral. - * @param rx_dma_en Flag indicating if DMA reception is enabled. - * @param rxsize The size of the receive buffer. - * @param rx_cb The receive interrupt callback function. - * @param tx_dma_en Flag indicating if DMA transmission is enabled. - * @param txsize The size of the transmit buffer. - * @param tx_complete_cb The transmit complete callback function. - * @return The created UART instance. - */ extern uart_t *uart_create(USART_TypeDef *huart, BOOL rx_dma_en, uint16_t rxsize, rx_interupt_cb_t rx_cb, - BOOL tx_dma_en, uint16_t txsize, tx_complete_cb_t tx_complete_cb); - -/** - * @brief Frees the resources of a UART instance. - * - * This function frees the resources allocated for a UART instance. - * - * @param uart The UART instance to free. - */ -extern void uart_free(uart_t *uart); - -/** - * @brief Enables UART reception. - * - * This function enables reception on the specified UART instance. - * - * @param uart The UART instance. - */ -extern void uart_recv_en(uart_t *uart); - -/** - * @brief Sends data over UART. - * - * This function sends the specified data over the specified UART instance. - * - * @param uart The UART instance. - * @param data The data to send. - * @param len The length of the data. - */ -extern void uart_send_data(uart_t *uart, uint8_t *data, uint16_t len); - -/** - * @brief UART receive interrupt callback. - * - * This function is the interrupt callback for UART receive interrupt. - * - * @param uart The UART instance. - */ -extern void uart_reception_callback(uart_t *uart); - -/** - * @brief DMA receive interrupt callback. - * - * This function is the interrupt callback for DMA receive interrupt. - * - * @param uart The UART instance. - */ -extern void uart_dma_reception_callback(uart_t *uart); + BOOL tx_dma_en, uint16_t txsize, tx_complete_cb_t tx_complete_cb); // 创建uart +extern void uart_free(uart_t *uart); // 释放uart资源 +extern void uart_recv_en(uart_t *uart); // 使能接收 +extern void uart_send_data(uart_t *uart, uint8_t *data, uint16_t len); // 发送数据 +extern void uart_reception_callback(uart_t *uart); // 接收中断回调 +extern void uart_dma_reception_callback(uart_t *uart); // DMA接收中断回调 #endif // __UARTS_H__