From 08f38c1d0b28d31d02473a6bec14e5ebb6d8995a Mon Sep 17 00:00:00 2001 From: yxming66 <2389287465@qq.com> Date: Thu, 27 Nov 2025 23:06:31 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=A1=AC=E4=BB=B6SPI=E9=A9=B1=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/Src/main.c | 5 +- MDK-ARM/MR16.uvguix.yxm23 | 185 +------ MDK-ARM/MR16.uvoptx | 46 +- MDK-ARM/MR16.uvprojx | 20 +- MDK-ARM/MR16/MR16.axf | Bin 600860 -> 612020 bytes MDK-ARM/MR16/MR16.hex | 1010 ++++++++++++++++++++---------------- MDK-ARM/MR16/MR16.htm | 792 ++++++++++++++++------------ MDK-ARM/MR16/MR16.lnp | 1 - MDK-ARM/MR16/MR16.map | 924 +++++++++++++++++---------------- MDK-ARM/MR16/MR16_MR16.dep | 56 +- MDK-ARM/MR16/lcd.crf | Bin 581168 -> 575416 bytes MDK-ARM/MR16/lcd.d | 12 +- MDK-ARM/MR16/lcd.o | Bin 679900 -> 642952 bytes MDK-ARM/MR16/main.crf | Bin 615550 -> 611419 bytes MDK-ARM/MR16/main.d | 1 - MDK-ARM/MR16/main.o | Bin 661640 -> 660036 bytes User/device/lcd.c | 706 +++++++------------------ User/device/lcd.h | 81 ++- User/device/lcd_font.h | 104 ++++ User/device/lcd_init.c | 229 -------- User/device/lcd_init.h | 77 --- User/device/lcdfont.h | 555 -------------------- User/device/pic.h | 209 -------- 23 files changed, 1862 insertions(+), 3151 deletions(-) create mode 100644 User/device/lcd_font.h delete mode 100644 User/device/lcd_init.c delete mode 100644 User/device/lcd_init.h delete mode 100644 User/device/lcdfont.h delete mode 100644 User/device/pic.h diff --git a/Core/Src/main.c b/Core/Src/main.c index b321c8a..9c37e7d 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -30,7 +30,6 @@ #include "stdio.h" #include "sx1281.h" #include "device/lcd.h" -#include "device/lcd_init.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -107,7 +106,7 @@ int main(void) // SX1281_SetTX(); LCD_Init(); // HAL_Delay(1000); - LCD_Fill(0,0,LCD_W,LCD_H,WHITE); + /* USER CODE END 2 */ /* Infinite loop */ @@ -117,7 +116,7 @@ int main(void) /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ - + LCD_Clear(WHITE); // SX1281_Running(); // LCD_ShowFloatNum1(10,99,t,4,RED,WHITE,32); t+=0.11; diff --git a/MDK-ARM/MR16.uvguix.yxm23 b/MDK-ARM/MR16.uvguix.yxm23 index 0cb75ef..94b55c0 100644 --- a/MDK-ARM/MR16.uvguix.yxm23 +++ b/MDK-ARM/MR16.uvguix.yxm23 @@ -101,17 +101,17 @@ -1 - 174 - 540 - 1585 - 969 + 150 + 485 + 1530 + 945 0 - 1627 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000001400000006000000010000001E443A5C435542454D585C4D5231365C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF20443A5C435542454D585C4D5231365C557365725C6465766963655C6C63642E6300000000056C63642E6300000000FFDC7800FFFFFFFF20443A5C435542454D585C4D5231365C557365725C6465766963655C6C63642E6800000000056C63642E6800000000BECEA100FFFFFFFF27443A5C435542454D585C4D5231365C7378313238312D6472697665722D635C7378313238312E6300000000087378313238312E6300000000F0A0A100FFFFFFFF1E443A5C435542454D585C4D5231365C557365725C6273705C756172742E680000000006756172742E6800000000BCA8E100FFFFFFFF24443A5C435542454D585C4D5231365C557365725C6465766963655C6C6364666F6E742E6800000000096C6364666F6E742E68000000009CC1B600FFFFFFFF25443A5C435542454D585C4D5231365C557365725C6465766963655C6C63645F696E69742E68000000000A6C63645F696E69742E6800000000F7B88600FFFFFFFF25443A5C435542454D585C4D5231365C557365725C6465766963655C6C63645F696E69742E63000000000A6C63645F696E69742E6300000000D9ADC200FFFFFFFF44443A5C435542454D585C4D5231365C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F6770696F2E68000000001473746D3332663178785F68616C5F6770696F2E6800000000A5C2D700FFFFFFFF46443A5C435542454D585C4D5231365C447269766572735C434D5349535C4465766963655C53545C53544D3332463178785C496E636C7564655C73746D33326631303378622E68000000000D73746D33326631303378622E6800000000B3A6BE00FFFFFFFF1E443A5C435542454D585C4D5231365C436F72655C5372635C6770696F2E6300000000066770696F2E6300000000EAD6A300FFFFFFFF1E443A5C435542454D585C4D5231365C436F72655C496E635C6770696F2E6800000000066770696F2E6800000000F6FA7D00FFFFFFFF1E443A5C435542454D585C4D5231365C436F72655C496E635C6D61696E2E6800000000066D61696E2E6800000000B5E99D00FFFFFFFF2C443A5C435542454D585C4D5231365C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E73000000005FC3CF00FFFFFFFF32443A5C435542454D585C4D5231365C7378313238312D6472697665722D635C7378313238315F6472697665725F68616C2E6300000000137378313238315F6472697665725F68616C2E6300000000C1838300FFFFFFFF32443A5C435542454D585C4D5231365C7378313238312D6472697665722D635C7378313238315F6472697665725F7370692E6300000000137378313238315F6472697665725F7370692E6300000000CACAD500FFFFFFFF44443A5C435542454D585C4D5231365C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F6770696F2E63000000001473746D3332663178785F68616C5F6770696F2E6300000000C5D4F200FFFFFFFF2E443A5C435542454D585C4D5231365C7378313238312D6472697665722D635C7378313238315F6865616465722E63000000000F7378313238315F6865616465722E6300000000FFDC7800FFFFFFFF2E443A5C435542454D585C4D5231365C7378313238312D6472697665722D635C7378313238315F6472697665722E63000000000F7378313238315F6472697665722E6300000000BECEA100FFFFFFFF33443A5C435542454D585C4D5231365C7378313238312D6472697665722D635C7378313238315F6472697665725F6770696F2E6300000000147378313238315F6472697665725F6770696F2E6300000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FD0200001C0100002906000018030000 + 336 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000300000000000000010000001E443A5C435542454D585C4D5231365C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF20443A5C435542454D585C4D5231365C557365725C6465766963655C6C63642E6300000000056C63642E6300000000FFDC7800FFFFFFFF20443A5C435542454D585C4D5231365C557365725C6465766963655C6C63642E6800000000056C63642E6800000000BECEA100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000C602000004010000F205000000030000 @@ -1806,7 +1806,7 @@ File 3039 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001653583132383148616C52656164526567697374657273960000000000000014001653583132383148616C526561645265676973746572730C52656164526567697374657209632D3E706172616D7329732D3E666565646261636B2E747269672E666565646261636B2E726F746F725F6162735F616E676C6511636D642D3E6C6173745F66697265636D640C666565646261636B5F72706D1448414C5F554152545F526563656976655F444D41134D585F5553415254335F554152545F496E6974184253505F43414E5F526567697374657243616C6C6261636B136874696D312E496E7374616E63652D3E4152520E73746D3332667878785F69742E63067072696E74661F43414E5F72656D6F74655F7472616E736D697373696F6E5F72657175657374142043414E5F6964656E7469666965725F74797065034944450E43414E5F333530385F4D325F4944116765745F6D6F746F725F6D6561737572650654585F4F4B20124D50555F4949435F576169745F41636B282938696620286932635F77726974652873742E68772D3E616464722C2073742E7265672D3E7077725F6D676D745F312C20312C206461746129290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001653583132383148616C52656164526567697374657273960000000000000014001653583132383148616C526561645265676973746572730C52656164526567697374657209632D3E706172616D7329732D3E666565646261636B2E747269672E666565646261636B2E726F746F725F6162735F616E676C6511636D642D3E6C6173745F66697265636D640C666565646261636B5F72706D1448414C5F554152545F526563656976655F444D41134D585F5553415254335F554152545F496E6974184253505F43414E5F526567697374657243616C6C6261636B136874696D312E496E7374616E63652D3E4152520E73746D3332667878785F69742E63067072696E74661F43414E5F72656D6F74655F7472616E736D697373696F6E5F72657175657374142043414E5F6964656E7469666965725F74797065034944450E43414E5F333530385F4D325F4944116765745F6D6F746F725F6D6561737572650654585F4F4B20124D50555F4949435F576169745F41636B282938696620286932635F77726974652873742E68772D3E616464722C2073742E7265672D3E7077725F6D676D745F312C20312C206461746129290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1822,7 +1822,7 @@ Build 968 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000044D52313696000000000000000100044D523136000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000044D52313696000000000000000100044D523136000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -3603,183 +3603,30 @@ 0 100 - 6 + 0 ../Core/Src/main.c - 9 - 92 - 110 + 4 + 113 + 119 1 0 ..\User\device\lcd.c - 23 + 4 3 - 16 + 17 1 0 ..\User\device\lcd.h - 11 - 1 - 9 - 1 - - 0 - - - ..\sx1281-driver-c\sx1281.c 0 - 479 - 497 - 1 - - 0 - - - ..\User\bsp\uart.h - 1 - 1 - 4 - 1 - - 0 - - - ..\User\device\lcdfont.h - 0 - 394 - 412 - 1 - - 0 - - - ..\User\device\lcd_init.h - 11 - 59 - 66 - 1 - - 0 - - - ..\User\device\lcd_init.c - 26 - 75 - 93 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h - 0 - 90 - 96 - 1 - - 0 - - - ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h - 0 - 664 - 665 - 1 - - 0 - - - ../Core/Src/gpio.c - 0 - 1 - 1 - 1 - - 0 - - - ../Core/Inc/gpio.h - 0 - 1 - 1 - 1 - - 0 - - - ../Core/Inc/main.h - 15 - 59 - 64 - 1 - - 0 - - - startup_stm32f103xb.s - 0 - 126 - 132 - 1 - - 0 - - - ..\sx1281-driver-c\sx1281_driver_hal.c - 0 - 98 - 106 - 1 - - 0 - - - ..\sx1281-driver-c\sx1281_driver_spi.c - 0 - 1 - 1 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c - 0 - 432 - 440 - 1 - - 0 - - - ..\sx1281-driver-c\sx1281_header.c - 0 - 1 - 9 - 1 - - 0 - - - ..\sx1281-driver-c\sx1281_driver.c - 0 - 83 - 91 - 1 - - 0 - - - ..\sx1281-driver-c\sx1281_driver_gpio.c - 0 - 253 - 261 + 11 + 17 1 0 diff --git a/MDK-ARM/MR16.uvoptx b/MDK-ARM/MR16.uvoptx index 0ef7808..941b1ff 100644 --- a/MDK-ARM/MR16.uvoptx +++ b/MDK-ARM/MR16.uvoptx @@ -873,12 +873,12 @@ 7 51 - 1 + 5 0 0 0 - ..\User\device\lcd_init.c - lcd_init.c + ..\User\device\device.h + device.h 0 0 @@ -889,32 +889,8 @@ 0 0 0 - ..\User\device\lcd_init.h - lcd_init.h - 0 - 0 - - - 7 - 53 - 5 - 0 - 0 - 0 - ..\User\device\lcdfont.h - lcdfont.h - 0 - 0 - - - 7 - 54 - 5 - 0 - 0 - 0 - ..\User\device\pic.h - pic.h + ..\User\device\lcd_font.h + lcd_font.h 0 0 @@ -928,7 +904,7 @@ 0 8 - 55 + 53 1 0 0 @@ -940,7 +916,7 @@ 8 - 56 + 54 5 0 0 @@ -952,7 +928,7 @@ 8 - 57 + 55 1 0 0 @@ -964,7 +940,7 @@ 8 - 58 + 56 5 0 0 @@ -976,7 +952,7 @@ 8 - 59 + 57 1 0 0 @@ -988,7 +964,7 @@ 8 - 60 + 58 5 0 0 diff --git a/MDK-ARM/MR16.uvprojx b/MDK-ARM/MR16.uvprojx index a24d0c3..71fb447 100644 --- a/MDK-ARM/MR16.uvprojx +++ b/MDK-ARM/MR16.uvprojx @@ -715,24 +715,14 @@ ..\User\device\lcd.h - lcd_init.c - 1 - ..\User\device\lcd_init.c + device.h + 5 + ..\User\device\device.h - lcd_init.h + lcd_font.h 5 - ..\User\device\lcd_init.h - - - lcdfont.h - 5 - ..\User\device\lcdfont.h - - - pic.h - 5 - ..\User\device\pic.h + ..\User\device\lcd_font.h diff --git a/MDK-ARM/MR16/MR16.axf b/MDK-ARM/MR16/MR16.axf index d5dd0431a66f0c76ae4d26f459347832ce043e20..4881ed37d5b119a261bac4bd1145ac9cbcd21cbd 100644 GIT binary patch delta 32958 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%0A@3SG{A9FfhX^PE$IY4p7+p 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 delta 24824 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 Call Graph - [MR16\MR16.axf]

