diff --git a/app/MDK-ARM/app.uvguix.29643 b/app/MDK-ARM/app.uvguix.29643
index e4e9775..ef3104a 100644
--- a/app/MDK-ARM/app.uvguix.29643
+++ b/app/MDK-ARM/app.uvguix.29643
@@ -110,8 +110,8 @@
0
- 1744
- 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000D0000000C000000010000004E433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C757365726D61696E2E63000000000A757365726D61696E2E6300000000C5D4F200FFFFFFFF53433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C6170705C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF6C433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C69666C79746F705F6D6963726F636F6E74726F6C6C65725C73646B5C73746D33325C73746D333273646B2E68000000000A73746D333273646B2E6800000000BECEA100FFFFFFFF67433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C69666C79746F705F6D6963726F636F6E74726F6C6C65725C73646B5C73746D33325C70776D2E68000000000570776D2E6800000000F0A0A100FFFFFFFF76433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C69666C79746F705F6D6963726F636F6E74726F6C6C65725C7A6D6F646275735C7374645C6D6F646275735F70726F6365737365722E6800000000126D6F646275735F70726F6365737365722E6800000000BCA8E100FFFFFFFF70433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C69666C79746F705F6D6963726F636F6E74726F6C6C65725C66616E636F6E74726F6C65725C73746D33325C66616E2E68000000000566616E2E68000000009CC1B600FFFFFFFF4C433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C636F6E6669672E630000000008636F6E6669672E6300000000F7B88600FFFFFFFF4D433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C7A7468726561642E6800000000097A7468726561642E6800000000D9ADC200FFFFFFFF4D433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C7A7468726561642E6300000000097A7468726561642E6300000000A5C2D700FFFFFFFF58433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C656E636F6465725F61637175697374696F6E2E630000000014656E636F6465725F61637175697374696F6E2E6300000000B3A6BE00FFFFFFFF4D433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C7A6173736572742E6800000000097A6173736572742E6800000000EAD6A300FFFFFFFF60433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C656E636F6465725F61637175697374696F6E5F736572766963652E63000000001C656E636F6465725F61637175697374696F6E5F736572766963652E6300000000F6FA7D00FFFFFFFF67433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C69666C79746F705F6D6963726F636F6E74726F6C6C65725C73646B5C73746D33325C70776D2E63000000000570776D2E6300000000B5E99D00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000007408000066000000000F000075020000
+ 1948
+ 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000F0000000E000000010000004E433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C757365726D61696E2E63000000000A757365726D61696E2E6300000000C5D4F200FFFFFFFF53433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C6170705C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF6C433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C69666C79746F705F6D6963726F636F6E74726F6C6C65725C73646B5C73746D33325C73746D333273646B2E68000000000A73746D333273646B2E6800000000BECEA100FFFFFFFF67433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C69666C79746F705F6D6963726F636F6E74726F6C6C65725C73646B5C73746D33325C70776D2E68000000000570776D2E6800000000F0A0A100FFFFFFFF76433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C69666C79746F705F6D6963726F636F6E74726F6C6C65725C7A6D6F646275735C7374645C6D6F646275735F70726F6365737365722E6800000000126D6F646275735F70726F6365737365722E6800000000BCA8E100FFFFFFFF70433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C69666C79746F705F6D6963726F636F6E74726F6C6C65725C66616E636F6E74726F6C65725C73746D33325C66616E2E68000000000566616E2E68000000009CC1B600FFFFFFFF4C433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C636F6E6669672E630000000008636F6E6669672E6300000000F7B88600FFFFFFFF4D433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C7A7468726561642E6800000000097A7468726561642E6800000000D9ADC200FFFFFFFF4D433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C7A7468726561642E6300000000097A7468726561642E6300000000A5C2D700FFFFFFFF58433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C656E636F6465725F61637175697374696F6E2E630000000014656E636F6465725F61637175697374696F6E2E6300000000B3A6BE00FFFFFFFF4D433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C7A6173736572742E6800000000097A6173736572742E6800000000EAD6A300FFFFFFFF60433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C656E636F6465725F61637175697374696F6E5F736572766963652E63000000001C656E636F6465725F61637175697374696F6E5F736572766963652E6300000000F6FA7D00FFFFFFFF67433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C69666C79746F705F6D6963726F636F6E74726F6C6C65725C73646B5C73746D33325C70776D2E63000000000570776D2E6300000000B5E99D00FFFFFFFF4C433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C7A666C6173682E6300000000087A666C6173682E63000000005FC3CF00FFFFFFFF4C433A5C55736572735C32393634335C4465736B746F705C465A4D6F74696F6E5F636170747572655F73797374656D5F6163636573736F726965735F7061636B5C7372635C7A666C6173682E6800000000087A666C6173682E6800000000C1838300FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000007408000066000000000F000075020000
@@ -1806,7 +1806,7 @@
File
2537
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -1822,7 +1822,7 @@
Build
966
- 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000002001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
+ 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
583
@@ -1862,12 +1862,12 @@
0
100
- 12
+ 14
..\..\src\usermain.c
- 1
+ 25
8
- 27
+ 28
1
0
@@ -1973,9 +1973,27 @@
..\..\iflytop_microcontroller\sdk\stm32\pwm.c
- 40
+ 0
63
- 75
+ 89
+ 1
+
+ 0
+
+
+ ..\..\src\zflash.c
+ 1
+ 197
+ 225
+ 1
+
+ 0
+
+
+ ..\..\src\zflash.h
+ 0
+ 5
+ 32
1
0
diff --git a/src/config.c b/src/config.c
index 64afc78..303285b 100644
--- a/src/config.c
+++ b/src/config.c
@@ -4,10 +4,13 @@
#include "../iflytop_microcontroller/sdk/stm32/stm32sdk.h"
#include "lwip.h"
#include "protocol.h"
+#include "src/zflash.h"
#include "zboard.h"
#define TAG "CONFIG"
+#define flash_write_lenght(type) ((sizeof(type) / 4) + ((sizeof(type) % 4) > 0 ? 1 : 0))
+
static config_t s_config;
// static nvs_handle s_nvs_handle; // NVS是esp32中的,相当于flash
@@ -63,6 +66,8 @@ void config_init() {
#endif
+ stmflash_write_config(STM32_FLASH_BASE, &s_config, flash_write_lenght(config_t));
+
// esp_err_t err = nvs_flash_init();
// if (err == ESP_ERR_NVS_NO_FREE_PAGES) {
diff --git a/src/zflash.c b/src/zflash.c
index ff71733..bc91fef 100644
--- a/src/zflash.c
+++ b/src/zflash.c
@@ -1,5 +1,12 @@
#include "zflash.h"
+#define ZFLASH_WRITE_DATA(start_address, data) \
+ if (!flash_writ_32(start_address, config->ip)) { \
+ FLASH->ACR |= 1 << 10; \
+ HAL_FLASH_Lock();
+
+#define END() }
+
static bool stmflash_address_legal(uint32_t start_addr, uint32_t end_addr) {
if (start_addr < STM32_FLASH_BASE || start_addr % 4 || start_addr > (STM32_FLASH_BASE + STM32_FLASH_SIZE)) {
return false;
@@ -10,6 +17,15 @@ static bool stmflash_address_legal(uint32_t start_addr, uint32_t end_addr) {
return true;
}
+static bool flash_writ_32(uint32_t *start_address, uint32_t data) {
+ if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, *start_address, data) != HAL_OK) /* 写入数据 */
+ {
+ return false;
+ }
+ *start_address += 4;
+ return true;
+}
+
/**
* @brief 从指定地址读取一个字 (32位数据)
* @param faddr : 读取地址 (此地址必须为4倍数!!)
@@ -146,3 +162,64 @@ void stmflash_read(uint32_t raddr, uint32_t *pbuf, uint32_t length) {
* @retval 读取到的数据
*/
void test_write(uint32_t waddr, uint32_t wdata) { stmflash_write(waddr, &wdata, 1); /* 写入一个字 */ }
+
+int8_t stmflash_write_config(uint32_t start_address, config_t *config, uint32_t length) {
+ FLASH_EraseInitTypeDef flasheraseinit;
+ HAL_StatusTypeDef FlashStatus = HAL_OK;
+
+ uint32_t flash_write_start_address = 0;
+ uint32_t flash_write_end_address = 0;
+ uint32_t sectorerror = 0;
+
+ flash_write_start_address = start_address; /* 写入的起始地址 */
+ flash_write_end_address = start_address + length * 4; /* 写入的结束地址 */
+
+ if (!stmflash_address_legal(flash_write_start_address, flash_write_end_address)) {
+ return -1;
+ }
+
+ HAL_FLASH_Unlock(); /* 解锁 */
+ FLASH->ACR &= ~(1 << 10); /* FLASH擦除期间,必须禁止数据缓存!!! */
+
+ if (flash_write_start_address < 0X1FFF0000) /* 只有主存储区,才需要执行擦除操作!! */
+ {
+ while (flash_write_start_address < flash_write_end_address) /* 扫清一切障碍.(对非FFFFFFFF的地方,先擦除) */
+ {
+ if (stmflash_read_word(flash_write_start_address) != 0XFFFFFFFF) /* 有非0XFFFFFFFF的地方,要擦除这个扇区 */
+ {
+ flasheraseinit.TypeErase = FLASH_TYPEERASE_SECTORS; /* 擦除类型,扇区擦除 */
+ flasheraseinit.Sector = stmflash_get_flash_sector(flash_write_start_address); /* 要擦除的扇区 */
+ flasheraseinit.NbSectors = 1; /* 一次只擦除一个扇区 */
+ flasheraseinit.VoltageRange = FLASH_VOLTAGE_RANGE_3; /* 电压范围,VCC=2.7~3.6V之间!! */
+
+ if (HAL_FLASHEx_Erase(&flasheraseinit, §orerror) != HAL_OK) {
+ break; /* 发生错误了 */
+ }
+
+ } else {
+ flash_write_start_address += 4;
+ }
+ FLASH_WaitForLastOperation(FLASH_WAITETIME); /* 等待上次操作完成 */
+ }
+ }
+
+ FlashStatus = FLASH_WaitForLastOperation(FLASH_WAITETIME); /* 等待上次操作完成 */
+
+ if (FlashStatus == HAL_OK) {
+ ZFLASH_WRITE_DATA(&start_address, config->ip) { return -1; }
+ END();
+ ZFLASH_WRITE_DATA(&start_address, config->gw) { return -2; }
+ END();
+ ZFLASH_WRITE_DATA(&start_address, config->netmask) { return -3; }
+ END();
+ ZFLASH_WRITE_DATA(&start_address, config->localport) { return -4; }
+ END();
+ ZFLASH_WRITE_DATA(&start_address, config->obtaining_ip_mode) { return -5; }
+ END();
+ }
+
+ FLASH->ACR |= 1 << 10; /* FLASH擦除结束,开启数据fetch */
+
+ HAL_FLASH_Lock(); /* 上锁 */
+ return 0;
+}
\ No newline at end of file
diff --git a/src/zflash.h b/src/zflash.h
index f3fb89b..b4056a2 100644
--- a/src/zflash.h
+++ b/src/zflash.h
@@ -3,6 +3,7 @@
#include
+#include "config.h"
#include "stm32f4xx_hal.h"
/* FLASH起始地址 */
#define STM32_FLASH_SIZE 0x100000 /* STM32 FLASH 总大小 */
@@ -29,4 +30,6 @@ void stmflash_read(uint32_t raddr, uint32_t *pbuf, uint32_t length); /* 从指
void test_write(uint32_t waddr, uint32_t wdata); /* 测试写入 */
+int8_t stmflash_write_config(uint32_t start_address, config_t *config, uint32_t length);
+
#endif