diff --git a/.vscode/settings.json b/.vscode/settings.json
index 181a970..9e0ec99 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -61,6 +61,9 @@
"cinttypes": "cpp",
"typeinfo": "cpp",
"can.h": "c",
- "deque": "cpp"
+ "deque": "cpp",
+ "param.h": "c",
+ "stdbool.h": "c",
+ "check.h": "c"
}
}
\ No newline at end of file
diff --git a/app/MDK-ARM/app.uvguix.h_zha b/app/MDK-ARM/app.uvguix.h_zha
index c916671..ca739b8 100644
--- a/app/MDK-ARM/app.uvguix.h_zha
+++ b/app/MDK-ARM/app.uvguix.h_zha
@@ -6,7 +6,7 @@
### uVision Project, (C) Keil Software
- D:\workspace\project_boditech_vidas_a8000\Incubator_control_system\src
+ D:\workspace\project_boditech_vidas_a8000\Incubator_control_system\src\board
@@ -93,8 +93,8 @@
2
3
- -1
- -1
+ -32000
+ -32000
-1
@@ -110,8 +110,8 @@
0
- 3699
- 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000019000000180000000100000056443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF64443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C4D444B2D41524D5C737461727475705F73746D33326634303778782E730000000015737461727475705F73746D33326634303778782E7300000000FFDC7800FFFFFFFF7D443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C69635C544D4334333631415C544D4334333631412E63000000000A544D4334333631412E6300000000BECEA100FFFFFFFF74443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C68656C706572735C4352432E6300000000054352432E6300000000F0A0A100FFFFFFFF79443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C72616D705C4C696E65617252616D70312E63000000000D4C696E65617252616D70312E6300000000BCA8E100FFFFFFFF78443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C72616D705C4C696E65617252616D702E63000000000C4C696E65617252616D702E63000000009CC1B600FFFFFFFF66443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D6334333631412E637070000000000C746D6334333631412E63707000000000F7B88600FFFFFFFF50443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C756D61696E2E6370700000000009756D61696E2E63707000000000D9ADC200FFFFFFFF77443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C2E63000000000F73746D3332663478785F68616C2E6300000000A5C2D700FFFFFFFF7C443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F756172742E63000000001473746D3332663478785F68616C5F756172742E6300000000B3A6BE00FFFFFFFF66443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D6334333631412E687070000000000C746D6334333631412E68707000000000EAD6A300FFFFFFFF5E443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C436F72655C5372635C73746D3332663478785F69742E63000000000E73746D3332663478785F69742E6300000000F6FA7D00FFFFFFFF65443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D63323136302E637070000000000B746D63323136302E63707000000000B5E99D00FFFFFFFF7B443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C69635C544D43323136305C544D43323136302E630000000009544D43323136302E63000000005FC3CF00FFFFFFFF7B443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F7370692E63000000001373746D3332663478785F68616C5F7370692E6300000000C1838300FFFFFFFF77443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C68656C706572735C4D6163726F732E6800000000084D6163726F732E6800000000CACAD500FFFFFFFF27433A5C4B65696C5F76355C41524D5C41524D43435C696E636C7564655C66756E6374696F6E616C000000000A66756E6374696F6E616C00000000C5D4F200FFFFFFFF7D443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C73746D33325F68616C5F7265735F6D616E616765722E637070000000001973746D33325F68616C5F7265735F6D616E616765722E63707000000000FFDC7800FFFFFFFF6B443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C62617369632E63000000000762617369632E6300000000BECEA100FFFFFFFF7B443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F63616E2E63000000001373746D3332663478785F68616C5F63616E2E6300000000F0A0A100FFFFFFFF92443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C636F6D706F6E656E745C69666C79746F705F63616E5F736C6176655F76315C69666C79746F705F63616E5F736C6176652E637070000000001569666C79746F705F63616E5F736C6176652E63707000000000BCA8E100FFFFFFFF79443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C636F6D706F6E656E745C746D703131375C746D703131372E637070000000000A746D703131372E637070000000009CC1B600FFFFFFFF6F443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C7A7369676E616C2E687070000000000B7A7369676E616C2E68707000000000F7B88600FFFFFFFF77443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C73746D33325F68616C5F7574696C732E637070000000001373746D33325F68616C5F7574696C732E63707000000000D9ADC200FFFFFFFF5C443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C66616E5F73746174655F6D6F6E69746F722E687070000000001566616E5F73746174655F6D6F6E69746F722E68707000000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000E9000000660000009006000099020000
+ 637
+ 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000300000002000000010000005B443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C6C6962746D63696D706C2E637070000000000E6C6962746D63696D706C2E63707000000000C5D4F200FFFFFFFF70443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C6C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000296C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000FFDC7800FFFFFFFF70443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C6C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E68707000000000296C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E68707000000000BECEA100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FC01000066000000900600006A020000
@@ -150,7 +150,7 @@
0
16
- 0300000066000000E200000069020000
+ 0300000066000000F50100003A020000
16
@@ -170,7 +170,7 @@
0
16
- 0300000066000000E200000069020000
+ 0300000066000000F50100003A020000
16
@@ -450,7 +450,7 @@
0
16
- 0300000066000000E200000069020000
+ 0300000066000000F50100003A020000
16
@@ -470,7 +470,7 @@
0
16
- 0300000066000000E200000069020000
+ 0300000066000000F50100003A020000
16
@@ -490,7 +490,7 @@
0
16
- 000000009A02000090060000C0030000
+ 000000006B02000090060000C0030000
16
@@ -530,7 +530,7 @@
0
16
- 030000009D0200008D060000A7030000
+ 030000006E0200008D06000078030000
16
@@ -1170,7 +1170,7 @@
0
16
- 030000009D0200008D060000A7030000
+ 030000006E0200008D06000078030000
16
@@ -1190,7 +1190,7 @@
0
16
- 030000009D0200008D060000A7030000
+ 030000006E0200008D06000078030000
16
@@ -1250,7 +1250,7 @@
0
16
- 030000009D0200008D060000A7030000
+ 030000006E0200008D06000078030000
16
@@ -1270,7 +1270,7 @@
0
16
- 030000009D0200008D060000A7030000
+ 030000006E0200008D06000078030000
16
@@ -1799,14 +1799,14 @@
3312
- 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFD6000000D9000000DC040000DD000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000D600000066000000DC040000F0000000D60000004F000000DC040000D90000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000013020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000000A04000066000000DC0400002A0200000A0400004F000000DC0400001302000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFE50000004F000000E90000008202000001000000020000100400000001000000B7FEFFFF3C050000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000E500000099020000000000004F000000E5000000820200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000FF010000DC0400000302000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000001A020000DC040000B80200000000000003020000DC040000A102000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF6E0200000302000072020000A102000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000008202000090060000860200000100000001000010040000000100000038FEFFFF9E010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000009D02000090060000D7030000000000008602000090060000C00300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
+ 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFD6000000D9000000DC040000DD000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000D600000066000000DC040000F0000000D60000004F000000DC040000D90000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000013020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000000A04000066000000DC0400002A0200000A0400004F000000DC0400001302000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF80100004F000000FC010000530200000100000002000010040000000100000030FDFFFFB5030000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000E500000099020000000000004F000000F8010000530200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000FF010000DC0400000302000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000001A020000DC040000B80200000000000003020000DC040000A102000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF6E0200000302000072020000A102000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000530200009006000057020000010000000100001004000000010000009AFCFFFF00000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000009D02000090060000D7030000000000005702000090060000C00300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
59392
File
2537
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -1838,7 +1838,7 @@
Debug
2373
- 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
+ 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
898
@@ -3603,117 +3603,9 @@
0
100
- 24
-
- ../Core/Src/main.c
- 0
- 60
- 70
- 1
-
- 0
-
-
- startup_stm32f407xx.s
- 0
- 168
- 174
- 1
-
- 0
-
-
- ..\..\dep\libtrinamic\IFLYTOP-TMC-API\tmc\ic\TMC4361A\TMC4361A.c
- 0
- 194
- 201
- 1
-
- 0
-
-
- ..\..\dep\libtrinamic\IFLYTOP-TMC-API\tmc\helpers\CRC.c
- 0
- 1
- 1
- 1
-
- 0
-
-
- ..\..\dep\libtrinamic\IFLYTOP-TMC-API\tmc\ramp\LinearRamp1.c
- 0
- 1
- 1
- 1
-
- 0
-
+ 2
- D:\workspace\project_boditech_vidas_a8000\Incubator_control_system\dep\libtrinamic\IFLYTOP-TMC-API\tmc\ramp\LinearRamp.c
- 0
- 1
- 1
- 1
-
- 0
-
-
- ..\..\dep\libtrinamic\src\ic\tmc4361A.cpp
- 21
- 66
- 76
- 1
-
- 0
-
-
- ..\..\src\umain.cpp
- 0
- 60
- 70
- 1
-
- 0
-
-
- ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c
- 0
- 315
- 325
- 1
-
- 0
-
-
- ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c
- 0
- 3171
- 3181
- 1
-
- 0
-
-
- ..\..\dep\libtrinamic\src\ic\tmc4361A.hpp
- 5
- 141
- 151
- 1
-
- 0
-
-
- ../Core/Src/stm32f4xx_it.c
- 0
- 79
- 89
- 1
-
- 0
-
-
- ..\..\dep\libtrinamic\src\ic\tmc2160.cpp
+ ..\..\src\board\libtmcimpl.cpp
0
1
10
@@ -3722,35 +3614,8 @@
0
- ..\..\dep\libtrinamic\IFLYTOP-TMC-API\tmc\ic\TMC2160\TMC2160.c
- 0
- 104
- 114
- 1
-
- 0
-
-
- ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c
- 0
- 1252
- 1262
- 1
-
- 0
-
-
- ..\..\dep\libtrinamic\IFLYTOP-TMC-API\tmc\helpers\Macros.h
- 0
- 6
- 27
- 1
-
- 0
-
-
- C:\Keil_v5\ARM\ARMCC\include\functional
- 0
+ ..\..\src\lncubator_temperature_control_service.cpp
+ 47
1
1
1
@@ -3758,73 +3623,10 @@
0
- ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_res_manager.cpp
- 0
+ ..\..\src\lncubator_temperature_control_service.hpp
+ 26
1
- 18
- 1
-
- 0
-
-
- ..\..\dep\libiflytop_micro\stm32\basic\basic.c
- 0
- 2
- 25
- 1
-
- 0
-
-
- ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c
- 0
- 1719
- 1726
- 1
-
- 0
-
-
- ..\..\dep\libiflytop_micro\stm32\component\iflytop_can_slave_v1\iflytop_can_slave.cpp
- 10
- 104
- 114
- 1
-
- 0
-
-
- ..\..\dep\libiflytop_micro\stm32\component\tmp117\tmp117.cpp
- 17
- 24
- 47
- 1
-
- 0
-
-
- ..\..\dep\libiflytop_micro\stm32\basic\zsignal.hpp
- 96
- 72
- 95
- 1
-
- 0
-
-
- ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_utils.cpp
- 14
- 90
- 120
- 1
-
- 0
-
-
- ..\..\src\fan_state_monitor.hpp
- 6
- 3
- 33
+ 17
1
0
diff --git a/app/MDK-ARM/app.uvoptx b/app/MDK-ARM/app.uvoptx
index ae00568..cd8d82f 100644
--- a/app/MDK-ARM/app.uvoptx
+++ b/app/MDK-ARM/app.uvoptx
@@ -925,8 +925,8 @@
0
0
0
- ..\..\src\device_io_service.cpp
- device_io_service.cpp
+ ..\..\src\lncubator_temperature_control_service.cpp
+ lncubator_temperature_control_service.cpp
0
0
@@ -937,7 +937,43 @@
0
0
0
- ..\..\src\libtmcimpl.cpp
+ ..\..\src\board\device_io_service.cpp
+ device_io_service.cpp
+ 0
+ 0
+
+
+ 6
+ 42
+ 8
+ 0
+ 0
+ 0
+ ..\..\src\board\fan_state_monitor.cpp
+ fan_state_monitor.cpp
+ 0
+ 0
+
+
+ 6
+ 43
+ 8
+ 0
+ 0
+ 0
+ ..\..\src\board\hardware.cpp
+ hardware.cpp
+ 0
+ 0
+
+
+ 6
+ 44
+ 8
+ 0
+ 0
+ 0
+ ..\..\src\board\libtmcimpl.cpp
libtmcimpl.cpp
0
0
@@ -952,7 +988,7 @@
0
7
- 42
+ 45
1
0
0
@@ -964,7 +1000,7 @@
7
- 43
+ 46
1
0
0
@@ -976,7 +1012,7 @@
7
- 44
+ 47
1
0
0
@@ -988,7 +1024,7 @@
7
- 45
+ 48
1
0
0
@@ -1000,7 +1036,7 @@
7
- 46
+ 49
8
0
0
@@ -1012,7 +1048,7 @@
7
- 47
+ 50
1
0
0
@@ -1024,7 +1060,7 @@
7
- 48
+ 51
1
0
0
@@ -1036,7 +1072,7 @@
7
- 49
+ 52
8
0
0
@@ -1048,7 +1084,7 @@
7
- 50
+ 53
8
0
0
@@ -1060,7 +1096,7 @@
7
- 51
+ 54
8
0
0
@@ -1072,7 +1108,7 @@
7
- 52
+ 55
8
0
0
@@ -1084,13 +1120,13 @@
7
- 53
- 8
+ 56
+ 1
0
0
0
- ..\..\src\fan_state_monitor.cpp
- fan_state_monitor.cpp
+ ..\..\dep\libiflytop_micro\stm32\component\pid\pid_ctrl.c
+ pid_ctrl.c
0
0
diff --git a/app/MDK-ARM/app.uvprojx b/app/MDK-ARM/app.uvprojx
index 25b29b6..3020990 100644
--- a/app/MDK-ARM/app.uvprojx
+++ b/app/MDK-ARM/app.uvprojx
@@ -1216,14 +1216,29 @@
..\..\src\umain.cpp
+ lncubator_temperature_control_service.cpp
+ 8
+ ..\..\src\lncubator_temperature_control_service.cpp
+
+
device_io_service.cpp
8
- ..\..\src\device_io_service.cpp
+ ..\..\src\board\device_io_service.cpp
+
+
+ fan_state_monitor.cpp
+ 8
+ ..\..\src\board\fan_state_monitor.cpp
+
+
+ hardware.cpp
+ 8
+ ..\..\src\board\hardware.cpp
libtmcimpl.cpp
8
- ..\..\src\libtmcimpl.cpp
+ ..\..\src\board\libtmcimpl.cpp
@@ -1286,9 +1301,9 @@
..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_utils.cpp
- fan_state_monitor.cpp
- 8
- ..\..\src\fan_state_monitor.cpp
+ pid_ctrl.c
+ 1
+ ..\..\dep\libiflytop_micro\stm32\component\pid\pid_ctrl.c
diff --git a/dep/libiflytop_micro b/dep/libiflytop_micro
index 1be6e0e..645e10e 160000
--- a/dep/libiflytop_micro
+++ b/dep/libiflytop_micro
@@ -1 +1 @@
-Subproject commit 1be6e0ea5a7193a1eac2460413476302bd9c8dea
+Subproject commit 645e10e79f235ef9a05d3026091d692b18f6b5f8
diff --git a/src/device_io_service.cpp b/src/board/device_io_service.cpp
similarity index 99%
rename from src/device_io_service.cpp
rename to src/board/device_io_service.cpp
index 3aa35b5..09d46ce 100644
--- a/src/device_io_service.cpp
+++ b/src/board/device_io_service.cpp
@@ -12,7 +12,6 @@ int fputc(int ch, FILE *stream) {
using namespace iflytop;
namespace iflytop {
-DeviceIoService deviceIoService;
}
void DeviceIoService::fanInit(int freq) {
diff --git a/src/device_io_service.hpp b/src/board/device_io_service.hpp
similarity index 96%
rename from src/device_io_service.hpp
rename to src/board/device_io_service.hpp
index 42da01b..f9a84bc 100644
--- a/src/device_io_service.hpp
+++ b/src/board/device_io_service.hpp
@@ -19,7 +19,7 @@ class DeviceIoService : public IflytopMicroOS {
private:
/* data */
- bool m_fanState[5];
+ bool m_fanState[6];
public:
DeviceIoService(/* args */) {}
@@ -66,5 +66,4 @@ class DeviceIoService : public IflytopMicroOS {
void tmc_motor_spi_select(int channel, bool state);
};
-extern DeviceIoService deviceIoService;
} // namespace iflytop
\ No newline at end of file
diff --git a/src/fan_state_monitor.cpp b/src/board/fan_state_monitor.cpp
similarity index 100%
rename from src/fan_state_monitor.cpp
rename to src/board/fan_state_monitor.cpp
diff --git a/src/fan_state_monitor.hpp b/src/board/fan_state_monitor.hpp
similarity index 100%
rename from src/fan_state_monitor.hpp
rename to src/board/fan_state_monitor.hpp
diff --git a/src/board/hardware.cpp b/src/board/hardware.cpp
new file mode 100644
index 0000000..c9606e0
--- /dev/null
+++ b/src/board/hardware.cpp
@@ -0,0 +1,148 @@
+#include "hardware.hpp"
+
+#include "i2c.h"
+using namespace iflytop;
+#define TAG "hardware"
+void Hardware::hardwareinit() {
+ m_os = &m_deviceIoService;
+ /*******************************************************************************
+ * CANSLAVEService初始化 *
+ *******************************************************************************/
+ IflytopCanSlave::iflytop_can_slave_config_t *config = canSlaveService.createDefaultConfig(DEVICE_ID);
+ canSlaveService.initialize(m_os, config);
+ /*******************************************************************************
+ * 帕尔贴初始化 *
+ *******************************************************************************/
+ m_deviceIoService.peltier_init();
+ /*******************************************************************************
+ * 温度传感器初始化 *
+ *******************************************************************************/
+ tmp117[0].initializate(&hi2c1, TMP117::ID0);
+ tmp117[1].initializate(&hi2c1, TMP117::ID1);
+ tmp117[2].initializate(&hi2c1, TMP117::ID2);
+ tmp117[3].initializate(&hi2c1, TMP117::ID3);
+
+ /*******************************************************************************
+ * 电机初始化 *
+ *******************************************************************************/
+ m_deviceIoService.tmc_init();
+ m_deviceIoService.tmc_extern_clk_enable();
+ // 4361初始化
+ TMC4361AImpl::TMC4361AConfig_t *tmc4361aconfig = TMC4361AImpl::createDeafultTMC4361AConfig();
+ tmc4361aconfig->base_config.fs_per_rev = 200;
+ tmc4361aconfig->encoder_config.diff_enc_in_disable = false;
+ tmc4361aconfig->encoder_config.enc_in_res = 4000;
+ tmc4361aconfig->close_loop_config.enable_closed_loop = true;
+
+ tmc4361motor1.initialize(&m_deviceIoService, MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160, tmc4361aconfig);
+ tmc4361motor1.setMaximumAcceleration(300000);
+ tmc4361motor1.setMaximumDeceleration(300000);
+
+ // 2160初始化
+ tmc2160motor1.setMaximumCurrent(3);
+ tmc2160motor1.initialize(&m_deviceIoService, &tmc4361motor1, MOTOR_1_TMC2160_CHANNEL);
+
+ HAL_Delay(100);
+ // 使能电机
+ tmc4361motor1.enableIC(true);
+ tmc2160motor1.enableIC(true);
+ /**
+ * @brief 通过读取Version寄存器来判断芯片是否正常
+ */
+ int32_t ic4361Version = tmc4361motor1.readICVersion();
+ int32_t ic2160Version = tmc2160motor1.readICVersion();
+ // 期望 4361Version:2 ic2160Version:30
+ ZLOGI(TAG, "TMC4361Version:%x TMC2160VERSION:%x", ic4361Version, ic2160Version);
+ if (ic4361Version != 2 || ic2160Version != 30) {
+ ZLOGE(TAG, "TMC4361 or TMC2160 is not normal");
+ }
+
+ /*******************************************************************************
+ * 风扇初始化 *
+ *******************************************************************************/
+ m_deviceIoService.fanInit(1000);
+ /**
+ * @brief 风扇反馈初始化
+ *
+ * FAN0_FB_INT PC1
+ * FAN1_FB_INT PC4
+ * FAN2_FB_INT PC5
+ * FAN3_FB_INT PC6
+ * FAN4_FB_INT PC7
+ * FAN5_FB_INT PC10
+ */
+
+ m_fanStateMonitor[0].initialize(m_os, GPIOC, GPIO_PIN_1, m_deviceIoService.fanGetPowerState(0));
+ m_fanStateMonitor[1].initialize(m_os, GPIOC, GPIO_PIN_4, m_deviceIoService.fanGetPowerState(1));
+ m_fanStateMonitor[2].initialize(m_os, GPIOC, GPIO_PIN_5, m_deviceIoService.fanGetPowerState(2));
+ m_fanStateMonitor[3].initialize(m_os, GPIOC, GPIO_PIN_6, m_deviceIoService.fanGetPowerState(3));
+ m_fanStateMonitor[4].initialize(m_os, GPIOC, GPIO_PIN_7, m_deviceIoService.fanGetPowerState(4));
+ m_fanStateMonitor[5].initialize(m_os, GPIOC, GPIO_PIN_10, m_deviceIoService.fanGetPowerState(5));
+}
+void Hardware::periodicJob() {
+ /**
+ * @brief 风扇状态监控服务周期调度
+ */
+ for (size_t i = 0; i < ZARRAY_SIZE(m_fanStateMonitor); i++) {
+ m_fanStateMonitor[i].periodicJob();
+ }
+ do_debug_light_state();
+}
+void Hardware::do_debug_light_state() {
+ static uint32_t lastprocess = 0;
+ if (sys_haspassedms(lastprocess) > 300) {
+ lastprocess = HAL_GetTick();
+ HAL_GPIO_TogglePin(DEBUG_LIGHT_PORT, DEBUG_LIGHT_PIN);
+ }
+}
+/*******************************************************************************
+ * 硬件测试 *
+ *******************************************************************************/
+void Hardware::testTmp117() {
+ static uint32_t lastcall;
+ if (m_os->hasPassedMS(lastcall) > 1000) {
+ lastcall = m_os->getTicket();
+ for (size_t i = 0; i < 4; i++) {
+ float temp = tmp117[i].getTemperature();
+ if (tmp117[i].getLastCallStatus() == HAL_OK) {
+ ZLOGI(TAG, "tmp117_%d:%f", i, temp);
+ } else {
+ ZLOGI(TAG, "tmp117_%d:read fail", i);
+ }
+ }
+ }
+}
+
+/**
+ * @brief 测试CAN的发送和接收
+ */
+void Hardware::testCanSlaveTxAndRx(bool canOnRxDataFlag) {
+ {
+ static uint32_t lastcall;
+ static uint8_t tx[8] = {1, 2, 3, 4, 5, 6, 7, 8};
+ if (m_os->hasPassedMS(lastcall) > 1000) {
+ lastcall = m_os->getTicket();
+ canSlaveService.translate(0x01, tx, 8, 2);
+ if (canSlaveService.getLastTransmitStatus() == HAL_OK) {
+ ZLOGI(TAG, "send ok");
+ } else {
+ ZLOGI(TAG, "send fail");
+ }
+ }
+ }
+
+ /**
+ * @brief 接收CAN消息
+ */
+ if (canOnRxDataFlag) {
+ canOnRxDataFlag = false;
+ static CAN_RxHeaderTypeDef packetHeader;
+ static uint8_t packetData[8];
+ while (canSlaveService.getRxMessage(&packetHeader, packetData)) {
+ ZLOGI(TAG, "rx packet:");
+ ZLOGI(TAG, "\tid:%x len:%d", packetHeader.StdId, packetHeader.DLC);
+ ZLOGI_HEX(TAG, packetData, packetHeader.DLC);
+ }
+ canSlaveService.activateRxIT();
+ }
+}
diff --git a/src/board/hardware.hpp b/src/board/hardware.hpp
new file mode 100644
index 0000000..4c0ee8c
--- /dev/null
+++ b/src/board/hardware.hpp
@@ -0,0 +1,36 @@
+
+#pragma once
+#include "board/device_io_service.hpp"
+#include "board/fan_state_monitor.hpp"
+#include "board/libtmcimpl.hpp"
+#include "libiflytop_micro\stm32\component\iflytop_can_slave_v1\iflytop_can_slave.hpp"
+#include "libiflytop_micro\stm32\component\tmp117\tmp117.hpp"
+
+namespace iflytop {
+class Hardware {
+ private:
+ /* data */
+ public:
+ TMC4361AImpl tmc4361motor1;
+ TMC2160Impl tmc2160motor1;
+ TMP117 tmp117[4];
+ FanStateMonitor m_fanStateMonitor[6];
+ IflytopCanSlave canSlaveService;
+ IflytopMicroOS* m_os;
+ DeviceIoService m_deviceIoService;
+
+ Hardware(/* args */){};
+ ~Hardware(){};
+
+ void hardwareinit();
+ void periodicJob();
+
+ /*******************************************************************************
+ * 测试 *
+ *******************************************************************************/
+ void testTmp117();
+ void testCanSlaveTxAndRx(bool canOnRxDataFlag);
+ void do_debug_light_state();
+};
+
+} // namespace iflytop
diff --git a/src/board/libtmcimpl.cpp b/src/board/libtmcimpl.cpp
new file mode 100644
index 0000000..d517932
--- /dev/null
+++ b/src/board/libtmcimpl.cpp
@@ -0,0 +1,35 @@
+#pragma once
+#include "libtmcimpl.hpp"
+
+#include "device_io_service.hpp"
+namespace iflytop {
+using namespace std;
+/*******************************************************************************
+ * TMC4361AImpl *
+ *******************************************************************************/
+void TMC4361AImpl::setResetPinState(bool state) { m_deviceIoService->tmc_nRESET_pin_set_state(m_channel, state); };
+void TMC4361AImpl::setFREEZEPinState(bool state) { m_deviceIoService->tmc_nFREEZE_pin_set_state(m_channel, state); };
+void TMC4361AImpl::setENNPinState(bool state) { m_deviceIoService->tmc_ENN_pin_set_state(m_channel, state); };
+bool TMC4361AImpl::getTargetReachedPinState() { return false; };
+void TMC4361AImpl::sleepus(int32_t us) { m_deviceIoService->sleepus(us); };
+void TMC4361AImpl::readWriteArray(uint8_t *data, size_t length) { //
+ m_deviceIoService->tmc_motor_spi_write_and_read(m_channel, data, length);
+};
+
+void TMC4361AImpl::initialize(DeviceIoService *deviceIoService, uint8_t channel, driver_ic_type_t driver_ic_type, TMC4361AConfig_t *config) {
+ m_deviceIoService = deviceIoService;
+ TMC4361A::initialize(channel, driver_ic_type, config);
+}
+
+/*******************************************************************************
+ * TMC2160Impl *
+ *******************************************************************************/
+void TMC2160Impl::initialize(DeviceIoService *deviceIoService, TMC4361A *tmc4361, uint8_t channelId) {
+ m_tmc4361 = tmc4361;
+ m_deviceIoService = deviceIoService;
+ TMC2160::initialize(channelId);
+}
+void TMC2160Impl::setENNPinState(bool state) { m_deviceIoService->tmc_ENN_pin_set_state(m_channel, state); };
+void TMC2160Impl::sleepus(int32_t us) { m_deviceIoService->sleepus(us); };
+void TMC2160Impl::readWriteArray(uint8_t *data, size_t length) { m_tmc4361->readWriteCover(data, length); };
+} // namespace iflytop
\ No newline at end of file
diff --git a/src/libtmcimpl.hpp b/src/board/libtmcimpl.hpp
similarity index 67%
rename from src/libtmcimpl.hpp
rename to src/board/libtmcimpl.hpp
index b1eb381..47eaa0a 100644
--- a/src/libtmcimpl.hpp
+++ b/src/board/libtmcimpl.hpp
@@ -1,5 +1,6 @@
#pragma once
+#include "board/device_io_service.hpp"
#include "libiflytop_micro/stm32/basic/basic.h"
#include "libtrinamic/src/ic/tmc2160.hpp"
#include "libtrinamic\src\ic\tmc4361A.hpp"
@@ -9,6 +10,8 @@ using namespace std;
* @brief 对接TMC4361和硬件的接口
*/
class TMC4361AImpl : public TMC4361A {
+ DeviceIoService *m_deviceIoService;
+
protected:
virtual void setResetPinState(bool state);
virtual void setFREEZEPinState(bool state);
@@ -16,15 +19,19 @@ class TMC4361AImpl : public TMC4361A {
virtual bool getTargetReachedPinState();
virtual void sleepus(int32_t us);
virtual void readWriteArray(uint8_t *data, size_t length);
+
+ public:
+ void initialize(DeviceIoService *deviceIoService, uint8_t channel, driver_ic_type_t driver_ic_type, TMC4361AConfig_t *config);
};
/**
* @brief 对接TMC2160和硬件的接口
*/
class TMC2160Impl : public TMC2160 {
- TMC4361A *m_tmc4361;
+ TMC4361A *m_tmc4361;
+ DeviceIoService *m_deviceIoService;
public:
- void initialize(uint8_t channel, TMC4361A *tmc4361);
+ void initialize(DeviceIoService *deviceIoService, TMC4361A *tmc4361, uint8_t channelId);
protected:
virtual void setENNPinState(bool state);
diff --git a/src/libtmcimpl.cpp b/src/libtmcimpl.cpp
deleted file mode 100644
index 371b5f2..0000000
--- a/src/libtmcimpl.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#pragma once
-#include "libtmcimpl.hpp"
-
-#include "device_io_service.hpp"
-namespace iflytop {
-using namespace std;
-/*******************************************************************************
- * TMC4361AImpl *
- *******************************************************************************/
-void TMC4361AImpl::setResetPinState(bool state) { deviceIoService.tmc_nRESET_pin_set_state(m_channel, state); };
-void TMC4361AImpl::setFREEZEPinState(bool state) { deviceIoService.tmc_nFREEZE_pin_set_state(m_channel, state); };
-void TMC4361AImpl::setENNPinState(bool state) { deviceIoService.tmc_ENN_pin_set_state(m_channel, state); };
-bool TMC4361AImpl::getTargetReachedPinState() { return false; };
-void TMC4361AImpl::sleepus(int32_t us) { deviceIoService.sleepus(us); };
-void TMC4361AImpl::readWriteArray(uint8_t *data, size_t length) { //
- deviceIoService.tmc_motor_spi_write_and_read(m_channel, data, length);
-};
-/*******************************************************************************
- * TMC2160Impl *
- *******************************************************************************/
-void TMC2160Impl::initialize(uint8_t channel, TMC4361A *tmc4361) {
- m_tmc4361 = tmc4361;
- TMC2160::initialize(channel);
-}
-void TMC2160Impl::setENNPinState(bool state) { deviceIoService.tmc_ENN_pin_set_state(m_channel, state); };
-void TMC2160Impl::sleepus(int32_t us) { deviceIoService.sleepus(us); };
-void TMC2160Impl::readWriteArray(uint8_t *data, size_t length) { m_tmc4361->readWriteCover(data, length); };
-} // namespace iflytop
\ No newline at end of file
diff --git a/src/lncubator_temperature_control_service.cpp b/src/lncubator_temperature_control_service.cpp
new file mode 100644
index 0000000..7d9f478
--- /dev/null
+++ b/src/lncubator_temperature_control_service.cpp
@@ -0,0 +1,129 @@
+#include "lncubator_temperature_control_service.hpp"
+using namespace iflytop;
+#define TAG "LTCS"
+
+const int LncubatorTemperatureControlService::m_compute_periodms = 1000;
+const float LncubatorTemperatureControlService::m_error_limit = 50;
+const float LncubatorTemperatureControlService::m_kp = 30;
+const float LncubatorTemperatureControlService::m_ki = 1;
+const float LncubatorTemperatureControlService::m_kd = 0;
+const float LncubatorTemperatureControlService::m_max_output = 100;
+const float LncubatorTemperatureControlService::m_min_output = -100;
+const bool LncubatorTemperatureControlService::m_dumpvalue = false;
+
+void LncubatorTemperatureControlService::initialize(Hardware* hardware) {
+#if 0
+ pid_ctrl_config_t m_init_config;
+ pid_ctrl_block_handle_t m_pidblock;
+ IflytopMicroOS* m_os;
+ float m_nowoutput = 0;
+ bool m_workingState;
+#endif
+
+ m_init_config.init_param.kp = 30;
+ m_init_config.init_param.ki = 1;
+ m_init_config.init_param.kd = 0;
+ m_init_config.init_param.cal_type = PID_CAL_TYPE_POSITIONAL;
+ m_init_config.init_param.max_output = m_max_output;
+ m_init_config.init_param.min_output = m_min_output;
+ m_init_config.init_param.max_integral = m_error_limit;
+ m_init_config.init_param.min_integral = -m_error_limit;
+
+ pid_new_control_block(&m_init_config, &m_pidblock);
+ ZASSERT(m_pidblock != NULL);
+ m_hardware = hardware;
+ m_nowoutput = 0;
+
+ m_target_temperature = 25;
+
+ m_periodicJobLastExecuteTicket = 0;
+}
+
+void LncubatorTemperatureControlService::setTargetTemperature(int targetTemperature) { //
+ m_target_temperature = targetTemperature;
+}
+void LncubatorTemperatureControlService::setPidKp(float value) {
+ m_init_config.init_param.kp = value;
+ pid_update_parameters(m_pidblock, &m_init_config.init_param);
+}
+void LncubatorTemperatureControlService::setPidKi(float value) {
+ m_init_config.init_param.ki = value;
+ pid_update_parameters(m_pidblock, &m_init_config.init_param);
+}
+void LncubatorTemperatureControlService::setPidKd(float value) {
+ m_init_config.init_param.kd = value;
+ pid_update_parameters(m_pidblock, &m_init_config.init_param);
+}
+
+void LncubatorTemperatureControlService::setPidParameters(float kp, float ki, float kd) {
+ m_init_config.init_param.kp = kp;
+ m_init_config.init_param.ki = ki;
+ m_init_config.init_param.kd = kd;
+ pid_update_parameters(m_pidblock, &m_init_config.init_param);
+}
+float LncubatorTemperatureControlService::getTemperature() {
+ float temperature[4];
+ temperature[0] = m_hardware->tmp117[0].getTemperature();
+ temperature[1] = m_hardware->tmp117[1].getTemperature();
+ temperature[2] = m_hardware->tmp117[2].getTemperature();
+ temperature[3] = m_hardware->tmp117[3].getTemperature();
+
+ float temperature_median = 0;
+ // 取温度的中位数
+ for (int i = 0; i < 4; i++) {
+ for (int j = i + 1; j < 4; j++) {
+ if (temperature[i] > temperature[j]) {
+ float temp = temperature[i];
+ temperature[i] = temperature[j];
+ temperature[j] = temp;
+ }
+ }
+ }
+ temperature_median = (temperature[1] + temperature[2]) / 2;
+ return temperature_median;
+}
+void LncubatorTemperatureControlService::setPwmOutput(float output) { m_hardware->m_deviceIoService.peltier_set_pwm(output); }
+
+void LncubatorTemperatureControlService::start() {
+ pid_reset(m_pidblock);
+ /**
+ * @brief
+ * 启动时,之所以将积分极限积分,主要是因为正常使用时,温度基本上是从20度开始,加热过程中积分通常会累计到极限值,
+ * 同时为了方便确定当前PID参数是否正确,需要多次测试到达目标温度后,曲线是否稳定,但每次测试降低温度温度到室温
+ * 很耽误时间,所以这里直接将积分拉满,这样就不需要降低温度就能测试PID参数了。
+ */
+ pid_set_integral_err(m_pidblock, m_error_limit);
+ m_workingState = true;
+}
+void LncubatorTemperatureControlService::stop() {}
+
+void LncubatorTemperatureControlService::periodicJob() {
+ if (!m_workingState) return;
+ if (m_hardware->m_os->hasPassedMS(m_periodicJobLastExecuteTicket) < m_compute_periodms) {
+ return;
+ }
+ m_periodicJobLastExecuteTicket = m_os->getTicket();
+
+ float current_temperature = getTemperature();
+ float output = 0;
+ pid_compute(m_pidblock, m_target_temperature - current_temperature, &output);
+ pwmOutputFilter(output, &m_nowoutput);
+ if (m_dumpvalue) {
+ ZLOGI(TAG, "%.2f,%.2f,%.2f,%.2f", m_target_temperature, current_temperature, pid_get_integral_err(m_pidblock), m_nowoutput);
+ }
+ setPwmOutput(m_nowoutput);
+}
+
+void LncubatorTemperatureControlService::pwmOutputFilter(float now, float* output) {
+ /**
+ * @brief 控制PWM输出最多以每次10的步进进行变化
+ */
+ if (now > *output) {
+ *output += 10;
+ if (*output > now) {
+ *output = now;
+ }
+ } else if (now < *output) {
+ *output = now;
+ }
+}
diff --git a/src/lncubator_temperature_control_service.hpp b/src/lncubator_temperature_control_service.hpp
new file mode 100644
index 0000000..542af8e
--- /dev/null
+++ b/src/lncubator_temperature_control_service.hpp
@@ -0,0 +1,55 @@
+#pragma once
+#include "board/device_io_service.hpp"
+#include "board\hardware.hpp"
+#include "libiflytop_micro\stm32\basic\iflytop_micro_os.hpp"
+#include "libiflytop_micro\stm32\component\pid\pid_ctrl.h"
+#include "libiflytop_micro\stm32\component\tmp117\tmp117.hpp"
+namespace iflytop {
+
+class LncubatorTemperatureControlService {
+ /*******************************************************************************
+ * Config *
+ *******************************************************************************/
+ static const int m_compute_periodms;
+ static const float m_error_limit;
+ static const float m_kp;
+ static const float m_ki;
+ static const float m_kd;
+ static const float m_max_output;
+ static const float m_min_output;
+ static const bool m_dumpvalue;
+
+ pid_ctrl_config_t m_init_config;
+ pid_ctrl_block_handle_t m_pidblock;
+ Hardware* m_hardware;
+ IflytopMicroOS* m_os;
+ float m_nowoutput;
+ bool m_workingState;
+ float m_target_temperature;
+
+ uint32_t m_periodicJobLastExecuteTicket;
+
+ public:
+ void initialize(Hardware* hardware);
+
+ void setPidParameters(float kp, float ki, float kd);
+ void setPidKp(float value);
+ void setPidKi(float value);
+ void setPidKd(float value);
+ void setTargetTemperature(int targetTemperature);
+
+ void start();
+ void stop();
+
+ /**
+ * @brief 主循环中尽可能多的机会调用该方法
+ */
+ void periodicJob();
+
+ private:
+ void pwmOutputFilter(float now, float* output);
+ float getTemperature();
+ void setPwmOutput(float output);
+};
+
+} // namespace iflytop
\ No newline at end of file
diff --git a/src/project_board.hpp b/src/project_board.hpp
index 82e08dd..9dd8c82 100644
--- a/src/project_board.hpp
+++ b/src/project_board.hpp
@@ -18,3 +18,5 @@
// 电机编号
#define MOTOR_1_TMC4361A_CHANNEL 1
#define MOTOR_1_TMC2160_CHANNEL 2
+
+//
\ No newline at end of file
diff --git a/src/umain.cpp b/src/umain.cpp
index 0706a76..b178d3c 100644
--- a/src/umain.cpp
+++ b/src/umain.cpp
@@ -1,18 +1,19 @@
#include
#include
-#include "device_io_service.hpp"
+#include "board/device_io_service.hpp"
+#include "board/libtmcimpl.hpp"
#include "libiflytop_micro\stm32\basic\basic.h"
-#include "libtmcimpl.hpp"
#include "libtrinamic/src/ic/tmc2160.hpp"
#include "libtrinamic\src\ic\tmc4361A.hpp"
#include "project_board.hpp"
//
-#include "fan_state_monitor.hpp"
+#include "board/hardware.hpp"
#include "i2c.h"
#include "libiflytop_micro\stm32\basic\zsignal.hpp"
#include "libiflytop_micro\stm32\component\iflytop_can_slave_v1\iflytop_can_slave.hpp"
#include "libiflytop_micro\stm32\component\tmp117\tmp117.hpp"
+#include "lncubator_temperature_control_service.hpp"
#define TAG "main"
using namespace iflytop;
@@ -21,13 +22,10 @@ class Main {
public:
signal_listener_t zsignal_listener[20];
- TMC4361AImpl tmc4361motor1;
- TMC2160Impl tmc2160motor1;
- TMP117 tmp117[4];
- IflytopCanSlave canSlaveService;
- IflytopMicroOS *os;
-
- FanStateMonitor m_fanStateMonitor[6];
+ LncubatorTemperatureControlService m_lncubatorTemperatureControlService;
+ Hardware m_hardware;
+ IflytopCanSlave *canSlaveService;
+ IflytopMicroOS *os;
bool canOnRxDataFlag;
@@ -35,110 +33,18 @@ class Main {
ZSLOT0(Main, onCanRxData);
void onCanRxData() {
canOnRxDataFlag = true;
- canSlaveService.deactivateRxIT();
+ canSlaveService->deactivateRxIT();
}
void initialize();
void main(int argc, char const *argv[]);
-
- void do_debug_light_state() {
- static uint32_t lastprocess = 0;
- if (sys_haspassedms(lastprocess) > 300) {
- lastprocess = HAL_GetTick();
- HAL_GPIO_TogglePin(DEBUG_LIGHT_PORT, DEBUG_LIGHT_PIN);
- }
- }
-
- /*******************************************************************************
- * 单元测试 *
- *******************************************************************************/
- /**
- * @brief 测试CAN的发送和接收
- */
- void testCanSlaveTxAndRx();
- void testTmp117();
};
void Main::initialize() {
zsignal_init(zsignal_listener, ZARRAY_SIZE(zsignal_listener));
- os = &deviceIoService;
-
- /*******************************************************************************
- * 帕尔贴初始化 *
- *******************************************************************************/
- deviceIoService.peltier_init();
-
- /*******************************************************************************
- * 温度传感器初始化 *
- *******************************************************************************/
- tmp117[0].initializate(&hi2c1, TMP117::ID0);
- tmp117[1].initializate(&hi2c1, TMP117::ID1);
- tmp117[2].initializate(&hi2c1, TMP117::ID2);
- tmp117[3].initializate(&hi2c1, TMP117::ID3);
-
- /*******************************************************************************
- * 电机初始化 *
- *******************************************************************************/
- deviceIoService.tmc_init();
- deviceIoService.tmc_extern_clk_enable();
- // 4361初始化
- TMC4361AImpl::TMC4361AConfig_t *tmc4361aconfig = TMC4361AImpl::createDeafultTMC4361AConfig();
- tmc4361aconfig->base_config.fs_per_rev = 200;
- tmc4361aconfig->encoder_config.diff_enc_in_disable = false;
- tmc4361aconfig->encoder_config.enc_in_res = 4000;
- tmc4361aconfig->close_loop_config.enable_closed_loop = true;
-
- tmc4361motor1.initialize(MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160, tmc4361aconfig);
- tmc4361motor1.setMaximumAcceleration(300000);
- tmc4361motor1.setMaximumDeceleration(300000);
-
- // 2160初始化
- tmc2160motor1.setMaximumCurrent(3);
- tmc2160motor1.initialize(MOTOR_1_TMC2160_CHANNEL, &tmc4361motor1);
-
- HAL_Delay(100);
- // 使能电机
- tmc4361motor1.enableIC(true);
- tmc2160motor1.enableIC(true);
- /**
- * @brief 通过读取Version寄存器来判断芯片是否正常
- */
- int32_t ic4361Version = tmc4361motor1.readICVersion();
- int32_t ic2160Version = tmc2160motor1.readICVersion();
- // 期望 4361Version:2 ic2160Version:30
- ZLOGI(TAG, "TMC4361Version:%x TMC2160VERSION:%x", ic4361Version, ic2160Version);
- if (ic4361Version != 2 || ic2160Version != 30) {
- ZLOGE(TAG, "TMC4361 or TMC2160 is not normal");
- }
-
- /*******************************************************************************
- * CANSLAVEService初始化 *
- *******************************************************************************/
- IflytopCanSlave::iflytop_can_slave_config_t *config = canSlaveService.createDefaultConfig(DEVICE_ID);
- canSlaveService.initialize(os, config);
- canSlaveService.onCanRxData.connect(this, &Main::onCanRxData);
- canSlaveService.activateRxIT();
-
- /*******************************************************************************
- * 风扇初始化 *
- *******************************************************************************/
- deviceIoService.fanInit(1000);
- /**
- * @brief 风扇反馈初始化
- *
- * FAN0_FB_INT PC1
- * FAN1_FB_INT PC4
- * FAN2_FB_INT PC5
- * FAN3_FB_INT PC6
- * FAN4_FB_INT PC7
- * FAN5_FB_INT PC10
- */
-
- m_fanStateMonitor[0].initialize(os, GPIOC, GPIO_PIN_1, deviceIoService.fanGetPowerState(0));
- m_fanStateMonitor[1].initialize(os, GPIOC, GPIO_PIN_4, deviceIoService.fanGetPowerState(1));
- m_fanStateMonitor[2].initialize(os, GPIOC, GPIO_PIN_5, deviceIoService.fanGetPowerState(2));
- m_fanStateMonitor[3].initialize(os, GPIOC, GPIO_PIN_6, deviceIoService.fanGetPowerState(3));
- m_fanStateMonitor[4].initialize(os, GPIOC, GPIO_PIN_7, deviceIoService.fanGetPowerState(4));
- m_fanStateMonitor[5].initialize(os, GPIOC, GPIO_PIN_10, deviceIoService.fanGetPowerState(5));
+ m_hardware.hardwareinit();
+ canSlaveService = &m_hardware.canSlaveService;
+ canSlaveService->onCanRxData.connect(this, &Main::onCanRxData);
+ canSlaveService->activateRxIT();
}
void Main::main(int argc, char const *argv[]) {
@@ -147,16 +53,9 @@ void Main::main(int argc, char const *argv[]) {
// port_peltier_set_pwm(0);
initialize();
while (true) {
- do_debug_light_state();
- // testCanSlaveTxAndRx();
- // testTmp117();
-
- /**
- * @brief 风扇状态监控服务周期调度
- */
- for (size_t i = 0; i < ZARRAY_SIZE(m_fanStateMonitor); i++) {
- m_fanStateMonitor[i].periodicJob();
- }
+ m_hardware.periodicJob();
+ // m_hardware.testCanSlaveTxAndRx(canOnRxDataFlag);
+ // m_hardware.testTmp117();
}
}
@@ -164,55 +63,6 @@ void Main::main(int argc, char const *argv[]) {
* 单元测试 *
*******************************************************************************/
-/**
- * @brief 测试CAN的发送和接收
- */
-void Main::testCanSlaveTxAndRx() {
- {
- static uint32_t lastcall;
- static uint8_t tx[8] = {1, 2, 3, 4, 5, 6, 7, 8};
- if (os->hasPassedMS(lastcall) > 1000) {
- lastcall = os->getTicket();
- canSlaveService.translate(0x01, tx, 8, 2);
- if (canSlaveService.getLastTransmitStatus() == HAL_OK) {
- ZLOGI(TAG, "send ok");
- } else {
- ZLOGI(TAG, "send fail");
- }
- }
- }
-
- /**
- * @brief 接收CAN消息
- */
- if (canOnRxDataFlag) {
- canOnRxDataFlag = false;
- static CAN_RxHeaderTypeDef packetHeader;
- static uint8_t packetData[8];
- while (canSlaveService.getRxMessage(&packetHeader, packetData)) {
- ZLOGI(TAG, "rx packet:");
- ZLOGI(TAG, "\tid:%x len:%d", packetHeader.StdId, packetHeader.DLC);
- ZLOGI_HEX(TAG, packetData, packetHeader.DLC);
- }
- canSlaveService.activateRxIT();
- }
-}
-
-void Main::testTmp117() {
- static uint32_t lastcall;
- if (os->hasPassedMS(lastcall) > 1000) {
- lastcall = os->getTicket();
- for (size_t i = 0; i < 4; i++) {
- float temp = tmp117[i].getTemperature();
- if (tmp117[i].getLastCallStatus() == HAL_OK) {
- ZLOGI(TAG, "tmp117_%d:%f", i, temp);
- } else {
- ZLOGI(TAG, "tmp117_%d:read fail", i);
- }
- }
- }
-}
-
static Main mainObject;
extern "C" {
int umain(int argc, char const *argv[]) {