Static Call Graph for image MR16\MR16.axf


-

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Thu Nov 27 20:41:53 2025 +

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Thu Nov 27 22:13:40 2025

-

Maximum Stack Usage = 168 bytes + Unknown(Cycles, Untraceable Function Pointers)

+

Maximum Stack Usage = 176 bytes + Unknown(Cycles, Untraceable Function Pointers)

Call chain for Maximum Stack Depth:

-main ⇒ MX_TIM1_Init ⇒ HAL_TIM_MspPostInit ⇒ HAL_GPIO_Init +main ⇒ LCD_Init ⇒ LCD_WriteDataBuffer ⇒ HAL_SPI_Transmit ⇒ SPI_EndRxTxTransaction ⇒ SPI_WaitFlagStateUntilTimeout

Mutually Recursive functions @@ -57,6 +57,9 @@ Function Pointers
  • Reset_Handler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET)
  • SPI1_IRQHandler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET)
  • SPI2_IRQHandler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET) +
  • SPI_DMAError from stm32f1xx_hal_spi.o(i.SPI_DMAError) referenced from stm32f1xx_hal_spi.o(i.HAL_SPI_Transmit_DMA) +
  • SPI_DMAHalfTransmitCplt from stm32f1xx_hal_spi.o(i.SPI_DMAHalfTransmitCplt) referenced from stm32f1xx_hal_spi.o(i.HAL_SPI_Transmit_DMA) +
  • SPI_DMATransmitCplt from stm32f1xx_hal_spi.o(i.SPI_DMATransmitCplt) referenced from stm32f1xx_hal_spi.o(i.HAL_SPI_Transmit_DMA)
  • SVC_Handler from stm32f1xx_it.o(i.SVC_Handler) referenced from startup_stm32f103xb.o(RESET)
  • SysTick_Handler from stm32f1xx_it.o(i.SysTick_Handler) referenced from startup_stm32f103xb.o(RESET)
  • SystemInit from system_stm32f1xx.o(i.SystemInit) referenced from startup_stm32f103xb.o(.text) @@ -86,27 +89,27 @@ Global Symbols

    __main (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
    [Address Reference Count : 1]

    • startup_stm32f103xb.o(.text)
    -

    _main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001)) +

    _main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001)) -

    _main_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004)) -

    [Calls]