diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
index 6a3e4f4..bcf180b 100644
--- a/.vscode/c_cpp_properties.json
+++ b/.vscode/c_cpp_properties.json
@@ -13,8 +13,9 @@
"${workspaceFolder}/app/MDK-ARM",
"${workspaceFolder}/app/Src",
"${workspaceFolder}/app/Drivers/STM32F1xx_HAL_Driver/Src",
- "${workspaceFolder}/zmodbus",
- "${workspaceFolder}/zstm32uart_irq_rx_service"
+ "${workspaceFolder}/copyZ_zmodbus",
+ "${workspaceFolder}/copyZ_zstm32uart_irq_rx_service",
+ "${workspaceFolder}/src"
],
"defines": [
"USE_HAL_DRIVER",
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 48afcf2..10875fe 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,7 +1,12 @@
{
"files.associations": {
- "main.h": "c",
- "new": "c",
- "zstm32uart_irq_rx_service.h": "c"
+ "modbus_processer.h": "c",
+ "zmodbus_slave.h": "c",
+ "zport.h": "c",
+ "gpio.h": "c",
+ "usart.h": "c",
+ "zstm32uart_irq_rx_service.h": "c",
+ "zmodbus_common.h": "c",
+ "stdlib.h": "c"
}
}
\ No newline at end of file
diff --git a/app/MDK-ARM/app.uvguix.zwsd_cad3 b/app/MDK-ARM/app.uvguix.zwsd_cad3
index 65e677f..373c32e 100644
--- a/app/MDK-ARM/app.uvguix.zwsd_cad3
+++ b/app/MDK-ARM/app.uvguix.zwsd_cad3
@@ -110,8 +110,8 @@
0
- 488
- 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000003000000020000000100000050433A5C55736572735C7A7773645F636164335C4465736B746F705C636F70795A5F73756277617465725F63616D6572615F656E68616E63656D656E5F626F6172645C6170705C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF4D433A5C55736572735C7A7773645F636164335C4465736B746F705C636F70795A5F73756277617465725F63616D6572615F656E68616E63656D656E5F626F6172645C7372635C7A706F72742E6800000000077A706F72742E6800000000FFDC7800FFFFFFFF51433A5C55736572735C7A7773645F636164335C4465736B746F705C636F70795A5F73756277617465725F63616D6572615F656E68616E63656D656E5F626F6172645C7372635C757365725F6D61696E2E63000000000B757365725F6D61696E2E6300000000BECEA100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F4000000660000008007000069030000
+ 622
+ 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000004000000020000000100000050433A5C55736572735C7A7773645F636164335C4465736B746F705C636F70795A5F73756277617465725F63616D6572615F656E68616E63656D656E5F626F6172645C6170705C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF4D433A5C55736572735C7A7773645F636164335C4465736B746F705C636F70795A5F73756277617465725F63616D6572615F656E68616E63656D656E5F626F6172645C7372635C7A706F72742E6800000000077A706F72742E6800000000FFDC7800FFFFFFFF51433A5C55736572735C7A7773645F636164335C4465736B746F705C636F70795A5F73756277617465725F63616D6572615F656E68616E63656D656E5F626F6172645C7372635C757365725F6D61696E2E63000000000B757365725F6D61696E2E6300000000BECEA100FFFFFFFF62433A5C55736572735C7A7773645F636164335C4465736B746F705C636F70795A5F73756277617465725F63616D6572615F656E68616E63656D656E5F626F6172645C636F70795A5F7A6D6F646275735C6D6F646275735F70726F6365737365722E6300000000126D6F646275735F70726F6365737365722E6300000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F4000000660000008007000069030000
@@ -1806,7 +1806,7 @@
File
2682
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000056874696D3496000000000000000C00056874696D34056874696D3118706F72745F7365745F6C65645F6272696768746E6573736C0A4646545F4F7574707574034E5054044672657105627265616B056861646331056874696D3304504F525406687561727431044E445452000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000056874696D3496000000000000000C00056874696D34056874696D3118706F72745F7365745F6C65645F6272696768746E6573736C0A4646545F4F7574707574034E5054044672657105627265616B056861646331056874696D3304504F525406687561727431044E445452000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -1838,7 +1838,7 @@
Debug
2373
- 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
+ 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
898
@@ -1873,7 +1873,7 @@
0
- ..\..\src\zport.h
+ ../../src/zport.h
0
16
37
@@ -1883,9 +1883,18 @@
..\..\src\user_main.c
- 0
+ 7
1
- 18
+ 10
+ 1
+
+ 0
+
+
+ ..\..\copyZ_zmodbus\modbus_processer.c
+ 0
+ 53
+ 81
1
0
diff --git a/app/MDK-ARM/app.uvprojx b/app/MDK-ARM/app.uvprojx
index 7135d93..231ee4c 100644
--- a/app/MDK-ARM/app.uvprojx
+++ b/app/MDK-ARM/app.uvprojx
@@ -575,4 +575,13 @@
+
+
+
+ app
+ 1
+
+
+
+
diff --git a/src/user_main.c b/src/user_main.c
index 6503ead..a2bbe74 100644
--- a/src/user_main.c
+++ b/src/user_main.c
@@ -7,22 +7,182 @@
#include "zboard.h"
#include "zport.h"
//
+#include "../copyZ_zstm32uart_irq_rx_service/zstm32uart_irq_rx_service.h"
#include "gpio.h"
#include "iwdg.h"
#include "main.h"
+#include "modbus_processer.h"
#include "tim.h"
#include "usart.h"
-
-#include "../copyZ_zstm32uart_irq_rx_service/zstm32uart_irq_rx_service.h"
-#include "modbus_processer.h"
#include "zmodbus_slave.h"
+static uint8_t modbus_rx_buf[kmodbus_processer_rx_buf_size];
+static uint8_t modbus_tx_buf[kmodbus_processer_tx_buf_size];
+
+//当触发闪光时候,自动触发拍照信号
+uint16_t g_auto_trigger_shut_when_flash = 1;
+
+// state
+uint32_t g_light_flicker_trigger_ticket;
+bool g_flicker_on = false;
+
+/***********************************************************************************************************************
+ * ========================================================GLOBAL======================================================== *
+ ***********************************************************************************************************************/
+typedef enum {
+ klight_control_mode_always_close = 0,
+ klight_control_mode_always_open,
+ klight_control_mode_flicker,
+ klight_control_mode_control_direct,
+ klight_control_mode_max,
+} light_control_mode_t;
+
+// config
+uint16_t g_light_brightness = 0;
+uint16_t g_light_control_mode = klight_control_mode_always_close;
+uint16_t g_light_flicker_duration = 0;
+
+void update_light_state() {
+ if (g_light_control_mode == klight_control_mode_always_close) {
+ port_set_led_brightness(0);
+ } else if (g_light_control_mode == klight_control_mode_always_open) {
+ port_set_led_brightness(g_light_brightness);
+ }
+}
+
+void trigger_one_time_flicker(uint32_t brightness, uint16_t duration_ms) {
+ //
+ g_light_flicker_trigger_ticket = HAL_GetTick();
+ g_light_flicker_duration = duration_ms;
+ g_flicker_on = true;
+ port_set_led_brightness(brightness);
+ if (g_auto_trigger_shut_when_flash > 0) {
+ if (port_extra_gpio_get_mode(0) == kegm_camera_trigger_signal) {
+ port_extra_gpio_set_level(0, true);
+ }
+ if (port_extra_gpio_get_mode(1) == kegm_camera_trigger_signal) {
+ port_extra_gpio_set_level(1, true);
+ }
+ }
+}
+
+void order_uart485_tx(uint8_t* rx, uint16_t len) { HAL_UART_Transmit(&ORDER_485_UART, rx, len, 0xffffffff); }
+
+/***********************************************************************************************************************
+ * =======================================================UART======================================================== *
+ ***********************************************************************************************************************/
static zstm32uart_t s_uarts[] = {
{
.huart = &ORDER_485_UART,
} //
};
+void modbux_process_rx(modbus_processer_context_t* context) {
+ // 10 and 03
+ // 0->15 | 闪光灯控制
+ // 0(16Byte) | 闪光灯亮度(0->65536)
+ // 1(16Byte) | 闪光灯亮度(0->100)
+ // 2(16Byte) | mode(0:长关模式,1:常亮模式,2:触发模式)
+ // 3-4(32Byte) | 触发一次闪光,reg3亮度(0->65535),reg4持续时间ms
+ // 7(16Byte) | 触发模式下,是否驱动GPIO,输出拍照信号 (0:输出,1:不输出)
+ // ------------|-------------------------------
+ // 16->31 | 扩展GPIO1控制
+ // 16(16Byte) | 扩展GPIO功能(0:失能,1:触发模式输出)
+ // 17(16Byte) | 是否反向
+ // ------------|-------------------------------
+ // 32->47 | 扩展GPIO2控制
+ // 32(16Byte) | 扩展GPIO功能(0:失能,1:触发模式输出)
+ // 33(16Byte) | 是否反向
+
+ ModbusFunctionCode fcode = modbus_get_function_code(context);
+ if (fcode == ModbusOrder10) {
+ //写
+ // REG0
+ if (modbus_if_register_exists_10(context, 0)) {
+ uint16_t brightness = modbus_get_reg_10(context, 0);
+ g_light_brightness = brightness;
+ LOGD("set light_brightness %d", brightness);
+ update_light_state();
+ }
+ // REG1
+ if (modbus_if_register_exists_10(context, 1)) {
+ uint16_t brightness_100 = modbus_get_reg_10(context, 1);
+ brightness_100 = brightness_100 > 100 ? 100 : brightness_100;
+ uint16_t brightness = 65535 * (brightness_100 / 100.0);
+ g_light_brightness = brightness;
+ LOGD("set light_brightness %d%%(%d)", brightness_100, brightness);
+ update_light_state();
+ }
+ // REG2
+ if (modbus_if_register_exists_10(context, 2)) {
+ if (g_light_control_mode < klight_control_mode_max) {
+ g_light_control_mode = modbus_get_reg_10(context, 2);
+ LOGD("set light_control_mode %d", g_light_control_mode);
+ update_light_state();
+ } else {
+ LOGE("set light_control_mode fail,parameter error");
+ }
+ }
+ // REG3,4
+ if (modbus_if_register_exists_10(context, 3) && modbus_if_register_exists_03(context, 4)) {
+ //触发一次闪光
+ if (g_light_control_mode == klight_control_mode_flicker) {
+ uint32_t brightness = modbus_get_reg_10(context, 3);
+ uint16_t duration_ms = modbus_get_reg_10(context, 4);
+ LOGD("trigger flicker %d %dms", brightness, duration_ms);
+ trigger_one_time_flicker(brightness, duration_ms);
+ } else {
+ LOGE("trigger flicker fail,mode != klight_control_mode_flicker");
+ }
+ }
+
+ // REG5
+ if (modbus_if_register_exists_10(context, 5)) {
+ uint16_t setvalue = modbus_get_reg_10(context, 5);
+
+ LOGD("port_set_led_brightness1 %d%%", setvalue);
+ port_set_led_brightness1(65535 * (setvalue / 100.0));
+ }
+
+ // REG6
+ if (modbus_if_register_exists_10(context, 6)) {
+ uint16_t setvalue = modbus_get_reg_10(context, 6);
+ LOGD("port_set_led_brightness2 %d%%", setvalue);
+ port_set_led_brightness2(65535 * (setvalue / 100.0));
+ }
+
+ modbus_send_10(context, Modbus_OK);
+ } else if (fcode == ModbusOrder03) {
+ //读
+ if (modbus_if_register_exists_03(context, 0)) {
+ modbus_set_tx_reg_03(context, 0, g_light_brightness);
+ }
+ if (modbus_if_register_exists_03(context, 1)) {
+ modbus_set_tx_reg_03(context, 1, g_light_brightness / 65535.0 * 100);
+ }
+ if (modbus_if_register_exists_03(context, 2)) {
+ modbus_set_tx_reg_03(context, 2, g_light_control_mode);
+ }
+ modbus_send_03(context, Modbus_OK);
+ }
+}
+
+modbus_processer_t s_modbus_processer = {
+ .modbus_device_id = MODBUS_DEVICE_ID,
+ .modbus_processer_rx_buf = modbus_rx_buf,
+ .modbus_processer_rx_buf_size = sizeof(modbus_rx_buf),
+ .modbus_processer_tx_buf = modbus_tx_buf,
+ .modbus_processer_tx_buf_size = sizeof(modbus_tx_buf),
+ /*************************************/
+ .modbus_baundrate_one_packet_delay_us = kmodbus_baundrate_one_packet_delay_us,
+ .port_enter_critical = port_enter_critical,
+ .port_exit_critical = port_exit_critical,
+ .port_delay_us = port_delay_us,
+ .tx = order_uart485_tx,
+ /*************************************/
+ .process_rx = modbux_process_rx,
+};
+
/**
* @brief 调试指示灯控制
*/
@@ -31,15 +191,22 @@ void port_do_debug_light_state() {
if (port_haspassedms(lastprocess) > 300) {
lastprocess = HAL_GetTick();
HAL_GPIO_TogglePin(DEBUG_LIGHT_PORT, DEBUG_LIGHT_PIN);
- // static bool state = false;
- // state = !state;
- // port_extra_gpio_set_level(0, state);
- // port_extra_gpio_set_level(1, state);
+ }
+}
+
+/**
+ * @brief 串口数据接收回调
+ */
+void HOOK_ZUART_RxCpltCallback(UART_HandleTypeDef* huart, uint8_t rxdata) {
+ if (huart == &ORDER_485_UART) {
+ //处理接收到485指令
+ modbus_processer_push_data(rxdata);
}
}
void user_main() {
uart_service_start_all_uart_rx(s_uarts, ARRARY_SIZE(s_uarts));
+ modbus_processer_init(&s_modbus_processer);
while (true) {
port_do_debug_light_state();