From 0aaaa8f610ae4adf57863864101dfdf6344c1ca4 Mon Sep 17 00:00:00 2001 From: JasonChen <2805998671@qq.com> Date: Mon, 15 Jul 2024 15:04:02 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=88=A0=E9=99=A4CAR.uvguix.lenovo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MDK-ARM/CAR.uvguix.lenovo | 1941 ------------------------------------- 1 file changed, 1941 deletions(-) delete mode 100644 MDK-ARM/CAR.uvguix.lenovo diff --git a/MDK-ARM/CAR.uvguix.lenovo b/MDK-ARM/CAR.uvguix.lenovo deleted file mode 100644 index ac660df..0000000 --- a/MDK-ARM/CAR.uvguix.lenovo +++ /dev/null @@ -1,1941 +0,0 @@ - - - - -6.1 - -
### uVision Project, (C) Keil Software
- - - D:\OneDrive\OneDrive - my.swjtu.edu.cn\Data\program code\Projects\Car\MDK-ARM - - - - - - - 38003 - Registers - 115 114 - - - 346 - Code Coverage - 725 160 - - - 204 - Performance Analyzer - 885 - - - - - - 35141 - Event Statistics - - 200 50 700 - - - 1506 - Symbols - - 60 60 60 - - - 1936 - Watch 1 - - 200 133 133 - - - 1937 - Watch 2 - - 200 133 133 - - - 1935 - Call Stack + Locals - - 200 133 133 - - - 2506 - Trace Data - - 75 135 130 95 70 230 200 150 - - - 466 - Source Browser - 500 - 300 - - - - - - - - 1 - 1 - 0 - 0 - -1 - - - - - - - 44 - 2 - 3 - - -32000 - -32000 - - - -1 - -1 - - - 152 - 389 - 1390 - 774 - - - - 0 - - 1348 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000008000000010000000100000061443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C436F72655C5372635C73797374656D5F73746D3332663178782E63000000001273797374656D5F73746D3332663178782E6300000000C5D4F200FFFFFFFF55443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF5A443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C557365725C5372635C626C7565746F6F74682E63000000000B626C7565746F6F74682E6300000000BECEA100FFFFFFFF7D443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F7263635F65782E68000000001673746D3332663178785F68616C5F7263635F65782E6800000000F0A0A100FFFFFFFF7C443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F666C6173682E68000000001573746D3332663178785F68616C5F666C6173682E6800000000BCA8E100FFFFFFFF7F443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F666C6173685F65782E68000000001873746D3332663178785F68616C5F666C6173685F65782E68000000009CC1B600FFFFFFFF7A443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F646D612E68000000001373746D3332663178785F68616C5F646D612E6800000000F7B88600FFFFFFFF7A443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F7263632E68000000001373746D3332663178785F68616C5F7263632E6800000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F300000066000000B705000020020000 - - - - 0 - Build - - -1 - -1 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BA0000004F00000039040000C3000000 - - - 16 - BA0000006600000039040000DA000000 - - - - 1005 - 1005 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000EC000000F0010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 109 - 109 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000EC000000F0010000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 1465 - 1465 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1466 - 1466 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1467 - 1467 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1468 - 1468 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1506 - 1506 - 0 - 0 - 0 - 0 - 32767 - 0 - 16384 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 1913 - 1913 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1935 - 1935 - 0 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 1936 - 1936 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 1937 - 1937 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 1939 - 1939 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1940 - 1940 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1941 - 1941 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1942 - 1942 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 195 - 195 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000EC000000F0010000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 196 - 196 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000EC000000F0010000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 197 - 197 - 1 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 0000000021020000B705000040030000 - - - 16 - 22000000390000003E020000AD000000 - - - - 198 - 198 - 0 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 00000000AC0100003904000034020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 199 - 199 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000024020000B405000027030000 - - - 16 - 22000000390000003E020000AD000000 - - - - 203 - 203 - 0 - 0 - 0 - 0 - 32767 - 0 - 8192 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 204 - 204 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 221 - 221 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 00000000000000000000000000000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 2506 - 2506 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 2507 - 2507 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 343 - 343 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 346 - 346 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 35141 - 35141 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35824 - 35824 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 35885 - 35885 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35886 - 35886 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35887 - 35887 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35888 - 35888 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35889 - 35889 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35890 - 35890 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35891 - 35891 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35892 - 35892 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35893 - 35893 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35894 - 35894 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35895 - 35895 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35896 - 35896 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35897 - 35897 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35898 - 35898 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35899 - 35899 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35900 - 35900 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35901 - 35901 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35902 - 35902 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35903 - 35903 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35904 - 35904 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35905 - 35905 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 38003 - 38003 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000EC000000F0010000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 38007 - 38007 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000024020000B405000027030000 - - - 16 - 22000000390000003E020000AD000000 - - - - 436 - 436 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000024020000B405000027030000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 437 - 437 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 440 - 440 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 463 - 463 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000024020000B405000027030000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 466 - 466 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000024020000B405000027030000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 470 - 470 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 50000 - 50000 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50001 - 50001 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50002 - 50002 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50003 - 50003 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50004 - 50004 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50005 - 50005 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50006 - 50006 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50007 - 50007 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50008 - 50008 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50009 - 50009 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50010 - 50010 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50011 - 50011 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50012 - 50012 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50013 - 50013 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50014 - 50014 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50015 - 50015 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50016 - 50016 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50017 - 50017 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50018 - 50018 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50019 - 50019 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 59392 - 59392 - 1 - 0 - 0 - 0 - 966 - 0 - 8192 - 0 - - 16 - 0000000000000000D10300001C000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59393 - 0 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0000000040030000B705000053030000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59399 - 59399 - 1 - 0 - 0 - 0 - 476 - 0 - 8192 - 1 - - 16 - 000000001C000000E701000038000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59400 - 59400 - 0 - 0 - 0 - 0 - 612 - 0 - 8192 - 2 - - 16 - 00000000380000006F02000054000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 824 - 824 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFBA000000C300000039040000C7000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000BA0000006600000039040000DA000000BA0000004F00000039040000C30000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF7F0300004F00000083030000BC010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000830300006600000039040000D3010000830300004F00000039040000BC01000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFEF0000004F000000F300000009020000010000000200001004000000010000004CFFFFFFF8040000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000EF00000020020000000000004F000000EF000000090200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000A801000039040000AC01000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000C3010000390400004B02000000000000AC010000390400003402000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF1D020000AC010000210200003402000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000009020000B70500000D020000010000000100001004000000010000008CFDFFFF72000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000000000000024020000B705000057030000000000000D020000B7050000400300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 - - - 59392 - File - - 2580 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001348414C5F54494D5F4D7370506F7374496E6974960000000000000001001348414C5F54494D5F4D7370506F7374496E697400000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 - - - 1423 - 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 1423 - 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 - - - - 59399 - Build - - 966 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000002001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000034341529600000000000000010003434152000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 - - - 583 - 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 583 - 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 - - - - 59400 - Debug - - 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 - - - 898 - 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 898 - 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 - - - - 0 - 1463 - 914 - - - - - - 1 - 0 - - 100 - 1 - - ../Core/Src/system_stm32f1xx.c - 0 - 1 - 1 - 1 - - 0 - - - ../Core/Src/main.c - 0 - 106 - 114 - 1 - - 0 - - - ..\User\Src\bluetooth.c - 0 - 42 - 64 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h - 0 - 1835 - 1857 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h - 0 - 254 - 274 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h - 0 - 726 - 748 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h - 0 - 354 - 376 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h - 0 - 1132 - 1154 - 1 - - 0 - - - - -
From a88ab88eb56d94baba339f893835937d7bbe1dc9 Mon Sep 17 00:00:00 2001 From: JasonChen <2805998671@qq.com> Date: Wed, 17 Jul 2024 21:19:00 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E2=9C=A8=20feat:=20=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E5=B0=8F=E8=BD=A6=E5=B7=A1=E7=BA=BF=E8=BF=90=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/Inc/app_line_seek.h | 4 + App/Src/app_line_seek.c | 291 +++++++++++++++++++++++++++++++---- App/Src/app_line_seek_v1.c | 88 +++++++++++ CAR.ioc | 8 +- Core/Inc/stm32f1xx_it.h | 2 + Core/Src/main.c | 27 +++- Core/Src/stm32f1xx_it.c | 30 ++++ Core/Src/tim.c | 20 ++- MDK-ARM/CAR.uvoptx | 2 +- MDK-ARM/CAR.uvprojx | 2 +- Makefile | 3 +- STM32-for-VSCode.config.yaml | 109 +++++++++++++ STM32Make.make | 24 ++- User/Inc/line_seek.h | 7 +- User/Inc/motor.h | 2 +- User/Inc/path_plan.h | 29 ++++ User/Src/line_seek.c | 29 +++- User/Src/motor.c | 53 ++++--- User/Src/path_plan.c | 51 ++++++ 19 files changed, 705 insertions(+), 76 deletions(-) create mode 100644 App/Src/app_line_seek_v1.c create mode 100644 STM32-for-VSCode.config.yaml create mode 100644 User/Inc/path_plan.h create mode 100644 User/Src/path_plan.c diff --git a/App/Inc/app_line_seek.h b/App/Inc/app_line_seek.h index f1d1bf2..3c94856 100644 --- a/App/Inc/app_line_seek.h +++ b/App/Inc/app_line_seek.h @@ -1,6 +1,10 @@ #ifndef __APP_LINE_SEEK_H #define __APP_LINE_SEEK_H +#include "tim.h" + +void LineSeek_Init(void); void App_LineSeek(void); +void Hanlde_Crossroad(void); #endif \ No newline at end of file diff --git a/App/Src/app_line_seek.c b/App/Src/app_line_seek.c index 31d27d0..4d99641 100644 --- a/App/Src/app_line_seek.c +++ b/App/Src/app_line_seek.c @@ -4,44 +4,281 @@ #include "line_seek.h" #include "main.h" #include "motor.h" +#include "path_plan.h" +#include "stm32f1xx_hal_tim.h" #include "syscalls.h" +#include "tim.h" + +#define LOW_TUNE_SPEED -5 +#define LOW_SPEED 35 +#define MID_SPEED 40 +#define HIGH_SPEED 45 +#define MIN_TURN_TIME 300 // 最小转直角时间 +#define MIN_CROSSING_TIME 200 // 最小走十字路口时间 +#define MIN_CROSSING_STRAIGHT_TIME 50 // 最小走十字路口时间 +#define MIN_TUNE_TIME 40 // 最小微调时间 +#define MAX_TURN_TIME 4000 // 最大转弯时间 + +typedef enum +{ + MOVE_STRAIGHT, // 直行 + TURN_LEFT, // 左转 + TURN_RIGHT, // 右转 + TUNE_LEFT, // 左微调 + TUNE_RIGHT, // 右微调 + TURN_LEFT_BIG, + TURN_RIGHT_BIG +} MoveState; + +MoveState state, preState; // 运动状态 +int turn_time; // 转弯时间 +int beep_time; // 蜂鸣器鸣叫时间 +int is_crossing; // 是否正在走十字路口 + +void LINESEEK_HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) +{ + if (turn_time < INT16_MAX) + { + turn_time++; // 每1ms自增一 + } + + if (beep_time++ > 100) + { + buzzer(0); + } +} + +void LineSeek_Init(void) +{ + // 注册定时器中断溢出回调 + HAL_TIM_RegisterCallback(&htim4, HAL_TIM_PERIOD_ELAPSED_CB_ID, LINESEEK_HAL_TIM_PeriodElapsedCallback); + HAL_TIM_Base_Start_IT(&htim4); +} void App_LineSeek(void) { int LineL1 = 1, LineL2 = 1, LineR1 = 1, LineR2 = 1; - LineSeek_Get(&LineL1, &LineL2, &LineR1, &LineR2); // 获取黑线检测状态 + // LineSeek_GetStatus(&LineL1, &LineL2, &LineR1, &LineR2); // 获取黑线检测状态 - if ((LineL1 == LOW || LineL2 == LOW) && LineR2 == LOW) // 左大弯 + LineSeek_GetStatusStr(); + // printf("%s %d \n", LineSeek_Status, turn_time); + + // return; + + if (turn_time > MIN_CROSSING_TIME) { - MOTOR_SetDuty(-30, 30); // 左旋 - HAL_Delay(80); + is_crossing = 0; } - else if (LineL1 == LOW && (LineR1 == LOW || LineR2 == LOW)) // 右大弯 + + if (is_crossing && GetCurrentDirection() == STRAIGHT) { - MOTOR_SetDuty(30, -30); // 右旋 - HAL_Delay(80); + LineSeek_Status[0] = '1'; + LineSeek_Status[3] = '1'; } - else if (LineL1 == LOW) // 左最外侧检测 + + switch (state) { - MOTOR_SetDuty(-50, 50); // 左旋 - HAL_Delay(10); - } - else if (LineR2 == LOW) // 右最外侧检测 - { - MOTOR_SetDuty(50, -50); // 右旋 - HAL_Delay(10); - } - else if (LineL2 == LOW && LineR1 == HIGH) // 中间黑线上的传感器微调车左转 - { - MOTOR_SetDuty(0, 50); // 左转 - } - else if (LineL2 == HIGH && LineR1 == LOW) // 中间黑线上的传感器微调车右转 - { - MOTOR_SetDuty(50, 0); // 右转 - } - else if (LineL2 == LOW && LineR1 == LOW) // 都是黑色, 加速前进 - { - MOTOR_SetDuty(50, 50); // 直走 + case MOVE_STRAIGHT: // 直行 + MOTOR_SetDuty(HIGH_SPEED, HIGH_SPEED); + if (LineSeek_Equals("0000")) // 十字路口 + { + Hanlde_Crossroad(); + } + else if (LineSeek_Equals("1011")) // 左微调 + { + state = TUNE_LEFT; + } + else if (LineSeek_Equals("1101")) // 右微调 + { + state = TUNE_RIGHT; + } + else if (LineSeek_Equals("0001")) // 左直角 + { + turn_time = 0; + state = TURN_LEFT; + } + else if (LineSeek_Equals("1000")) // 右直角 + { + turn_time = 0; + state = TURN_RIGHT; + } + else if (LineSeek_Equals("0xx1")) // 左锐角 + { + state = TURN_LEFT_BIG; + } + else if (LineSeek_Equals("1xx0")) // 右锐角 + { + state = TURN_RIGHT_BIG; + } + else if (LineSeek_Equals("1111")) // 冲出去了,使用上一个转向 + { + state = preState; + } + break; + case TURN_LEFT: // 左直角 + MOTOR_SetDuty(-HIGH_SPEED, HIGH_SPEED); + if (LineSeek_Equals("0000")) // 十字路口 + { + Hanlde_Crossroad(); + } + else if (LineSeek_Equals("1001") && + ((preState != TUNE_LEFT && turn_time >= MIN_TURN_TIME - 1) || + (preState == TUNE_LEFT && turn_time >= MIN_TUNE_TIME))) // 直行 + { + state = MOVE_STRAIGHT; + preState = TURN_LEFT; + is_crossing = 0; + } + else if (LineSeek_Equals("xxx0") && !is_crossing) // 转过头了 + { + turn_time = MIN_TURN_TIME; + state = TURN_RIGHT; + preState = TURN_LEFT; + } + break; + case TURN_RIGHT: // 右直角 + MOTOR_SetDuty(HIGH_SPEED, -HIGH_SPEED); + if (LineSeek_Equals("0000")) // 十字路口 + { + Hanlde_Crossroad(); + } + else if (LineSeek_Equals("1001") && + ((preState != TUNE_RIGHT && turn_time >= MIN_TURN_TIME - 1) || + (preState == TUNE_RIGHT && turn_time >= MIN_TUNE_TIME))) // 直行 + { + state = MOVE_STRAIGHT; + preState = TURN_RIGHT; + is_crossing = 0; + } + else if (LineSeek_Equals("0xxx") && !is_crossing) // 转过头了 + { + turn_time = MIN_TURN_TIME; + state = TURN_LEFT; + preState = TURN_LEFT; + } + break; + case TURN_LEFT_BIG: // 左锐角 + MOTOR_SetDuty(-MID_SPEED, MID_SPEED); + if (LineSeek_Equals("0000")) // 十字路口 + { + Hanlde_Crossroad(); + } + else if (LineSeek_Equals("0001")) // 左直角 + { + turn_time = 0; + state = TURN_LEFT; + preState = TURN_LEFT_BIG; + } + else if (LineSeek_Equals("xxx0")) // 转过头了 + { + state = TUNE_RIGHT; + // preState = TURN_LEFT_BIG; + } + break; + case TURN_RIGHT_BIG: // 右锐角 + MOTOR_SetDuty(MID_SPEED, -MID_SPEED); + if (LineSeek_Equals("0000")) // 十字路口 + { + Hanlde_Crossroad(); + } + else if (LineSeek_Equals("1000")) // 右直角 + { + turn_time = 0; + state = TURN_RIGHT; + preState = TURN_RIGHT_BIG; + } + else if (LineSeek_Equals("0xxx")) // 转过头了 + { + state = TUNE_LEFT; + preState = TURN_RIGHT_BIG; + } + break; + case TUNE_LEFT: // 左微调 + MOTOR_SetDuty(LOW_TUNE_SPEED, HIGH_SPEED); + if (LineSeek_Equals("x00x")) + { + state = MOVE_STRAIGHT; + } + else if (LineSeek_Equals("0xx1") && GetCurrentDirection() != STRAIGHT) // 左转 + { + turn_time = 0; + state = TURN_LEFT; + preState = TUNE_LEFT; + } + else if (LineSeek_Equals("1xx0") && GetCurrentDirection() != STRAIGHT) // 右转 + { + turn_time = 0; + state = TURN_RIGHT; + preState = TUNE_LEFT; + } + break; + case TUNE_RIGHT: // 右微调 + MOTOR_SetDuty(HIGH_SPEED, LOW_TUNE_SPEED); + if (LineSeek_Equals("x00x")) + { + state = MOVE_STRAIGHT; + } + else if (LineSeek_Equals("0xx1") && GetCurrentDirection() != STRAIGHT) // 左转 + { + turn_time = 0; + state = TURN_LEFT; + preState = TUNE_RIGHT; + } + else if (LineSeek_Equals("1xx0") && GetCurrentDirection() != STRAIGHT) // 右转 + { + turn_time = 0; + state = TURN_RIGHT; + preState = TUNE_RIGHT; + } + break; + default: + state = MOVE_STRAIGHT; + MOTOR_SetDuty(MID_SPEED, MID_SPEED); + break; } + + // if (turn_time >= MAX_TURN_TIME) + // { + // // state = MOVE_STRAIGHT; + // MOTOR_SetDuty(0, 0); + // } + + // printf("curr state: %d \n", state); } + +void Hanlde_Crossroad(void) +{ + if (is_crossing) + { + return; + } + + beep_time = 0; + buzzer(1); + // state = MOVE_STRAIGHT; + // buzzer(1); + // HAL_Delay(50); + // buzzer(0); + + // 根据规划的路径进行决断 + is_crossing = 1; + turn_time = 0; + int direction = GetNextDirection(); + switch (direction) + { + case STRAIGHT: + state = MOVE_STRAIGHT; + break; + case LEFT: + state = TURN_LEFT; + break; + case RIGHT: + state = TURN_RIGHT; + break; + default: + state = TURN_RIGHT; + break; + } + // printf("state: %d, dir: %d \n", state, direction); +} \ No newline at end of file diff --git a/App/Src/app_line_seek_v1.c b/App/Src/app_line_seek_v1.c new file mode 100644 index 0000000..09e17bc --- /dev/null +++ b/App/Src/app_line_seek_v1.c @@ -0,0 +1,88 @@ + +#include "app_line_seek.h" + +#include "line_seek.h" +#include "main.h" +#include "motor.h" +#include "path_plan.h" +#include "syscalls.h" + +// #define LOW_SPEED 30 +// #define MID_SPEED 35 +// #define HIGH_SPEED 40 + +#define LOW_SPEED 25 +#define MID_SPEED 30 +#define HIGH_SPEED 35 + + +void App_LineSeek(void) +{ + int LineL1 = 1, LineL2 = 1, LineR1 = 1, LineR2 = 1; + + LineSeek_GetStatus(&LineL1, &LineL2, &LineR1, &LineR2); // 获取黑线检测状态 + + LineSeek_GetStatusStr(); + printf("%s\n", LineSeek_Status); + + // return; + + if (LineSeek_Equals("0000")) // 丁字(十字)路口 + { + buzzer(1); + + // 根据规划的路径进行决断 + switch (GetNextDirection()) + { + case STRAIGHT: + MOTOR_SetDuty(HIGH_SPEED, HIGH_SPEED); // 直走 + break; + case LEFT: + MOTOR_SetDuty(HIGH_SPEED, -HIGH_SPEED); // 左转 + break; + case RIGHT: + MOTOR_SetDuty(-HIGH_SPEED, HIGH_SPEED); // 右转 + break; + default: + MOTOR_Stop(); + break; + } + } + else + { + buzzer(0); + } + + if (LineSeek_Equals("1000")) // 右直角 + { + MOTOR_SetDuty(HIGH_SPEED, -HIGH_SPEED); // 右旋 + // HAL_Delay(80); + } + else if (LineSeek_Equals("0001")) // 左直角 + { + MOTOR_SetDuty(-HIGH_SPEED, HIGH_SPEED); // 左旋; + // HAL_Delay(80); + } + else if (LineSeek_Equals("0xx1")) // 左最外侧检测(锐角) + { + MOTOR_SetDuty(-HIGH_SPEED, MID_SPEED); // 左旋 + // HAL_Delay(80); + } + else if (LineSeek_Equals("1xx0")) // 右最外侧检测(锐角) + { + MOTOR_SetDuty(MID_SPEED, -HIGH_SPEED); // 右旋 + // HAL_Delay(80); + } + else if (LineSeek_Equals("x01x")) // 中间黑线上的传感器微调车左转 + { + MOTOR_SetDuty(0, LOW_SPEED); // 左转 + } + else if (LineSeek_Equals("x10x")) // 中间黑线上的传感器微调车右转 + { + MOTOR_SetDuty(LOW_SPEED, 0); // 右转 + } + else if (LineSeek_Equals("x00x")) // 都是黑色, 加速前进 + { + MOTOR_SetDuty(MID_SPEED, MID_SPEED); // 直走 + } +} diff --git a/CAR.ioc b/CAR.ioc index d149822..c40e3ad 100644 --- a/CAR.ioc +++ b/CAR.ioc @@ -81,6 +81,8 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_2 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SysTick_IRQn=true\:3\:0\:true\:false\:true\:false\:true\:false NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.TIM4_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false PA0-WKUP.GPIOParameters=PinState,GPIO_Label @@ -254,19 +256,21 @@ TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE TIM2.IPParameters=Prescaler,Period,AutoReloadPreload TIM2.Period=72 - 1 TIM2.Prescaler=10 - 1 +TIM3.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE TIM3.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 TIM3.ClockDivision=TIM_CLOCKDIVISION_DIV1 -TIM3.IPParameters=Channel-PWM Generation4 CH4,Prescaler,ClockDivision,Period,Pulse-PWM Generation4 CH4,Channel-PWM Generation3 CH3,Channel-PWM Generation2 CH2,Pulse-PWM Generation2 CH2,Pulse-PWM Generation3 CH3 +TIM3.IPParameters=Channel-PWM Generation4 CH4,Prescaler,ClockDivision,Period,Pulse-PWM Generation4 CH4,Channel-PWM Generation3 CH3,Channel-PWM Generation2 CH2,Pulse-PWM Generation2 CH2,Pulse-PWM Generation3 CH3,AutoReloadPreload TIM3.Period=256 - 1 TIM3.Prescaler=720 - 1 TIM3.Pulse-PWM\ Generation2\ CH2=255 TIM3.Pulse-PWM\ Generation3\ CH3=255 TIM3.Pulse-PWM\ Generation4\ CH4=255 +TIM4.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE TIM4.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 TIM4.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 -TIM4.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Prescaler,Period,Pulse-PWM Generation1 CH1,Pulse-PWM Generation2 CH2 +TIM4.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Prescaler,Period,Pulse-PWM Generation1 CH1,Pulse-PWM Generation2 CH2,AutoReloadPreload TIM4.Period=100 TIM4.Prescaler=720 - 1 TIM4.Pulse-PWM\ Generation1\ CH1=100 diff --git a/Core/Inc/stm32f1xx_it.h b/Core/Inc/stm32f1xx_it.h index 5e2b5bf..cff0343 100644 --- a/Core/Inc/stm32f1xx_it.h +++ b/Core/Inc/stm32f1xx_it.h @@ -57,6 +57,8 @@ void PendSV_Handler(void); void SysTick_Handler(void); void DMA1_Channel6_IRQHandler(void); void TIM2_IRQHandler(void); +void TIM3_IRQHandler(void); +void TIM4_IRQHandler(void); void USART2_IRQHandler(void); void EXTI15_10_IRQHandler(void); /* USER CODE BEGIN EFP */ diff --git a/Core/Src/main.c b/Core/Src/main.c index c01329c..de33485 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -27,10 +27,12 @@ /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ +#include "app_line_seek.h" #include "bluetooth.h" #include "hcsr04.h" #include "led.h" #include "motor.h" +#include "path_plan.h" #include "syscalls.h" /* USER CODE END Includes */ @@ -77,6 +79,7 @@ int main(void) { /* USER CODE BEGIN 1 */ + uint8_t pData[10] = {1, 2, 3}; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ @@ -102,24 +105,34 @@ int main(void) MX_TIM2_Init(); MX_TIM3_Init(); MX_TIM4_Init(); - MX_USART2_UART_Init(); + // MX_USART2_UART_Init(); MX_USART1_UART_Init(); + /* USER CODE BEGIN 2 */ HC_SR04_Init(); BLUETOOTH_Init(); - - /* USER CODE BEGIN 2 */ - + MOTOR_Init(); + PathPlanner_Init(); + LineSeek_Init(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { - my_printf(HUART1, "test huart1 \r\n"); - my_printf(HUART2, "test huart2\r\n"); + // my_printf(HUART1, "%s\r\n", *pData); - // App_LineSeek(); + // if (HAL_OK == HAL_UART_Receive(&huart2, (uint8_t *)pData, 2, 1000)) + // { + // HAL_UART_Transmit(&huart2, (uint8_t *)pData, sizeof(pData), 1000); + // HAL_Delay(500); + // } + + // HAL_Delay(2000); + + App_LineSeek(); + + // MOTOR_SetDuty(-20,20); // HAL_Delay(300); // 延时300毫秒 diff --git a/Core/Src/stm32f1xx_it.c b/Core/Src/stm32f1xx_it.c index b92439a..cb4fe63 100644 --- a/Core/Src/stm32f1xx_it.c +++ b/Core/Src/stm32f1xx_it.c @@ -56,6 +56,8 @@ /* External variables --------------------------------------------------------*/ extern TIM_HandleTypeDef htim2; +extern TIM_HandleTypeDef htim3; +extern TIM_HandleTypeDef htim4; extern DMA_HandleTypeDef hdma_usart2_rx; extern UART_HandleTypeDef huart2; /* USER CODE BEGIN EV */ @@ -228,6 +230,34 @@ void TIM2_IRQHandler(void) /* USER CODE END TIM2_IRQn 1 */ } +/** + * @brief This function handles TIM3 global interrupt. + */ +void TIM3_IRQHandler(void) +{ + /* USER CODE BEGIN TIM3_IRQn 0 */ + + /* USER CODE END TIM3_IRQn 0 */ + HAL_TIM_IRQHandler(&htim3); + /* USER CODE BEGIN TIM3_IRQn 1 */ + + /* USER CODE END TIM3_IRQn 1 */ +} + +/** + * @brief This function handles TIM4 global interrupt. + */ +void TIM4_IRQHandler(void) +{ + /* USER CODE BEGIN TIM4_IRQn 0 */ + + /* USER CODE END TIM4_IRQn 0 */ + HAL_TIM_IRQHandler(&htim4); + /* USER CODE BEGIN TIM4_IRQn 1 */ + + /* USER CODE END TIM4_IRQn 1 */ +} + /** * @brief This function handles USART2 global interrupt. */ diff --git a/Core/Src/tim.c b/Core/Src/tim.c index ec3e6eb..f6251a7 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -88,7 +88,7 @@ void MX_TIM3_Init(void) htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 256 - 1; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim3) != HAL_OK) { Error_Handler(); @@ -148,9 +148,9 @@ void MX_TIM4_Init(void) htim4.Instance = TIM4; htim4.Init.Prescaler = 720 - 1; htim4.Init.CounterMode = TIM_COUNTERMODE_UP; - htim4.Init.Period = 100; + htim4.Init.Period = 100; htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim4) != HAL_OK) { Error_Handler(); @@ -214,6 +214,10 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM3_MspInit 0 */ /* TIM3 clock enable */ __HAL_RCC_TIM3_CLK_ENABLE(); + + /* TIM3 interrupt Init */ + HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM3_IRQn); /* USER CODE BEGIN TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */ @@ -225,6 +229,10 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM4_MspInit 0 */ /* TIM4 clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); + + /* TIM4 interrupt Init */ + HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM4_IRQn); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ @@ -307,6 +315,9 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM3_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_TIM3_CLK_DISABLE(); + + /* TIM3 interrupt Deinit */ + HAL_NVIC_DisableIRQ(TIM3_IRQn); /* USER CODE BEGIN TIM3_MspDeInit 1 */ /* USER CODE END TIM3_MspDeInit 1 */ @@ -318,6 +329,9 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM4_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_TIM4_CLK_DISABLE(); + + /* TIM4 interrupt Deinit */ + HAL_NVIC_DisableIRQ(TIM4_IRQn); /* USER CODE BEGIN TIM4_MspDeInit 1 */ /* USER CODE END TIM4_MspDeInit 1 */ diff --git a/MDK-ARM/CAR.uvoptx b/MDK-ARM/CAR.uvoptx index 2c48a98..0aa7cdf 100644 --- a/MDK-ARM/CAR.uvoptx +++ b/MDK-ARM/CAR.uvoptx @@ -135,7 +135,7 @@ 0 CMSIS_AGDI - -X"" -O206 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) + -X"CMSIS-DAP_LU" -ULU_2022_8888 -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) 0 diff --git a/MDK-ARM/CAR.uvprojx b/MDK-ARM/CAR.uvprojx index 2bbd6d4..c32984b 100644 --- a/MDK-ARM/CAR.uvprojx +++ b/MDK-ARM/CAR.uvprojx @@ -81,7 +81,7 @@ 0 - 1 + 0 0 diff --git a/Makefile b/Makefile index 616ba71..fe629d7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [4.4.0-B60] date: [Sat Jul 13 16:33:46 CST 2024] +# File automatically-generated by tool: [projectgenerator] version: [4.4.0-B60] date: [Tue Jul 16 20:05:56 CST 2024] ########################################################################################################################## # ------------------------------------------------ @@ -68,6 +68,7 @@ User/Src/led.c \ User/Src/bluetooth.c \ User/Src/control.c \ User/Src/line_seek.c \ +User/Src/path_plan.c \ App/Src/app_line_seek.c # ASM sources diff --git a/STM32-for-VSCode.config.yaml b/STM32-for-VSCode.config.yaml new file mode 100644 index 0000000..223e224 --- /dev/null +++ b/STM32-for-VSCode.config.yaml @@ -0,0 +1,109 @@ +# Configuration file for the STM32 for VSCode extension +# Arrays can be inputted in two ways. One is: [entry_1, entry_2, ..., entry_final] +# or by adding an indented list below the variable name e.g.: +# VARIABLE: +# - entry_1 +# - entry_2 + +# The project name +target: CAR +# Can be C or C++ +language: C + +optimization: Og + +# MCU settings +targetMCU: stm32f1x +cpu: cortex-m3 # type of cpu e.g. cortex-m4 +fpu: # Defines how floating points are defined. Can be left empty. +floatAbi: +ldscript: STM32F103C8Tx_FLASH.ld # linker script + +# Compiler definitions. The -D prefix for the compiler will be automatically added. +cDefinitions: [] +cxxDefinitions: [] +asDefinitions: [] + +# Compiler definition files. you can add a single files or an array of files for different definitions. +# The file is expected to have a definition each new line. +# This allows to include for example a .definition file which can be ignored in git and can contain +# This can be convenient for passing along secrets at compile time, or generating a file for per device setup. +cDefinitionsFile: +cxxDefinitionsFile: +asDefinitionsFile: + +# Compiler flags +cFlags: + - -Wall + - -fdata-sections + - -ffunction-sections + +cxxFlags: [] +assemblyFlags: + - -Wall + - -fdata-sections + - -ffunction-sections + +linkerFlags: + - -Wl,--print-memory-usage + + +# libraries to be included. The -l prefix to the library will be automatically added. +libraries: + - c + - m + +# Library directories. Folders can be added here that contain custom libraries. +libraryDirectories: [] + +# Files or folders that will be excluded from compilation. +# Glob patterns (https://www.wikiwand.com/en/Glob_(programming)) can be used. +# Do mind that double stars are reserved in yaml +# these should be escaped with a: \ or the name should be in double quotes e.g. "**.test.**" +excludes: + - "**/Examples/**" + - "**/examples/**" + - "**/Example/**" + - "**/example/**" + - "**_template.*" + + +# Include directories (directories containing .h or .hpp files) +# If a CubeMX makefile is present it will automatically include the include directories from that makefile. +includeDirectories: + - Inc/** + - Core/Inc/** + - Core/Lib/** + - Src/** + - Core/Src/** + - Core/Lib/** + + +# Files that should be included in the compilation. +# If a CubeMX makefile is present it will automatically include the c and cpp/cxx files from that makefile. +# Glob patterns (https://www.wikiwand.com/en/Glob_(programming)) can be used. +# Do mind that double stars are reserved in yaml +# these should be escaped with a: \ or the name should be in double quotes e.g. "HARDWARE_DRIVER*.c" +sourceFiles: + - Src/** + - Core/Src/** + - Core/Lib/** + + +# When no makefile is present it will show a warning pop-up. +# However when compilation without the CubeMX Makefile is desired, this can be turned of. +suppressMakefileWarning: false + +# Custom makefile rules +# Here custom makefile rules can be added to the STM32Make.make file +# an example of how this can be used is commented out below. +customMakefileRules: +# - command: sayhello +# rule: echo "hello" +# dependsOn: $(BUILD_DIR)/$(TARGET).elf # can be left out + +# Additional flags which will be used when invoking the make command +makeFlags: +# - -O # use this option when the output of make is mixed up only works for make version 4.0 and upwards +# - --silent # use this option to silence the output of the build + \ No newline at end of file diff --git a/STM32Make.make b/STM32Make.make index 7a3b0e7..059cdd7 100644 --- a/STM32Make.make +++ b/STM32Make.make @@ -36,12 +36,11 @@ BUILD_DIR = build ###################################### # C sources C_SOURCES = \ +App/Src/app_line_seek.c \ +Core/Src/dma.c \ Core/Src/gpio.c \ -Core/Src/hcsr04.c \ Core/Src/i2c.c \ -Core/Src/led.c \ Core/Src/main.c \ -Core/Src/motor.c \ Core/Src/stm32f1xx_hal_msp.c \ Core/Src/stm32f1xx_it.c \ Core/Src/syscalls.c \ @@ -63,7 +62,14 @@ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c \ +User/Src/bluetooth.c \ +User/Src/control.c \ +User/Src/hcsr04.c \ +User/Src/led.c \ +User/Src/line_seek.c \ +User/Src/motor.c \ +User/Src/path_plan.c CPP_SOURCES = \ @@ -82,7 +88,7 @@ PREFIX = arm-none-eabi- POSTFIX = " # The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx) # either it can be added to the PATH environment variable. -GCC_PATH="E:/PROGRAM FILES/GNU ARM EMBEDDED TOOLCHAIN/10 2021.10/BIN +GCC_PATH="E:/PROGRAM FILES (X86)/GNU ARM EMBEDDED TOOLCHAIN/10 2021.10/BIN ifdef GCC_PATH CXX = $(GCC_PATH)/$(PREFIX)g++$(POSTFIX) CC = $(GCC_PATH)/$(PREFIX)gcc$(POSTFIX) @@ -135,11 +141,13 @@ AS_INCLUDES = \ # C includes C_INCLUDES = \ +-IApp/Inc \ -ICore/Inc \ -IDrivers/CMSIS/Device/ST/STM32F1xx/Include \ -IDrivers/CMSIS/Include \ -IDrivers/STM32F1xx_HAL_Driver/Inc \ --IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy +-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy \ +-IUser/Inc @@ -235,13 +243,13 @@ $(BUILD_DIR): # flash ####################################### flash: $(BUILD_DIR)/$(TARGET).elf - "E:/PROGRAM FILES/OPENOCD-20231002-0.12.0/BIN/OPENOCD.EXE" -f ./openocd.cfg -c "program $(BUILD_DIR)/$(TARGET).elf verify reset exit" + "D:/PROGRAM FILES/OPENOCD-20231002-0.12.0/BIN/OPENOCD.EXE" -f ./openocd.cfg -c "program $(BUILD_DIR)/$(TARGET).elf verify reset exit" ####################################### # erase ####################################### erase: $(BUILD_DIR)/$(TARGET).elf - "E:/PROGRAM FILES/OPENOCD-20231002-0.12.0/BIN/OPENOCD.EXE" -f ./openocd.cfg -c "init; reset halt; stm32f1x mass_erase 0; exit" + "D:/PROGRAM FILES/OPENOCD-20231002-0.12.0/BIN/OPENOCD.EXE" -f ./openocd.cfg -c "init; reset halt; stm32f1x mass_erase 0; exit" ####################################### # clean up diff --git a/User/Inc/line_seek.h b/User/Inc/line_seek.h index 1ff2bdb..7954ed2 100644 --- a/User/Inc/line_seek.h +++ b/User/Inc/line_seek.h @@ -1,7 +1,10 @@ #ifndef __LINE_SEEK_H__ #define __LINE_SEEK_H__ -// 获取巡线状态 -void LineSeek_Get(int *p_iL1, int *p_iL2, int *p_iR1, int *p_iR2); +extern char LineSeek_Status[5]; + +void LineSeek_GetStatus(int *p_iL1, int *p_iL2, int *p_iR1, int *p_iR2); +char *LineSeek_GetStatusStr(); +int LineSeek_Equals(const char *expression); #endif \ No newline at end of file diff --git a/User/Inc/motor.h b/User/Inc/motor.h index 35d7a45..4a408f1 100644 --- a/User/Inc/motor.h +++ b/User/Inc/motor.h @@ -5,7 +5,7 @@ #include "main.h" -void MOTOR_Start(void); +void MOTOR_Init(void); void MOTOR_Slip(void); void MOTOR_Stop(void); void MOTOR_SetDuty(int8_t leftDuty, int8_t rightDuty); diff --git a/User/Inc/path_plan.h b/User/Inc/path_plan.h new file mode 100644 index 0000000..3cb03cd --- /dev/null +++ b/User/Inc/path_plan.h @@ -0,0 +1,29 @@ +#ifndef __PATH_PLAN_H +#define __PATH_PLAN_H + +// 定义方向枚举 +typedef enum +{ + STRAIGHT, + LEFT, + RIGHT, + STOP +} Direction; + +// 定义路径规划器结构 +typedef struct +{ + int currentStep; + Direction* path; + int pathLength; +} PathPlanner; + +// 全局路径规划器 +extern PathPlanner pathPlanner; + +void PathPlanner_Init(); +Direction GetCurrentDirection(); +Direction GetNextDirection(); +void AddPathStep(Direction step); + +#endif diff --git a/User/Src/line_seek.c b/User/Src/line_seek.c index 4c16608..0261ad8 100644 --- a/User/Src/line_seek.c +++ b/User/Src/line_seek.c @@ -3,15 +3,42 @@ #include "main.h" +char LineSeek_Status[5]; + /** * @brief 获取巡线状态 * @param[in] int *p_iL1, int *p_iL2, int *p_iR1, int *p_iR2 四路巡线位指针 * @retval void */ -void LineSeek_Get(int *p_iL1, int *p_iL2, int *p_iR1, int *p_iR2) +void LineSeek_GetStatus(int *p_iL1, int *p_iL2, int *p_iR1, int *p_iR2) { *p_iL1 = HAL_GPIO_ReadPin(LineSeek_L1_GPIO_Port, LineSeek_L1_Pin); *p_iL2 = HAL_GPIO_ReadPin(LineSeek_L2_GPIO_Port, LineSeek_L2_Pin); *p_iR1 = HAL_GPIO_ReadPin(LineSeek_R1_GPIO_Port, LineSeek_R1_Pin); *p_iR2 = HAL_GPIO_ReadPin(LineSeek_R2_GPIO_Port, LineSeek_R2_Pin); } + +/** + * @brief 获取巡线状态并返回表示状态的字符串 + * @retval char LineSeek_Status[5] + */ +char *LineSeek_GetStatusStr() +{ + int iL1, iL2, iR1, iR2; + LineSeek_GetStatus(&iL1, &iL2, &iR1, &iR2); + sprintf(LineSeek_Status, "%d%d%d%d", iL1, iL2, iR1, iR2); + return LineSeek_Status; +} + +int LineSeek_Equals(const char *expression) +{ + int i; + for (i = 0; i < 4; i++) + { + if (expression[i] != 'x' && expression[i] != LineSeek_Status[i]) + { + return 0; + } + } + return 1; +} diff --git a/User/Src/motor.c b/User/Src/motor.c index 33d20f5..d5f7ba6 100644 --- a/User/Src/motor.c +++ b/User/Src/motor.c @@ -3,6 +3,7 @@ #include "tim.h" #define MAX_SPEED 100 +#define MIN_SPEED 5 #define MOTOR_L 1 #define MOTOR_R 2 #define MOTOR_TIM (&htim4) @@ -11,10 +12,10 @@ int8_t preProcess(int8_t duty, uint8_t motor); -void MOTOR_Start(void) +void MOTOR_Init(void) { - HAL_TIM_PWM_Start(MOTOR_TIM, MOTOR_L_CHAN); - HAL_TIM_PWM_Start(MOTOR_TIM, MOTOR_R_CHAN); + HAL_TIM_PWM_Start_IT(MOTOR_TIM, MOTOR_L_CHAN); + HAL_TIM_PWM_Start_IT(MOTOR_TIM, MOTOR_R_CHAN); } /// @brief 自由滑行 @@ -37,30 +38,21 @@ void MOTOR_Stop(void) /// @brief 控制电机占空比 -/// @param leftDuty 绝对值 20-100, 支持正负 -/// @param rightDuty 绝对值 20-100,支持正负 +/// @param leftDuty 绝对值 0或20-100, 支持正负 +/// @param rightDuty 绝对值 0或20-100,支持正负 void MOTOR_SetDuty(int8_t leftDuty, int8_t rightDuty) { leftDuty = preProcess(leftDuty, MOTOR_L); rightDuty = preProcess(rightDuty, MOTOR_R); - uint16_t leftSpeed = (uint32_t)MAX_SPEED * leftDuty / 100; - __HAL_TIM_SetCompare(MOTOR_TIM, MOTOR_L_CHAN, leftSpeed); - __HAL_TIM_SetCompare(MOTOR_TIM, MOTOR_R_CHAN, leftSpeed); - - uint16_t rightSpeed = (uint32_t)MAX_SPEED * rightDuty / 100; - __HAL_TIM_SetCompare(MOTOR_TIM, MOTOR_L_CHAN, rightSpeed); - __HAL_TIM_SetCompare(MOTOR_TIM, MOTOR_R_CHAN, rightSpeed); + __HAL_TIM_SetCompare(MOTOR_TIM, MOTOR_L_CHAN, leftDuty); + __HAL_TIM_SetCompare(MOTOR_TIM, MOTOR_R_CHAN, rightDuty); } int8_t preProcess(int8_t duty, uint8_t motor) { - if (duty >= 0) + if (duty > 0) { - if (duty > 100) - duty = 100; - else if (duty < 20) - duty = 20; if (motor & MOTOR_L) { HAL_GPIO_WritePin(L_FORWARD_GPIO_Port, L_FORWARD_Pin, GPIO_PIN_SET); @@ -71,13 +63,11 @@ int8_t preProcess(int8_t duty, uint8_t motor) HAL_GPIO_WritePin(R_FORWARD_GPIO_Port, R_FORWARD_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(R_BACKWARD_GPIO_Port, R_BACKWARD_Pin, GPIO_PIN_RESET); } + } - else + else if (duty < 0) { - if (duty < -100) - duty = -100; - else if (duty > -20) - duty = -20; + duty = -duty; if (motor & MOTOR_L) { HAL_GPIO_WritePin(L_FORWARD_GPIO_Port, L_FORWARD_Pin, GPIO_PIN_RESET); @@ -89,5 +79,24 @@ int8_t preProcess(int8_t duty, uint8_t motor) HAL_GPIO_WritePin(R_BACKWARD_GPIO_Port, R_BACKWARD_Pin, GPIO_PIN_SET); } } + else + { + duty = MAX_SPEED; + if (motor & MOTOR_L) + { + HAL_GPIO_WritePin(L_FORWARD_GPIO_Port, L_FORWARD_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(L_BACKWARD_GPIO_Port, L_BACKWARD_Pin, GPIO_PIN_RESET); + } + if (motor & MOTOR_R) + { + HAL_GPIO_WritePin(R_FORWARD_GPIO_Port, R_FORWARD_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(R_BACKWARD_GPIO_Port, R_BACKWARD_Pin, GPIO_PIN_RESET); + } + } + + if (duty > MAX_SPEED) + duty = MAX_SPEED; + if (duty < MIN_SPEED) + duty = MIN_SPEED; return duty; } diff --git a/User/Src/path_plan.c b/User/Src/path_plan.c new file mode 100644 index 0000000..1654ac2 --- /dev/null +++ b/User/Src/path_plan.c @@ -0,0 +1,51 @@ + +#include "path_plan.h" + +#include "stdio.h" + +// 全局路径规划器 +PathPlanner pathPlanner; + +// 初始化路径规划器 +void PathPlanner_Init() +{ + pathPlanner.currentStep = -1; + pathPlanner.path = NULL; + pathPlanner.pathLength = 0; + SetPath(); +} + +// 设置自定义路径 +void SetPath() +{ + int i; + for (i = 0; i < 100; i++) + { + AddPathStep(LEFT); + AddPathStep(RIGHT); + AddPathStep(STRAIGHT); + } +} + +// 获取当前方向 +Direction GetCurrentDirection() +{ + return pathPlanner.path[pathPlanner.currentStep]; +} + +// 获取下一步方向 +Direction GetNextDirection() +{ + if (pathPlanner.currentStep >= pathPlanner.pathLength) + { + pathPlanner.currentStep = -1; + } + return pathPlanner.path[++pathPlanner.currentStep]; +} + +// 添加路径 +void AddPathStep(Direction step) +{ + pathPlanner.path = realloc(pathPlanner.path, ++pathPlanner.pathLength * sizeof(Direction)); + pathPlanner.path[pathPlanner.pathLength - 1] = step; +} From 87c8df4faf8dd394c11ab9892fce9accc8b64d8d Mon Sep 17 00:00:00 2001 From: JasonChen <2805998671@qq.com> Date: Mon, 15 Jul 2024 15:04:02 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=88=A0=E9=99=A4CAR.uvguix.lenovo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MDK-ARM/CAR.uvguix.lenovo | 1941 ------------------------------------- 1 file changed, 1941 deletions(-) delete mode 100644 MDK-ARM/CAR.uvguix.lenovo diff --git a/MDK-ARM/CAR.uvguix.lenovo b/MDK-ARM/CAR.uvguix.lenovo deleted file mode 100644 index ac660df..0000000 --- a/MDK-ARM/CAR.uvguix.lenovo +++ /dev/null @@ -1,1941 +0,0 @@ - - - - -6.1 - -
### uVision Project, (C) Keil Software
- - - D:\OneDrive\OneDrive - my.swjtu.edu.cn\Data\program code\Projects\Car\MDK-ARM - - - - - - - 38003 - Registers - 115 114 - - - 346 - Code Coverage - 725 160 - - - 204 - Performance Analyzer - 885 - - - - - - 35141 - Event Statistics - - 200 50 700 - - - 1506 - Symbols - - 60 60 60 - - - 1936 - Watch 1 - - 200 133 133 - - - 1937 - Watch 2 - - 200 133 133 - - - 1935 - Call Stack + Locals - - 200 133 133 - - - 2506 - Trace Data - - 75 135 130 95 70 230 200 150 - - - 466 - Source Browser - 500 - 300 - - - - - - - - 1 - 1 - 0 - 0 - -1 - - - - - - - 44 - 2 - 3 - - -32000 - -32000 - - - -1 - -1 - - - 152 - 389 - 1390 - 774 - - - - 0 - - 1348 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000008000000010000000100000061443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C436F72655C5372635C73797374656D5F73746D3332663178782E63000000001273797374656D5F73746D3332663178782E6300000000C5D4F200FFFFFFFF55443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF5A443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C557365725C5372635C626C7565746F6F74682E63000000000B626C7565746F6F74682E6300000000BECEA100FFFFFFFF7D443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F7263635F65782E68000000001673746D3332663178785F68616C5F7263635F65782E6800000000F0A0A100FFFFFFFF7C443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F666C6173682E68000000001573746D3332663178785F68616C5F666C6173682E6800000000BCA8E100FFFFFFFF7F443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F666C6173685F65782E68000000001873746D3332663178785F68616C5F666C6173685F65782E68000000009CC1B600FFFFFFFF7A443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F646D612E68000000001373746D3332663178785F68616C5F646D612E6800000000F7B88600FFFFFFFF7A443A5C4F6E6544726976655C4F6E654472697665202D206D792E73776A74752E6564752E636E5C446174615C70726F6772616D20636F64655C50726F6A656374735C4361725C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F7263632E68000000001373746D3332663178785F68616C5F7263632E6800000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F300000066000000B705000020020000 - - - - 0 - Build - - -1 - -1 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BA0000004F00000039040000C3000000 - - - 16 - BA0000006600000039040000DA000000 - - - - 1005 - 1005 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000EC000000F0010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 109 - 109 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000EC000000F0010000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 1465 - 1465 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1466 - 1466 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1467 - 1467 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1468 - 1468 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1506 - 1506 - 0 - 0 - 0 - 0 - 32767 - 0 - 16384 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 1913 - 1913 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1935 - 1935 - 0 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 1936 - 1936 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 1937 - 1937 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 1939 - 1939 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1940 - 1940 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1941 - 1941 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 1942 - 1942 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 195 - 195 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000EC000000F0010000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 196 - 196 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000EC000000F0010000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 197 - 197 - 1 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 0000000021020000B705000040030000 - - - 16 - 22000000390000003E020000AD000000 - - - - 198 - 198 - 0 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 00000000AC0100003904000034020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 199 - 199 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000024020000B405000027030000 - - - 16 - 22000000390000003E020000AD000000 - - - - 203 - 203 - 0 - 0 - 0 - 0 - 32767 - 0 - 8192 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 204 - 204 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 221 - 221 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 00000000000000000000000000000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 2506 - 2506 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 2507 - 2507 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 22000000390000003E020000AD000000 - - - - 343 - 343 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 346 - 346 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 35141 - 35141 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35824 - 35824 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 35885 - 35885 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35886 - 35886 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35887 - 35887 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35888 - 35888 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35889 - 35889 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35890 - 35890 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35891 - 35891 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35892 - 35892 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35893 - 35893 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35894 - 35894 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35895 - 35895 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35896 - 35896 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35897 - 35897 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35898 - 35898 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35899 - 35899 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35900 - 35900 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35901 - 35901 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35902 - 35902 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35903 - 35903 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35904 - 35904 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 35905 - 35905 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 38003 - 38003 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000EC000000F0010000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 38007 - 38007 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000024020000B405000027030000 - - - 16 - 22000000390000003E020000AD000000 - - - - 436 - 436 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000024020000B405000027030000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 437 - 437 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 440 - 440 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 463 - 463 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000024020000B405000027030000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 466 - 466 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000024020000B405000027030000 - - - 16 - 2200000039000000FA0000000C020000 - - - - 470 - 470 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - BD0000006600000036040000AA000000 - - - 16 - 22000000390000003E020000AD000000 - - - - 50000 - 50000 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50001 - 50001 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50002 - 50002 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50003 - 50003 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50004 - 50004 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50005 - 50005 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50006 - 50006 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50007 - 50007 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50008 - 50008 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50009 - 50009 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50010 - 50010 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50011 - 50011 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50012 - 50012 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50013 - 50013 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50014 - 50014 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50015 - 50015 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50016 - 50016 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50017 - 50017 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50018 - 50018 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 50019 - 50019 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 860300006600000036040000A3010000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 59392 - 59392 - 1 - 0 - 0 - 0 - 966 - 0 - 8192 - 0 - - 16 - 0000000000000000D10300001C000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59393 - 0 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0000000040030000B705000053030000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59399 - 59399 - 1 - 0 - 0 - 0 - 476 - 0 - 8192 - 1 - - 16 - 000000001C000000E701000038000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59400 - 59400 - 0 - 0 - 0 - 0 - 612 - 0 - 8192 - 2 - - 16 - 00000000380000006F02000054000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 824 - 824 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000C3010000360400001B020000 - - - 16 - 2200000039000000D8000000E3000000 - - - - 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFBA000000C300000039040000C7000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000BA0000006600000039040000DA000000BA0000004F00000039040000C30000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF7F0300004F00000083030000BC010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000830300006600000039040000D3010000830300004F00000039040000BC01000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFEF0000004F000000F300000009020000010000000200001004000000010000004CFFFFFFF8040000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000EF00000020020000000000004F000000EF000000090200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000A801000039040000AC01000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000C3010000390400004B02000000000000AC010000390400003402000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF1D020000AC010000210200003402000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000009020000B70500000D020000010000000100001004000000010000008CFDFFFF72000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000000000000024020000B705000057030000000000000D020000B7050000400300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 - - - 59392 - File - - 2580 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001348414C5F54494D5F4D7370506F7374496E6974960000000000000001001348414C5F54494D5F4D7370506F7374496E697400000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 - - - 1423 - 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 1423 - 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 - - - - 59399 - Build - - 966 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000002001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000034341529600000000000000010003434152000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 - - - 583 - 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 583 - 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 - - - - 59400 - Debug - - 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 - - - 898 - 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 898 - 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 - - - - 0 - 1463 - 914 - - - - - - 1 - 0 - - 100 - 1 - - ../Core/Src/system_stm32f1xx.c - 0 - 1 - 1 - 1 - - 0 - - - ../Core/Src/main.c - 0 - 106 - 114 - 1 - - 0 - - - ..\User\Src\bluetooth.c - 0 - 42 - 64 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h - 0 - 1835 - 1857 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h - 0 - 254 - 274 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h - 0 - 726 - 748 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h - 0 - 354 - 376 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h - 0 - 1132 - 1154 - 1 - - 0 - - - - -
From 7ae55eee361146182234e1923198541da507ab55 Mon Sep 17 00:00:00 2001 From: JasonChen <2805998671@qq.com> Date: Wed, 17 Jul 2024 21:19:00 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E2=9C=A8=20feat:=20=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E5=B0=8F=E8=BD=A6=E5=B7=A1=E7=BA=BF=E8=BF=90=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/Inc/app_line_seek.h | 4 + App/Src/app_line_seek.c | 291 +++++++++++++++++++++++++++++++---- App/Src/app_line_seek_v1.c | 88 +++++++++++ CAR.ioc | 8 +- Core/Inc/stm32f1xx_it.h | 2 + Core/Src/main.c | 190 +++++++++++++---------- Core/Src/stm32f1xx_it.c | 27 ++++ Core/Src/tim.c | 20 ++- MDK-ARM/CAR.uvoptx | 2 +- MDK-ARM/CAR.uvprojx | 2 +- Makefile | 3 +- Peripheral/Inc/line_seek.h | 7 +- Peripheral/Inc/motor.h | 2 +- Peripheral/Inc/path_plan.h | 29 ++++ Peripheral/Src/line_seek.c | 31 +++- Peripheral/Src/motor.c | 8 +- Peripheral/Src/path_plan.c | 51 ++++++ STM32-for-VSCode.config.yaml | 109 +++++++++++++ STM32Make.make | 24 ++- 19 files changed, 762 insertions(+), 136 deletions(-) create mode 100644 App/Src/app_line_seek_v1.c create mode 100644 Peripheral/Inc/path_plan.h create mode 100644 Peripheral/Src/path_plan.c create mode 100644 STM32-for-VSCode.config.yaml diff --git a/App/Inc/app_line_seek.h b/App/Inc/app_line_seek.h index f1d1bf2..3c94856 100644 --- a/App/Inc/app_line_seek.h +++ b/App/Inc/app_line_seek.h @@ -1,6 +1,10 @@ #ifndef __APP_LINE_SEEK_H #define __APP_LINE_SEEK_H +#include "tim.h" + +void LineSeek_Init(void); void App_LineSeek(void); +void Hanlde_Crossroad(void); #endif \ No newline at end of file diff --git a/App/Src/app_line_seek.c b/App/Src/app_line_seek.c index 31d27d0..4d99641 100644 --- a/App/Src/app_line_seek.c +++ b/App/Src/app_line_seek.c @@ -4,44 +4,281 @@ #include "line_seek.h" #include "main.h" #include "motor.h" +#include "path_plan.h" +#include "stm32f1xx_hal_tim.h" #include "syscalls.h" +#include "tim.h" + +#define LOW_TUNE_SPEED -5 +#define LOW_SPEED 35 +#define MID_SPEED 40 +#define HIGH_SPEED 45 +#define MIN_TURN_TIME 300 // 最小转直角时间 +#define MIN_CROSSING_TIME 200 // 最小走十字路口时间 +#define MIN_CROSSING_STRAIGHT_TIME 50 // 最小走十字路口时间 +#define MIN_TUNE_TIME 40 // 最小微调时间 +#define MAX_TURN_TIME 4000 // 最大转弯时间 + +typedef enum +{ + MOVE_STRAIGHT, // 直行 + TURN_LEFT, // 左转 + TURN_RIGHT, // 右转 + TUNE_LEFT, // 左微调 + TUNE_RIGHT, // 右微调 + TURN_LEFT_BIG, + TURN_RIGHT_BIG +} MoveState; + +MoveState state, preState; // 运动状态 +int turn_time; // 转弯时间 +int beep_time; // 蜂鸣器鸣叫时间 +int is_crossing; // 是否正在走十字路口 + +void LINESEEK_HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) +{ + if (turn_time < INT16_MAX) + { + turn_time++; // 每1ms自增一 + } + + if (beep_time++ > 100) + { + buzzer(0); + } +} + +void LineSeek_Init(void) +{ + // 注册定时器中断溢出回调 + HAL_TIM_RegisterCallback(&htim4, HAL_TIM_PERIOD_ELAPSED_CB_ID, LINESEEK_HAL_TIM_PeriodElapsedCallback); + HAL_TIM_Base_Start_IT(&htim4); +} void App_LineSeek(void) { int LineL1 = 1, LineL2 = 1, LineR1 = 1, LineR2 = 1; - LineSeek_Get(&LineL1, &LineL2, &LineR1, &LineR2); // 获取黑线检测状态 + // LineSeek_GetStatus(&LineL1, &LineL2, &LineR1, &LineR2); // 获取黑线检测状态 - if ((LineL1 == LOW || LineL2 == LOW) && LineR2 == LOW) // 左大弯 + LineSeek_GetStatusStr(); + // printf("%s %d \n", LineSeek_Status, turn_time); + + // return; + + if (turn_time > MIN_CROSSING_TIME) { - MOTOR_SetDuty(-30, 30); // 左旋 - HAL_Delay(80); + is_crossing = 0; } - else if (LineL1 == LOW && (LineR1 == LOW || LineR2 == LOW)) // 右大弯 + + if (is_crossing && GetCurrentDirection() == STRAIGHT) { - MOTOR_SetDuty(30, -30); // 右旋 - HAL_Delay(80); + LineSeek_Status[0] = '1'; + LineSeek_Status[3] = '1'; } - else if (LineL1 == LOW) // 左最外侧检测 + + switch (state) { - MOTOR_SetDuty(-50, 50); // 左旋 - HAL_Delay(10); - } - else if (LineR2 == LOW) // 右最外侧检测 - { - MOTOR_SetDuty(50, -50); // 右旋 - HAL_Delay(10); - } - else if (LineL2 == LOW && LineR1 == HIGH) // 中间黑线上的传感器微调车左转 - { - MOTOR_SetDuty(0, 50); // 左转 - } - else if (LineL2 == HIGH && LineR1 == LOW) // 中间黑线上的传感器微调车右转 - { - MOTOR_SetDuty(50, 0); // 右转 - } - else if (LineL2 == LOW && LineR1 == LOW) // 都是黑色, 加速前进 - { - MOTOR_SetDuty(50, 50); // 直走 + case MOVE_STRAIGHT: // 直行 + MOTOR_SetDuty(HIGH_SPEED, HIGH_SPEED); + if (LineSeek_Equals("0000")) // 十字路口 + { + Hanlde_Crossroad(); + } + else if (LineSeek_Equals("1011")) // 左微调 + { + state = TUNE_LEFT; + } + else if (LineSeek_Equals("1101")) // 右微调 + { + state = TUNE_RIGHT; + } + else if (LineSeek_Equals("0001")) // 左直角 + { + turn_time = 0; + state = TURN_LEFT; + } + else if (LineSeek_Equals("1000")) // 右直角 + { + turn_time = 0; + state = TURN_RIGHT; + } + else if (LineSeek_Equals("0xx1")) // 左锐角 + { + state = TURN_LEFT_BIG; + } + else if (LineSeek_Equals("1xx0")) // 右锐角 + { + state = TURN_RIGHT_BIG; + } + else if (LineSeek_Equals("1111")) // 冲出去了,使用上一个转向 + { + state = preState; + } + break; + case TURN_LEFT: // 左直角 + MOTOR_SetDuty(-HIGH_SPEED, HIGH_SPEED); + if (LineSeek_Equals("0000")) // 十字路口 + { + Hanlde_Crossroad(); + } + else if (LineSeek_Equals("1001") && + ((preState != TUNE_LEFT && turn_time >= MIN_TURN_TIME - 1) || + (preState == TUNE_LEFT && turn_time >= MIN_TUNE_TIME))) // 直行 + { + state = MOVE_STRAIGHT; + preState = TURN_LEFT; + is_crossing = 0; + } + else if (LineSeek_Equals("xxx0") && !is_crossing) // 转过头了 + { + turn_time = MIN_TURN_TIME; + state = TURN_RIGHT; + preState = TURN_LEFT; + } + break; + case TURN_RIGHT: // 右直角 + MOTOR_SetDuty(HIGH_SPEED, -HIGH_SPEED); + if (LineSeek_Equals("0000")) // 十字路口 + { + Hanlde_Crossroad(); + } + else if (LineSeek_Equals("1001") && + ((preState != TUNE_RIGHT && turn_time >= MIN_TURN_TIME - 1) || + (preState == TUNE_RIGHT && turn_time >= MIN_TUNE_TIME))) // 直行 + { + state = MOVE_STRAIGHT; + preState = TURN_RIGHT; + is_crossing = 0; + } + else if (LineSeek_Equals("0xxx") && !is_crossing) // 转过头了 + { + turn_time = MIN_TURN_TIME; + state = TURN_LEFT; + preState = TURN_LEFT; + } + break; + case TURN_LEFT_BIG: // 左锐角 + MOTOR_SetDuty(-MID_SPEED, MID_SPEED); + if (LineSeek_Equals("0000")) // 十字路口 + { + Hanlde_Crossroad(); + } + else if (LineSeek_Equals("0001")) // 左直角 + { + turn_time = 0; + state = TURN_LEFT; + preState = TURN_LEFT_BIG; + } + else if (LineSeek_Equals("xxx0")) // 转过头了 + { + state = TUNE_RIGHT; + // preState = TURN_LEFT_BIG; + } + break; + case TURN_RIGHT_BIG: // 右锐角 + MOTOR_SetDuty(MID_SPEED, -MID_SPEED); + if (LineSeek_Equals("0000")) // 十字路口 + { + Hanlde_Crossroad(); + } + else if (LineSeek_Equals("1000")) // 右直角 + { + turn_time = 0; + state = TURN_RIGHT; + preState = TURN_RIGHT_BIG; + } + else if (LineSeek_Equals("0xxx")) // 转过头了 + { + state = TUNE_LEFT; + preState = TURN_RIGHT_BIG; + } + break; + case TUNE_LEFT: // 左微调 + MOTOR_SetDuty(LOW_TUNE_SPEED, HIGH_SPEED); + if (LineSeek_Equals("x00x")) + { + state = MOVE_STRAIGHT; + } + else if (LineSeek_Equals("0xx1") && GetCurrentDirection() != STRAIGHT) // 左转 + { + turn_time = 0; + state = TURN_LEFT; + preState = TUNE_LEFT; + } + else if (LineSeek_Equals("1xx0") && GetCurrentDirection() != STRAIGHT) // 右转 + { + turn_time = 0; + state = TURN_RIGHT; + preState = TUNE_LEFT; + } + break; + case TUNE_RIGHT: // 右微调 + MOTOR_SetDuty(HIGH_SPEED, LOW_TUNE_SPEED); + if (LineSeek_Equals("x00x")) + { + state = MOVE_STRAIGHT; + } + else if (LineSeek_Equals("0xx1") && GetCurrentDirection() != STRAIGHT) // 左转 + { + turn_time = 0; + state = TURN_LEFT; + preState = TUNE_RIGHT; + } + else if (LineSeek_Equals("1xx0") && GetCurrentDirection() != STRAIGHT) // 右转 + { + turn_time = 0; + state = TURN_RIGHT; + preState = TUNE_RIGHT; + } + break; + default: + state = MOVE_STRAIGHT; + MOTOR_SetDuty(MID_SPEED, MID_SPEED); + break; } + + // if (turn_time >= MAX_TURN_TIME) + // { + // // state = MOVE_STRAIGHT; + // MOTOR_SetDuty(0, 0); + // } + + // printf("curr state: %d \n", state); } + +void Hanlde_Crossroad(void) +{ + if (is_crossing) + { + return; + } + + beep_time = 0; + buzzer(1); + // state = MOVE_STRAIGHT; + // buzzer(1); + // HAL_Delay(50); + // buzzer(0); + + // 根据规划的路径进行决断 + is_crossing = 1; + turn_time = 0; + int direction = GetNextDirection(); + switch (direction) + { + case STRAIGHT: + state = MOVE_STRAIGHT; + break; + case LEFT: + state = TURN_LEFT; + break; + case RIGHT: + state = TURN_RIGHT; + break; + default: + state = TURN_RIGHT; + break; + } + // printf("state: %d, dir: %d \n", state, direction); +} \ No newline at end of file diff --git a/App/Src/app_line_seek_v1.c b/App/Src/app_line_seek_v1.c new file mode 100644 index 0000000..09e17bc --- /dev/null +++ b/App/Src/app_line_seek_v1.c @@ -0,0 +1,88 @@ + +#include "app_line_seek.h" + +#include "line_seek.h" +#include "main.h" +#include "motor.h" +#include "path_plan.h" +#include "syscalls.h" + +// #define LOW_SPEED 30 +// #define MID_SPEED 35 +// #define HIGH_SPEED 40 + +#define LOW_SPEED 25 +#define MID_SPEED 30 +#define HIGH_SPEED 35 + + +void App_LineSeek(void) +{ + int LineL1 = 1, LineL2 = 1, LineR1 = 1, LineR2 = 1; + + LineSeek_GetStatus(&LineL1, &LineL2, &LineR1, &LineR2); // 获取黑线检测状态 + + LineSeek_GetStatusStr(); + printf("%s\n", LineSeek_Status); + + // return; + + if (LineSeek_Equals("0000")) // 丁字(十字)路口 + { + buzzer(1); + + // 根据规划的路径进行决断 + switch (GetNextDirection()) + { + case STRAIGHT: + MOTOR_SetDuty(HIGH_SPEED, HIGH_SPEED); // 直走 + break; + case LEFT: + MOTOR_SetDuty(HIGH_SPEED, -HIGH_SPEED); // 左转 + break; + case RIGHT: + MOTOR_SetDuty(-HIGH_SPEED, HIGH_SPEED); // 右转 + break; + default: + MOTOR_Stop(); + break; + } + } + else + { + buzzer(0); + } + + if (LineSeek_Equals("1000")) // 右直角 + { + MOTOR_SetDuty(HIGH_SPEED, -HIGH_SPEED); // 右旋 + // HAL_Delay(80); + } + else if (LineSeek_Equals("0001")) // 左直角 + { + MOTOR_SetDuty(-HIGH_SPEED, HIGH_SPEED); // 左旋; + // HAL_Delay(80); + } + else if (LineSeek_Equals("0xx1")) // 左最外侧检测(锐角) + { + MOTOR_SetDuty(-HIGH_SPEED, MID_SPEED); // 左旋 + // HAL_Delay(80); + } + else if (LineSeek_Equals("1xx0")) // 右最外侧检测(锐角) + { + MOTOR_SetDuty(MID_SPEED, -HIGH_SPEED); // 右旋 + // HAL_Delay(80); + } + else if (LineSeek_Equals("x01x")) // 中间黑线上的传感器微调车左转 + { + MOTOR_SetDuty(0, LOW_SPEED); // 左转 + } + else if (LineSeek_Equals("x10x")) // 中间黑线上的传感器微调车右转 + { + MOTOR_SetDuty(LOW_SPEED, 0); // 右转 + } + else if (LineSeek_Equals("x00x")) // 都是黑色, 加速前进 + { + MOTOR_SetDuty(MID_SPEED, MID_SPEED); // 直走 + } +} diff --git a/CAR.ioc b/CAR.ioc index fbc58ae..aeeb1fe 100644 --- a/CAR.ioc +++ b/CAR.ioc @@ -86,6 +86,8 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_2 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SysTick_IRQn=true\:2\:0\:true\:false\:true\:false\:true\:false NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.TIM4_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USART1_IRQn=true\:3\:1\:true\:false\:true\:true\:true\:true NVIC.USART2_IRQn=true\:3\:0\:true\:false\:true\:true\:true\:true NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false @@ -278,19 +280,21 @@ TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE TIM2.IPParameters=Prescaler,Period,AutoReloadPreload TIM2.Period=72 - 1 TIM2.Prescaler=10 - 1 +TIM3.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE TIM3.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 TIM3.ClockDivision=TIM_CLOCKDIVISION_DIV1 -TIM3.IPParameters=Channel-PWM Generation4 CH4,Prescaler,ClockDivision,Period,Pulse-PWM Generation4 CH4,Channel-PWM Generation3 CH3,Channel-PWM Generation2 CH2,Pulse-PWM Generation2 CH2,Pulse-PWM Generation3 CH3 +TIM3.IPParameters=Channel-PWM Generation4 CH4,Prescaler,ClockDivision,Period,Pulse-PWM Generation4 CH4,Channel-PWM Generation3 CH3,Channel-PWM Generation2 CH2,Pulse-PWM Generation2 CH2,Pulse-PWM Generation3 CH3,AutoReloadPreload TIM3.Period=256 - 1 TIM3.Prescaler=720 - 1 TIM3.Pulse-PWM\ Generation2\ CH2=255 TIM3.Pulse-PWM\ Generation3\ CH3=255 TIM3.Pulse-PWM\ Generation4\ CH4=255 +TIM4.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE TIM4.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 TIM4.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 -TIM4.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Prescaler,Period,Pulse-PWM Generation1 CH1,Pulse-PWM Generation2 CH2 +TIM4.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Prescaler,Period,Pulse-PWM Generation1 CH1,Pulse-PWM Generation2 CH2,AutoReloadPreload TIM4.Period=100 TIM4.Prescaler=720 - 1 TIM4.Pulse-PWM\ Generation1\ CH1=100 diff --git a/Core/Inc/stm32f1xx_it.h b/Core/Inc/stm32f1xx_it.h index 63af3ef..3f1ab9b 100644 --- a/Core/Inc/stm32f1xx_it.h +++ b/Core/Inc/stm32f1xx_it.h @@ -58,6 +58,8 @@ void SysTick_Handler(void); void DMA1_Channel6_IRQHandler(void); void TIM2_IRQHandler(void); void USART1_IRQHandler(void); +void TIM3_IRQHandler(void); +void TIM4_IRQHandler(void); void USART2_IRQHandler(void); void EXTI15_10_IRQHandler(void); /* USER CODE BEGIN EFP */ diff --git a/Core/Src/main.c b/Core/Src/main.c index e0a7a4b..de33485 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -18,16 +18,21 @@ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" + #include "dma.h" +#include "gpio.h" #include "i2c.h" #include "tim.h" #include "usart.h" -#include "gpio.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ +#include "app_line_seek.h" #include "bluetooth.h" #include "hcsr04.h" +#include "led.h" +#include "motor.h" +#include "path_plan.h" #include "syscalls.h" /* USER CODE END Includes */ @@ -67,96 +72,113 @@ void SystemClock_Config(void); /* USER CODE END 0 */ /** - * @brief The application entry point. - * @retval int - */ + * @brief The application entry point. + * @retval int + */ int main(void) { + /* USER CODE BEGIN 1 */ - /* USER CODE BEGIN 1 */ + uint8_t pData[10] = {1, 2, 3}; + /* USER CODE END 1 */ - /* USER CODE END 1 */ + /* MCU Configuration--------------------------------------------------------*/ - /* MCU Configuration--------------------------------------------------------*/ + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); + /* USER CODE BEGIN Init */ - /* USER CODE BEGIN Init */ + /* USER CODE END Init */ - /* USER CODE END Init */ + /* Configure the system clock */ + SystemClock_Config(); - /* Configure the system clock */ - SystemClock_Config(); + /* USER CODE BEGIN SysInit */ - /* USER CODE BEGIN SysInit */ + /* USER CODE END SysInit */ - /* USER CODE END SysInit */ + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_DMA_Init(); + MX_I2C2_Init(); + MX_TIM2_Init(); + MX_TIM3_Init(); + MX_TIM4_Init(); + // MX_USART2_UART_Init(); + MX_USART1_UART_Init(); - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_DMA_Init(); - MX_I2C2_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_TIM3_Init(); - MX_TIM4_Init(); - // MX_USART1_UART_Init(); - MX_USART2_UART_Init(); - /* USER CODE BEGIN 2 */ - BLUETOOTH_Init(); - HC_SR04_Init(); - /* USER CODE END 2 */ + /* USER CODE BEGIN 2 */ + HC_SR04_Init(); + BLUETOOTH_Init(); + MOTOR_Init(); + PathPlanner_Init(); + LineSeek_Init(); + /* USER CODE END 2 */ - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - - } - /* USER CODE END 3 */ + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + // my_printf(HUART1, "%s\r\n", *pData); + + // if (HAL_OK == HAL_UART_Receive(&huart2, (uint8_t *)pData, 2, 1000)) + // { + // HAL_UART_Transmit(&huart2, (uint8_t *)pData, sizeof(pData), 1000); + // HAL_Delay(500); + // } + + // HAL_Delay(2000); + + App_LineSeek(); + + // MOTOR_SetDuty(-20,20); + + // HAL_Delay(300); // 延时300毫秒 + + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ } /** - * @brief System Clock Configuration - * @retval None - */ + * @brief System Clock Configuration + * @retval None + */ void SystemClock_Config(void) { - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } } /* USER CODE BEGIN 4 */ @@ -164,33 +186,33 @@ void SystemClock_Config(void) /* USER CODE END 4 */ /** - * @brief This function is executed in case of error occurrence. - * @retval None - */ + * @brief This function is executed in case of error occurrence. + * @retval None + */ void Error_Handler(void) { - /* USER CODE BEGIN Error_Handler_Debug */ + /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ __disable_irq(); while (1) { } - /* USER CODE END Error_Handler_Debug */ + /* USER CODE END Error_Handler_Debug */ } -#ifdef USE_FULL_ASSERT +#ifdef USE_FULL_ASSERT /** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ void assert_failed(uint8_t *file, uint32_t line) { - /* USER CODE BEGIN 6 */ + /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ - /* USER CODE END 6 */ + /* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */ diff --git a/Core/Src/stm32f1xx_it.c b/Core/Src/stm32f1xx_it.c index 9258712..748479e 100644 --- a/Core/Src/stm32f1xx_it.c +++ b/Core/Src/stm32f1xx_it.c @@ -56,6 +56,8 @@ /* External variables --------------------------------------------------------*/ extern TIM_HandleTypeDef htim2; +extern TIM_HandleTypeDef htim3; +extern TIM_HandleTypeDef htim4; extern DMA_HandleTypeDef hdma_usart2_rx; extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart2; @@ -241,6 +243,31 @@ void USART1_IRQHandler(void) /* USER CODE BEGIN USART1_IRQn 1 */ /* USER CODE END USART1_IRQn 1 */ + * @brief This function handles TIM3 global interrupt. + */ +void TIM3_IRQHandler(void) +{ + /* USER CODE BEGIN TIM3_IRQn 0 */ + + /* USER CODE END TIM3_IRQn 0 */ + HAL_TIM_IRQHandler(&htim3); + /* USER CODE BEGIN TIM3_IRQn 1 */ + + /* USER CODE END TIM3_IRQn 1 */ +} + +/** + * @brief This function handles TIM4 global interrupt. + */ +void TIM4_IRQHandler(void) +{ + /* USER CODE BEGIN TIM4_IRQn 0 */ + + /* USER CODE END TIM4_IRQn 0 */ + HAL_TIM_IRQHandler(&htim4); + /* USER CODE BEGIN TIM4_IRQn 1 */ + + /* USER CODE END TIM4_IRQn 1 */ } /** diff --git a/Core/Src/tim.c b/Core/Src/tim.c index 5ff3c10..a263420 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -158,7 +158,7 @@ void MX_TIM3_Init(void) htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 256 - 1; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim3) != HAL_OK) { Error_Handler(); @@ -218,9 +218,9 @@ void MX_TIM4_Init(void) htim4.Instance = TIM4; htim4.Init.Prescaler = 720 - 1; htim4.Init.CounterMode = TIM_COUNTERMODE_UP; - htim4.Init.Period = 100; + htim4.Init.Period = 100; htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim4) != HAL_OK) { Error_Handler(); @@ -295,6 +295,10 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM3_MspInit 0 */ /* TIM3 clock enable */ __HAL_RCC_TIM3_CLK_ENABLE(); + + /* TIM3 interrupt Init */ + HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM3_IRQn); /* USER CODE BEGIN TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */ @@ -306,6 +310,10 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM4_MspInit 0 */ /* TIM4 clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); + + /* TIM4 interrupt Init */ + HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM4_IRQn); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ @@ -418,6 +426,9 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM3_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_TIM3_CLK_DISABLE(); + + /* TIM3 interrupt Deinit */ + HAL_NVIC_DisableIRQ(TIM3_IRQn); /* USER CODE BEGIN TIM3_MspDeInit 1 */ /* USER CODE END TIM3_MspDeInit 1 */ @@ -429,6 +440,9 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM4_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_TIM4_CLK_DISABLE(); + + /* TIM4 interrupt Deinit */ + HAL_NVIC_DisableIRQ(TIM4_IRQn); /* USER CODE BEGIN TIM4_MspDeInit 1 */ /* USER CODE END TIM4_MspDeInit 1 */ diff --git a/MDK-ARM/CAR.uvoptx b/MDK-ARM/CAR.uvoptx index 2478158..9521874 100644 --- a/MDK-ARM/CAR.uvoptx +++ b/MDK-ARM/CAR.uvoptx @@ -135,7 +135,7 @@ 0 CMSIS_AGDI - -X"" -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) + -X"CMSIS-DAP_LU" -ULU_2022_8888 -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) 0 diff --git a/MDK-ARM/CAR.uvprojx b/MDK-ARM/CAR.uvprojx index f392583..78067dd 100644 --- a/MDK-ARM/CAR.uvprojx +++ b/MDK-ARM/CAR.uvprojx @@ -81,7 +81,7 @@ 0 - 1 + 0 0 diff --git a/Makefile b/Makefile index 616ba71..fe629d7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [4.4.0-B60] date: [Sat Jul 13 16:33:46 CST 2024] +# File automatically-generated by tool: [projectgenerator] version: [4.4.0-B60] date: [Tue Jul 16 20:05:56 CST 2024] ########################################################################################################################## # ------------------------------------------------ @@ -68,6 +68,7 @@ User/Src/led.c \ User/Src/bluetooth.c \ User/Src/control.c \ User/Src/line_seek.c \ +User/Src/path_plan.c \ App/Src/app_line_seek.c # ASM sources diff --git a/Peripheral/Inc/line_seek.h b/Peripheral/Inc/line_seek.h index 7873655..7954ed2 100644 --- a/Peripheral/Inc/line_seek.h +++ b/Peripheral/Inc/line_seek.h @@ -1,9 +1,10 @@ #ifndef __LINE_SEEK_H__ #define __LINE_SEEK_H__ -#include "main.h" +extern char LineSeek_Status[5]; -// 获取巡线状态 -void LineSeek_Get(int *p_iL1, int *p_iL2, int *p_iR1, int *p_iR2); +void LineSeek_GetStatus(int *p_iL1, int *p_iL2, int *p_iR1, int *p_iR2); +char *LineSeek_GetStatusStr(); +int LineSeek_Equals(const char *expression); #endif \ No newline at end of file diff --git a/Peripheral/Inc/motor.h b/Peripheral/Inc/motor.h index 35d7a45..4a408f1 100644 --- a/Peripheral/Inc/motor.h +++ b/Peripheral/Inc/motor.h @@ -5,7 +5,7 @@ #include "main.h" -void MOTOR_Start(void); +void MOTOR_Init(void); void MOTOR_Slip(void); void MOTOR_Stop(void); void MOTOR_SetDuty(int8_t leftDuty, int8_t rightDuty); diff --git a/Peripheral/Inc/path_plan.h b/Peripheral/Inc/path_plan.h new file mode 100644 index 0000000..3cb03cd --- /dev/null +++ b/Peripheral/Inc/path_plan.h @@ -0,0 +1,29 @@ +#ifndef __PATH_PLAN_H +#define __PATH_PLAN_H + +// 定义方向枚举 +typedef enum +{ + STRAIGHT, + LEFT, + RIGHT, + STOP +} Direction; + +// 定义路径规划器结构 +typedef struct +{ + int currentStep; + Direction* path; + int pathLength; +} PathPlanner; + +// 全局路径规划器 +extern PathPlanner pathPlanner; + +void PathPlanner_Init(); +Direction GetCurrentDirection(); +Direction GetNextDirection(); +void AddPathStep(Direction step); + +#endif diff --git a/Peripheral/Src/line_seek.c b/Peripheral/Src/line_seek.c index 446215a..5779674 100644 --- a/Peripheral/Src/line_seek.c +++ b/Peripheral/Src/line_seek.c @@ -1,14 +1,43 @@ #include "line_seek.h" +#include "main.h" + +char LineSeek_Status[5]; + /** * @brief 获取巡线状态 * @param[in] int *p_iL1, int *p_iL2, int *p_iR1, int *p_iR2 四路巡线位指针 * @retval void */ -void LineSeek_Get(int *p_iL1, int *p_iL2, int *p_iR1, int *p_iR2) +void LineSeek_GetStatus(int *p_iL1, int *p_iL2, int *p_iR1, int *p_iR2) { *p_iL1 = HAL_GPIO_ReadPin(LineSeek_L1_GPIO_Port, LineSeek_L1_Pin); *p_iL2 = HAL_GPIO_ReadPin(LineSeek_L2_GPIO_Port, LineSeek_L2_Pin); *p_iR1 = HAL_GPIO_ReadPin(LineSeek_R1_GPIO_Port, LineSeek_R1_Pin); *p_iR2 = HAL_GPIO_ReadPin(LineSeek_R2_GPIO_Port, LineSeek_R2_Pin); } + +/** + * @brief 获取巡线状态并返回表示状态的字符串 + * @retval char LineSeek_Status[5] + */ +char *LineSeek_GetStatusStr() +{ + int iL1, iL2, iR1, iR2; + LineSeek_GetStatus(&iL1, &iL2, &iR1, &iR2); + sprintf(LineSeek_Status, "%d%d%d%d", iL1, iL2, iR1, iR2); + return LineSeek_Status; +} + +int LineSeek_Equals(const char *expression) +{ + int i; + for (i = 0; i < 4; i++) + { + if (expression[i] != 'x' && expression[i] != LineSeek_Status[i]) + { + return 0; + } + } + return 1; +} diff --git a/Peripheral/Src/motor.c b/Peripheral/Src/motor.c index cf1860b..d5f7ba6 100644 --- a/Peripheral/Src/motor.c +++ b/Peripheral/Src/motor.c @@ -3,7 +3,7 @@ #include "tim.h" #define MAX_SPEED 100 -#define MIN_SPEED 15 +#define MIN_SPEED 5 #define MOTOR_L 1 #define MOTOR_R 2 #define MOTOR_TIM (&htim4) @@ -12,10 +12,10 @@ int8_t preProcess(int8_t duty, uint8_t motor); -void MOTOR_Start(void) +void MOTOR_Init(void) { - HAL_TIM_PWM_Start(MOTOR_TIM, MOTOR_L_CHAN); - HAL_TIM_PWM_Start(MOTOR_TIM, MOTOR_R_CHAN); + HAL_TIM_PWM_Start_IT(MOTOR_TIM, MOTOR_L_CHAN); + HAL_TIM_PWM_Start_IT(MOTOR_TIM, MOTOR_R_CHAN); } /// @brief 自由滑行 diff --git a/Peripheral/Src/path_plan.c b/Peripheral/Src/path_plan.c new file mode 100644 index 0000000..1654ac2 --- /dev/null +++ b/Peripheral/Src/path_plan.c @@ -0,0 +1,51 @@ + +#include "path_plan.h" + +#include "stdio.h" + +// 全局路径规划器 +PathPlanner pathPlanner; + +// 初始化路径规划器 +void PathPlanner_Init() +{ + pathPlanner.currentStep = -1; + pathPlanner.path = NULL; + pathPlanner.pathLength = 0; + SetPath(); +} + +// 设置自定义路径 +void SetPath() +{ + int i; + for (i = 0; i < 100; i++) + { + AddPathStep(LEFT); + AddPathStep(RIGHT); + AddPathStep(STRAIGHT); + } +} + +// 获取当前方向 +Direction GetCurrentDirection() +{ + return pathPlanner.path[pathPlanner.currentStep]; +} + +// 获取下一步方向 +Direction GetNextDirection() +{ + if (pathPlanner.currentStep >= pathPlanner.pathLength) + { + pathPlanner.currentStep = -1; + } + return pathPlanner.path[++pathPlanner.currentStep]; +} + +// 添加路径 +void AddPathStep(Direction step) +{ + pathPlanner.path = realloc(pathPlanner.path, ++pathPlanner.pathLength * sizeof(Direction)); + pathPlanner.path[pathPlanner.pathLength - 1] = step; +} diff --git a/STM32-for-VSCode.config.yaml b/STM32-for-VSCode.config.yaml new file mode 100644 index 0000000..223e224 --- /dev/null +++ b/STM32-for-VSCode.config.yaml @@ -0,0 +1,109 @@ +# Configuration file for the STM32 for VSCode extension +# Arrays can be inputted in two ways. One is: [entry_1, entry_2, ..., entry_final] +# or by adding an indented list below the variable name e.g.: +# VARIABLE: +# - entry_1 +# - entry_2 + +# The project name +target: CAR +# Can be C or C++ +language: C + +optimization: Og + +# MCU settings +targetMCU: stm32f1x +cpu: cortex-m3 # type of cpu e.g. cortex-m4 +fpu: # Defines how floating points are defined. Can be left empty. +floatAbi: +ldscript: STM32F103C8Tx_FLASH.ld # linker script + +# Compiler definitions. The -D prefix for the compiler will be automatically added. +cDefinitions: [] +cxxDefinitions: [] +asDefinitions: [] + +# Compiler definition files. you can add a single files or an array of files for different definitions. +# The file is expected to have a definition each new line. +# This allows to include for example a .definition file which can be ignored in git and can contain +# This can be convenient for passing along secrets at compile time, or generating a file for per device setup. +cDefinitionsFile: +cxxDefinitionsFile: +asDefinitionsFile: + +# Compiler flags +cFlags: + - -Wall + - -fdata-sections + - -ffunction-sections + +cxxFlags: [] +assemblyFlags: + - -Wall + - -fdata-sections + - -ffunction-sections + +linkerFlags: + - -Wl,--print-memory-usage + + +# libraries to be included. The -l prefix to the library will be automatically added. +libraries: + - c + - m + +# Library directories. Folders can be added here that contain custom libraries. +libraryDirectories: [] + +# Files or folders that will be excluded from compilation. +# Glob patterns (https://www.wikiwand.com/en/Glob_(programming)) can be used. +# Do mind that double stars are reserved in yaml +# these should be escaped with a: \ or the name should be in double quotes e.g. "**.test.**" +excludes: + - "**/Examples/**" + - "**/examples/**" + - "**/Example/**" + - "**/example/**" + - "**_template.*" + + +# Include directories (directories containing .h or .hpp files) +# If a CubeMX makefile is present it will automatically include the include directories from that makefile. +includeDirectories: + - Inc/** + - Core/Inc/** + - Core/Lib/** + - Src/** + - Core/Src/** + - Core/Lib/** + + +# Files that should be included in the compilation. +# If a CubeMX makefile is present it will automatically include the c and cpp/cxx files from that makefile. +# Glob patterns (https://www.wikiwand.com/en/Glob_(programming)) can be used. +# Do mind that double stars are reserved in yaml +# these should be escaped with a: \ or the name should be in double quotes e.g. "HARDWARE_DRIVER*.c" +sourceFiles: + - Src/** + - Core/Src/** + - Core/Lib/** + + +# When no makefile is present it will show a warning pop-up. +# However when compilation without the CubeMX Makefile is desired, this can be turned of. +suppressMakefileWarning: false + +# Custom makefile rules +# Here custom makefile rules can be added to the STM32Make.make file +# an example of how this can be used is commented out below. +customMakefileRules: +# - command: sayhello +# rule: echo "hello" +# dependsOn: $(BUILD_DIR)/$(TARGET).elf # can be left out + +# Additional flags which will be used when invoking the make command +makeFlags: +# - -O # use this option when the output of make is mixed up only works for make version 4.0 and upwards +# - --silent # use this option to silence the output of the build + \ No newline at end of file diff --git a/STM32Make.make b/STM32Make.make index 7a3b0e7..059cdd7 100644 --- a/STM32Make.make +++ b/STM32Make.make @@ -36,12 +36,11 @@ BUILD_DIR = build ###################################### # C sources C_SOURCES = \ +App/Src/app_line_seek.c \ +Core/Src/dma.c \ Core/Src/gpio.c \ -Core/Src/hcsr04.c \ Core/Src/i2c.c \ -Core/Src/led.c \ Core/Src/main.c \ -Core/Src/motor.c \ Core/Src/stm32f1xx_hal_msp.c \ Core/Src/stm32f1xx_it.c \ Core/Src/syscalls.c \ @@ -63,7 +62,14 @@ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c \ -Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c +Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c \ +User/Src/bluetooth.c \ +User/Src/control.c \ +User/Src/hcsr04.c \ +User/Src/led.c \ +User/Src/line_seek.c \ +User/Src/motor.c \ +User/Src/path_plan.c CPP_SOURCES = \ @@ -82,7 +88,7 @@ PREFIX = arm-none-eabi- POSTFIX = " # The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx) # either it can be added to the PATH environment variable. -GCC_PATH="E:/PROGRAM FILES/GNU ARM EMBEDDED TOOLCHAIN/10 2021.10/BIN +GCC_PATH="E:/PROGRAM FILES (X86)/GNU ARM EMBEDDED TOOLCHAIN/10 2021.10/BIN ifdef GCC_PATH CXX = $(GCC_PATH)/$(PREFIX)g++$(POSTFIX) CC = $(GCC_PATH)/$(PREFIX)gcc$(POSTFIX) @@ -135,11 +141,13 @@ AS_INCLUDES = \ # C includes C_INCLUDES = \ +-IApp/Inc \ -ICore/Inc \ -IDrivers/CMSIS/Device/ST/STM32F1xx/Include \ -IDrivers/CMSIS/Include \ -IDrivers/STM32F1xx_HAL_Driver/Inc \ --IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy +-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy \ +-IUser/Inc @@ -235,13 +243,13 @@ $(BUILD_DIR): # flash ####################################### flash: $(BUILD_DIR)/$(TARGET).elf - "E:/PROGRAM FILES/OPENOCD-20231002-0.12.0/BIN/OPENOCD.EXE" -f ./openocd.cfg -c "program $(BUILD_DIR)/$(TARGET).elf verify reset exit" + "D:/PROGRAM FILES/OPENOCD-20231002-0.12.0/BIN/OPENOCD.EXE" -f ./openocd.cfg -c "program $(BUILD_DIR)/$(TARGET).elf verify reset exit" ####################################### # erase ####################################### erase: $(BUILD_DIR)/$(TARGET).elf - "E:/PROGRAM FILES/OPENOCD-20231002-0.12.0/BIN/OPENOCD.EXE" -f ./openocd.cfg -c "init; reset halt; stm32f1x mass_erase 0; exit" + "D:/PROGRAM FILES/OPENOCD-20231002-0.12.0/BIN/OPENOCD.EXE" -f ./openocd.cfg -c "init; reset halt; stm32f1x mass_erase 0; exit" ####################################### # clean up From 2efc1e837530c825f4dade6d6c04c8bad9d0f8a4 Mon Sep 17 00:00:00 2001 From: JasonChen <2805998671@qq.com> Date: Wed, 17 Jul 2024 21:30:41 +0800 Subject: [PATCH 5/6] =?UTF-8?q?feat:=20=E5=B0=8F=E8=BD=A6=E5=B7=A1?= =?UTF-8?q?=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- User/Inc/path_plan.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 User/Inc/path_plan.h diff --git a/User/Inc/path_plan.h b/User/Inc/path_plan.h new file mode 100644 index 0000000..3cb03cd --- /dev/null +++ b/User/Inc/path_plan.h @@ -0,0 +1,29 @@ +#ifndef __PATH_PLAN_H +#define __PATH_PLAN_H + +// 定义方向枚举 +typedef enum +{ + STRAIGHT, + LEFT, + RIGHT, + STOP +} Direction; + +// 定义路径规划器结构 +typedef struct +{ + int currentStep; + Direction* path; + int pathLength; +} PathPlanner; + +// 全局路径规划器 +extern PathPlanner pathPlanner; + +void PathPlanner_Init(); +Direction GetCurrentDirection(); +Direction GetNextDirection(); +void AddPathStep(Direction step); + +#endif From bb23d452ca81823e5b3544e4dbdfd3149fc94c43 Mon Sep 17 00:00:00 2001 From: JasonChen <2805998671@qq.com> Date: Wed, 17 Jul 2024 22:14:32 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=90=88=E5=B9=B6=EF=BC=9A=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E5=B0=8F=E8=BD=A6=E5=B7=A1=E7=BA=BF=E8=BF=90=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/Src/app_line_seek.c | 4 +-- App/Src/app_ultrasonic.c | 1 + Core/Inc/main.h | 4 --- Core/Inc/stm32f1xx_it.h | 2 +- Core/Src/main.c | 3 +- Core/Src/stm32f1xx_it.c | 61 +++++++++++++++++++++------------------- Core/Src/tim.c | 2 +- Makefile | 24 +++++++++------- Peripheral/Src/control.c | 4 +-- User/Inc/path_plan.h | 29 ------------------- 10 files changed, 55 insertions(+), 79 deletions(-) delete mode 100644 User/Inc/path_plan.h diff --git a/App/Src/app_line_seek.c b/App/Src/app_line_seek.c index 4d99641..5e1e5ae 100644 --- a/App/Src/app_line_seek.c +++ b/App/Src/app_line_seek.c @@ -44,7 +44,7 @@ void LINESEEK_HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) if (beep_time++ > 100) { - buzzer(0); + HAL_GPIO_WritePin(FM_K2_POWERC_GPIO_Port, FM_K2_POWERC_Pin, GPIO_PIN_SET); } } @@ -255,7 +255,7 @@ void Hanlde_Crossroad(void) } beep_time = 0; - buzzer(1); + HAL_GPIO_WritePin(FM_K2_POWERC_GPIO_Port, FM_K2_POWERC_Pin, GPIO_PIN_RESET); // state = MOVE_STRAIGHT; // buzzer(1); // HAL_Delay(50); diff --git a/App/Src/app_ultrasonic.c b/App/Src/app_ultrasonic.c index 724a251..2a2e5c2 100644 --- a/App/Src/app_ultrasonic.c +++ b/App/Src/app_ultrasonic.c @@ -3,6 +3,7 @@ #include "hcsr04.h" #include "main.h" #include "led.h" +#include "path_plan.h" #define BLOCK_DISTANCE 150 diff --git a/Core/Inc/main.h b/Core/Inc/main.h index afa8e32..d01cff8 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -106,10 +106,6 @@ void Error_Handler(void); /* USER CODE BEGIN Private defines */ #define LOW (0) #define HIGH (1) -#define LEFT (0) -#define STRAIGHT (1) -#define RIGHT (2) -#define STOP (3) /* USER CODE END Private defines */ #ifdef __cplusplus diff --git a/Core/Inc/stm32f1xx_it.h b/Core/Inc/stm32f1xx_it.h index 3f1ab9b..64ba1a0 100644 --- a/Core/Inc/stm32f1xx_it.h +++ b/Core/Inc/stm32f1xx_it.h @@ -57,9 +57,9 @@ void PendSV_Handler(void); void SysTick_Handler(void); void DMA1_Channel6_IRQHandler(void); void TIM2_IRQHandler(void); -void USART1_IRQHandler(void); void TIM3_IRQHandler(void); void TIM4_IRQHandler(void); +void USART1_IRQHandler(void); void USART2_IRQHandler(void); void EXTI15_10_IRQHandler(void); /* USER CODE BEGIN EFP */ diff --git a/Core/Src/main.c b/Core/Src/main.c index de33485..883b377 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -102,11 +102,12 @@ int main(void) MX_GPIO_Init(); MX_DMA_Init(); MX_I2C2_Init(); + MX_TIM1_Init(); MX_TIM2_Init(); MX_TIM3_Init(); MX_TIM4_Init(); - // MX_USART2_UART_Init(); MX_USART1_UART_Init(); + // MX_USART2_UART_Init(); /* USER CODE BEGIN 2 */ HC_SR04_Init(); diff --git a/Core/Src/stm32f1xx_it.c b/Core/Src/stm32f1xx_it.c index 748479e..fb7ced6 100644 --- a/Core/Src/stm32f1xx_it.c +++ b/Core/Src/stm32f1xx_it.c @@ -1,20 +1,20 @@ /* USER CODE BEGIN Header */ /** - ****************************************************************************** - * @file stm32f1xx_it.c - * @brief Interrupt Service Routines. - ****************************************************************************** - * @attention - * - * Copyright (c) 2024 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ + ****************************************************************************** + * @file stm32f1xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ @@ -77,9 +77,9 @@ void NMI_Handler(void) /* USER CODE END NonMaskableInt_IRQn 0 */ /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ - while (1) - { - } + while (1) + { + } /* USER CODE END NonMaskableInt_IRQn 1 */ } @@ -232,17 +232,6 @@ void TIM2_IRQHandler(void) } /** - * @brief This function handles USART1 global interrupt. - */ -void USART1_IRQHandler(void) -{ - /* USER CODE BEGIN USART1_IRQn 0 */ - - /* USER CODE END USART1_IRQn 0 */ - HAL_UART_IRQHandler(&huart1); - /* USER CODE BEGIN USART1_IRQn 1 */ - - /* USER CODE END USART1_IRQn 1 */ * @brief This function handles TIM3 global interrupt. */ void TIM3_IRQHandler(void) @@ -270,6 +259,20 @@ void TIM4_IRQHandler(void) /* USER CODE END TIM4_IRQn 1 */ } +/** + * @brief This function handles USART1 global interrupt. + */ +void USART1_IRQHandler(void) +{ + /* USER CODE BEGIN USART1_IRQn 0 */ + + /* USER CODE END USART1_IRQn 0 */ + HAL_UART_IRQHandler(&huart1); + /* USER CODE BEGIN USART1_IRQn 1 */ + + /* USER CODE END USART1_IRQn 1 */ +} + /** * @brief This function handles USART2 global interrupt. */ diff --git a/Core/Src/tim.c b/Core/Src/tim.c index a263420..72c4bcd 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -218,7 +218,7 @@ void MX_TIM4_Init(void) htim4.Instance = TIM4; htim4.Init.Prescaler = 720 - 1; htim4.Init.CounterMode = TIM_COUNTERMODE_UP; - htim4.Init.Period = 100; + htim4.Init.Period = 100; htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim4) != HAL_OK) diff --git a/Makefile b/Makefile index fe629d7..3b62267 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [4.4.0-B60] date: [Tue Jul 16 20:05:56 CST 2024] +# File automatically-generated by tool: [projectgenerator] version: [4.4.0-B60] date: [Wed Jul 17 21:44:09 CST 2024] ########################################################################################################################## # ------------------------------------------------ @@ -62,14 +62,18 @@ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c \ Core/Src/system_stm32f1xx.c \ Core/Src/sysmem.c \ -User/Src/hcsr04.c \ -User/Src/motor.c \ -User/Src/led.c \ -User/Src/bluetooth.c \ -User/Src/control.c \ -User/Src/line_seek.c \ -User/Src/path_plan.c \ -App/Src/app_line_seek.c +Peripheral/Src/hcsr04.c \ +Peripheral/Src/motor.c \ +Peripheral/Src/led.c \ +Peripheral/Src/bluetooth.c \ +Peripheral/Src/control.c \ +Peripheral/Src/line_seek.c \ +Peripheral/Src/path_plan.c \ +Peripheral/Src/servo.c \ +Peripheral/Src/infrared.c \ +App/Src/app_line_seek.c \ +App/Src/app_ultrasonic.c + # ASM sources ASM_SOURCES = \ @@ -130,7 +134,7 @@ AS_INCLUDES = # C includes C_INCLUDES = \ -ICore/Inc \ --IUser/Inc \ +-IPeripheral/Inc \ -IApp/Inc \ -IDrivers/STM32F1xx_HAL_Driver/Inc \ -IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy \ diff --git a/Peripheral/Src/control.c b/Peripheral/Src/control.c index 9765e99..e5afd94 100644 --- a/Peripheral/Src/control.c +++ b/Peripheral/Src/control.c @@ -78,7 +78,7 @@ void CONTROL_Mode(uint8_t new_mode, uint8_t state) case MODE_REMOTE: speed = 20; MOTOR_SetDuty(speed, speed); - MOTOR_Start(); + MOTOR_Init(); break; case MODE_PATROL: break; @@ -98,7 +98,7 @@ void carMove(uint8_t state) MOTOR_Stop(); else { - MOTOR_Start(); + MOTOR_Init(); switch (state) { // 前进 diff --git a/User/Inc/path_plan.h b/User/Inc/path_plan.h deleted file mode 100644 index 3cb03cd..0000000 --- a/User/Inc/path_plan.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __PATH_PLAN_H -#define __PATH_PLAN_H - -// 定义方向枚举 -typedef enum -{ - STRAIGHT, - LEFT, - RIGHT, - STOP -} Direction; - -// 定义路径规划器结构 -typedef struct -{ - int currentStep; - Direction* path; - int pathLength; -} PathPlanner; - -// 全局路径规划器 -extern PathPlanner pathPlanner; - -void PathPlanner_Init(); -Direction GetCurrentDirection(); -Direction GetNextDirection(); -void AddPathStep(Direction step); - -#endif