From aff8bf2c944ac950db78e16baec9d4ea172a5f8f Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 19 Apr 2023 10:40:17 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E9=83=A8=E5=88=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 +- app/Core/Inc/stm32f4xx_it.h | 3 ++ app/Core/Src/gpio.c | 42 +++++++++++++---- app/Core/Src/stm32f4xx_it.c | 1 + app/MDK-ARM/app.uvguix.h_zha | 74 +++++++++++++++++++----------- app/app.ioc | 58 +++++++++++++++-------- dep/libiflytop_micro | 2 +- dep/libtrinamic | 2 +- src/board/device_io_service.cpp | 51 ++++++++++++++------ src/board/device_io_service.hpp | 10 +++- src/board/fan_state_monitor.cpp | 4 +- src/board/hardware.cpp | 12 ++++- src/board/hardware.hpp | 24 ++++++++-- src/board/libtmcimpl.cpp | 19 -------- src/board/libtmcimpl.hpp | 21 --------- src/board/project_board.hpp | 25 ++++++++++ src/lncubator_rotating_control_service.cpp | 29 +++++++++++- src/lncubator_rotating_control_service.hpp | 27 +++++++++-- src/project_board.hpp | 22 --------- src/umain.cpp | 4 +- 20 files changed, 278 insertions(+), 155 deletions(-) create mode 100644 src/board/project_board.hpp delete mode 100644 src/project_board.hpp diff --git a/.vscode/settings.json b/.vscode/settings.json index 9e0ec99..c36f9bc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -64,6 +64,7 @@ "deque": "cpp", "param.h": "c", "stdbool.h": "c", - "check.h": "c" + "check.h": "c", + "stm32f4xx_it.h": "c" } } \ No newline at end of file diff --git a/app/Core/Inc/stm32f4xx_it.h b/app/Core/Inc/stm32f4xx_it.h index 51b0036..547aa80 100644 --- a/app/Core/Inc/stm32f4xx_it.h +++ b/app/Core/Inc/stm32f4xx_it.h @@ -55,10 +55,13 @@ void SVC_Handler(void); void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); +void EXTI3_IRQHandler(void); void CAN1_TX_IRQHandler(void); void CAN1_RX0_IRQHandler(void); void CAN1_RX1_IRQHandler(void); void CAN1_SCE_IRQHandler(void); +void EXTI9_5_IRQHandler(void); +void EXTI15_10_IRQHandler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ diff --git a/app/Core/Src/gpio.c b/app/Core/Src/gpio.c index 31c082d..fdd0aa1 100644 --- a/app/Core/Src/gpio.c +++ b/app/Core/Src/gpio.c @@ -69,12 +69,12 @@ void MX_GPIO_Init(void) /*Configure GPIO pins : PC13 PC14 PC15 PC0 PC1 PC2 PC3 PC4 - PC5 PC6 PC7 PC10 - PC11 PC12 */ + PC5 PC6 PC10 PC11 + PC12 */ GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0 |GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4 - |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_10 - |GPIO_PIN_11|GPIO_PIN_12; + |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_10|GPIO_PIN_11 + |GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); @@ -100,17 +100,29 @@ void MX_GPIO_Init(void) HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /*Configure GPIO pins : PD8 PD9 PD10 PD11 - PD12 PD13 PD15 PD0 - PD1 PD2 PD3 PD4 - PD5 PD6 PD7 */ + PD13 PD15 PD0 PD1 + PD2 PD4 PD5 PD6 + PD7 */ GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 - |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_15|GPIO_PIN_0 - |GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4 - |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; + |GPIO_PIN_13|GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1 + |GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6 + |GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + /*Configure GPIO pins : PD12 PD3 */ + GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /*Configure GPIO pin : PC7 */ + GPIO_InitStruct.Pin = GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + /*Configure GPIO pin : PC9 */ GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; @@ -119,6 +131,16 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Alternate = GPIO_AF0_MCO; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + /* EXTI interrupt init*/ + HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(EXTI3_IRQn); + + HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(EXTI9_5_IRQn); + + HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); + } /* USER CODE BEGIN 2 */ diff --git a/app/Core/Src/stm32f4xx_it.c b/app/Core/Src/stm32f4xx_it.c index 816c1b4..4b3d153 100644 --- a/app/Core/Src/stm32f4xx_it.c +++ b/app/Core/Src/stm32f4xx_it.c @@ -254,6 +254,7 @@ void CAN1_SCE_IRQHandler(void) /* USER CODE END CAN1_SCE_IRQn 1 */ } + /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/app/MDK-ARM/app.uvguix.h_zha b/app/MDK-ARM/app.uvguix.h_zha index 2660531..fda7856 100644 --- a/app/MDK-ARM/app.uvguix.h_zha +++ b/app/MDK-ARM/app.uvguix.h_zha @@ -90,8 +90,8 @@ 44 - 0 - 1 + 2 + 3 -1 -1 @@ -102,16 +102,16 @@ 14 - -1492 - -392 + 375 + 1475 1000 0 - 1862 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000C00000000000000010000005B443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C6C6962746D63696D706C2E637070000000000E6C6962746D63696D706C2E63707000000000C5D4F200FFFFFFFF70443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C6C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000296C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000FFDC7800FFFFFFFF70443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C6C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E68707000000000296C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E68707000000000BECEA100FFFFFFFF92443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C636F6D706F6E656E745C69666C79746F705F63616E5F736C6176655F76315C69666C79746F705F63616E5F736C6176652E687070000000001569666C79746F705F63616E5F736C6176652E68707000000000F0A0A100FFFFFFFF6F443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C7A7369676E616C2E687070000000000B7A7369676E616C2E68707000000000BCA8E100FFFFFFFF59443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C68617264776172652E687070000000000C68617264776172652E687070000000009CC1B600FFFFFFFF64443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C4D444B2D41524D5C737461727475705F73746D33326634303778782E730000000015737461727475705F73746D33326634303778782E7300000000F7B88600FFFFFFFF50443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C756D61696E2E6370700000000009756D61696E2E63707000000000D9ADC200FFFFFFFF59443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C68617264776172652E637070000000000C68617264776172652E63707000000000A5C2D700FFFFFFFF7D443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C69635C544D4334333631415C544D4334333631412E63000000000A544D4334333631412E6300000000B3A6BE00FFFFFFFF5E443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C436F72655C5372635C73746D3332663478785F69742E63000000000E73746D3332663478785F69742E6300000000EAD6A300FFFFFFFF62443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C6465766963655F696F5F736572766963652E63707000000000156465766963655F696F5F736572766963652E63707000000000F6FA7D00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000030FCFFFF7C00000070FEFFFFBC020000 + 2167 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000E0000000C000000010000005B443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C6C6962746D63696D706C2E637070000000000E6C6962746D63696D706C2E63707000000000C5D4F200FFFFFFFF70443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C6C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000296C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000FFDC7800FFFFFFFF70443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C6C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E68707000000000296C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E68707000000000BECEA100FFFFFFFF92443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C636F6D706F6E656E745C69666C79746F705F63616E5F736C6176655F76315C69666C79746F705F63616E5F736C6176652E687070000000001569666C79746F705F63616E5F736C6176652E68707000000000F0A0A100FFFFFFFF6F443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C7A7369676E616C2E687070000000000B7A7369676E616C2E68707000000000BCA8E100FFFFFFFF59443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C68617264776172652E687070000000000C68617264776172652E687070000000009CC1B600FFFFFFFF64443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C4D444B2D41524D5C737461727475705F73746D33326634303778782E730000000015737461727475705F73746D33326634303778782E7300000000F7B88600FFFFFFFF50443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C756D61696E2E6370700000000009756D61696E2E63707000000000D9ADC200FFFFFFFF59443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C68617264776172652E637070000000000C68617264776172652E63707000000000A5C2D700FFFFFFFF7D443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C69635C544D4334333631415C544D4334333631412E63000000000A544D4334333631412E6300000000B3A6BE00FFFFFFFF5E443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C436F72655C5372635C73746D3332663478785F69742E63000000000E73746D3332663478785F69742E6300000000EAD6A300FFFFFFFF62443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C6465766963655F696F5F736572766963652E63707000000000156465766963655F696F5F736572766963652E63707000000000F6FA7D00FFFFFFFF7D443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C73746D33325F68616C5F7265735F6D616E616765722E637070000000001973746D33325F68616C5F7265735F6D616E616765722E63707000000000B5E99D00FFFFFFFF62443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C66616E5F73746174655F6D6F6E69746F722E637070000000001566616E5F73746174655F6D6F6E69746F722E637070000000005FC3CF00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FC0100006600000090060000C6020000 @@ -150,7 +150,7 @@ 0 16 - 0300000066000000F501000076020000 + 0300000066000000F501000096020000 16 @@ -170,7 +170,7 @@ 0 16 - 0300000066000000F501000076020000 + 0300000066000000F501000096020000 16 @@ -450,7 +450,7 @@ 0 16 - 0300000066000000F501000076020000 + 0300000066000000F501000096020000 16 @@ -470,7 +470,7 @@ 0 16 - 0300000066000000F501000076020000 + 0300000066000000F501000096020000 16 @@ -490,7 +490,7 @@ 0 16 - 00000000A70200003C040000A0030000 + 00000000C702000090060000C0030000 16 @@ -530,7 +530,7 @@ 0 16 - 03000000AA0200003904000087030000 + 03000000CA02000039040000A7030000 16 @@ -1170,7 +1170,7 @@ 0 16 - 03000000AA0200003904000087030000 + 03000000CA02000039040000A7030000 16 @@ -1190,7 +1190,7 @@ 0 16 - 03000000AA0200003904000087030000 + 03000000CA02000039040000A7030000 16 @@ -1250,7 +1250,7 @@ 0 16 - 03000000AA0200003904000087030000 + 03000000CA02000039040000A7030000 16 @@ -1270,7 +1270,7 @@ 0 16 - 03000000AA0200003904000087030000 + 03000000CA02000039040000A7030000 16 @@ -1730,7 +1730,7 @@ 0 16 - 00000000A00300003C040000B3030000 + 00000000C003000090060000D3030000 16 @@ -1799,14 +1799,14 @@ 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFD6000000D9000000DC040000DD000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000000AFBFFFF7C00000010FFFFFF06010000D60000004F000000DC040000D90000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000013020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000003EFEFFFF7C00000010FFFFFF400200000A0400004F000000DC0400001302000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF80100004F000000FC0100008F0200000100000002000010040000000100000030FDFFFFB5030000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000034FAFFFF7C0000002CFCFFFFBC020000000000004F000000F80100008F0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000FF010000DC0400000302000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000034FAFFFF3002000010FFFFFFCE0200000000000003020000DC040000A102000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF6E0200000302000072020000A102000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000008F0200003C040000930200000100000001000010040000000100000030FDFFFF96000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000034FAFFFFC002000070FEFFFFCD03000000000000930200003C040000A00300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFD6000000D9000000DC040000DD000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000000AFBFFFF7C00000010FFFFFF06010000D60000004F000000DC040000D90000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000013020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000003EFEFFFF7C00000010FFFFFF400200000A0400004F000000DC0400001302000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF80100004F000000FC010000AF0200000100000002000010040000000100000030FDFFFFB5030000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000034FAFFFF7C0000002CFCFFFFBC020000000000004F000000F8010000AF0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000FF010000DC0400000302000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000034FAFFFF3002000010FFFFFFCE0200000000000003020000DC040000A102000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF6E0200000302000072020000A102000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000AF02000090060000B30200000100000001000010040000000100000030FDFFFF96000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000034FAFFFFC002000070FEFFFFCD03000000000000B302000090060000C00300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File 2537 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3603,12 +3603,12 @@ 0 100 - 0 + 12 ..\..\src\board\libtmcimpl.cpp - 23 + 8 1 - 23 + 2 1 0 @@ -3669,9 +3669,9 @@ ..\..\src\umain.cpp - 56 - 15 - 27 + 0 + 8 + 9 1 0 @@ -3705,9 +3705,27 @@ ..\..\src\board\device_io_service.cpp + 3 + 16 + 29 + 1 + + 0 + + + ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_res_manager.cpp + 14 + 265 + 297 + 1 + + 0 + + + ..\..\src\board\fan_state_monitor.cpp 0 - 126 - 153 + 1 + 21 1 0 diff --git a/app/app.ioc b/app/app.ioc index 93e9407..72110e7 100644 --- a/app/app.ioc +++ b/app/app.ioc @@ -43,30 +43,33 @@ Mcu.Name=STM32F407V(E-G)Tx Mcu.Package=LQFP100 Mcu.Pin0=PH0-OSC_IN Mcu.Pin1=PH1-OSC_OUT -Mcu.Pin10=PA10 -Mcu.Pin11=PA11 -Mcu.Pin12=PA12 -Mcu.Pin13=PA13 -Mcu.Pin14=PA14 -Mcu.Pin15=PB3 -Mcu.Pin16=PB6 -Mcu.Pin17=PB7 -Mcu.Pin18=VP_CRC_VS_CRC -Mcu.Pin19=VP_RNG_VS_RNG +Mcu.Pin10=PC9 +Mcu.Pin11=PA9 +Mcu.Pin12=PA10 +Mcu.Pin13=PA11 +Mcu.Pin14=PA12 +Mcu.Pin15=PA13 +Mcu.Pin16=PA14 +Mcu.Pin17=PD3 +Mcu.Pin18=PB3 +Mcu.Pin19=PB6 Mcu.Pin2=PA5 -Mcu.Pin20=VP_SYS_VS_Systick -Mcu.Pin21=VP_TIM1_VS_ClockSourceINT -Mcu.Pin22=VP_TIM3_VS_ClockSourceINT -Mcu.Pin23=VP_TIM6_VS_ClockSourceINT -Mcu.Pin24=VP_TIM7_VS_ClockSourceINT +Mcu.Pin20=PB7 +Mcu.Pin21=VP_CRC_VS_CRC +Mcu.Pin22=VP_RNG_VS_RNG +Mcu.Pin23=VP_SYS_VS_Systick +Mcu.Pin24=VP_TIM1_VS_ClockSourceINT +Mcu.Pin25=VP_TIM3_VS_ClockSourceINT +Mcu.Pin26=VP_TIM6_VS_ClockSourceINT +Mcu.Pin27=VP_TIM7_VS_ClockSourceINT Mcu.Pin3=PA6 Mcu.Pin4=PA7 Mcu.Pin5=PE9 -Mcu.Pin6=PD14 -Mcu.Pin7=PC8 -Mcu.Pin8=PC9 -Mcu.Pin9=PA9 -Mcu.PinsNb=25 +Mcu.Pin6=PD12 +Mcu.Pin7=PD14 +Mcu.Pin8=PC7 +Mcu.Pin9=PC8 +Mcu.PinsNb=28 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F407VETx @@ -78,6 +81,9 @@ NVIC.CAN1_RX1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.CAN1_SCE_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.CAN1_TX_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.EXTI15_10_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.EXTI3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.EXTI9_5_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.ForceEnableDMAVector=true NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false @@ -118,13 +124,19 @@ PB6.Signal=I2C1_SCL PB7.Locked=true PB7.Mode=I2C PB7.Signal=I2C1_SDA +PC7.Locked=true +PC7.Signal=GPXTI7 PC8.Locked=true PC8.Signal=S_TIM8_CH3 PC9.Locked=true PC9.Mode=Clock-out-2 PC9.Signal=RCC_MCO_2 +PD12.Locked=true +PD12.Signal=GPXTI12 PD14.Locked=true PD14.Signal=S_TIM4_CH3 +PD3.Locked=true +PD3.Signal=GPXTI3 PE9.GPIOParameters=GPIO_ModeDefaultPP,GPIO_PuPd PE9.GPIO_ModeDefaultPP=GPIO_MODE_AF_PP PE9.GPIO_PuPd=GPIO_PULLDOWN @@ -203,6 +215,12 @@ RCC.VCOI2SOutputFreq_Value=128000000 RCC.VCOInputFreq_Value=2000000 RCC.VCOOutputFreq_Value=288000000 RCC.VcooutputI2S=64000000 +SH.GPXTI12.0=GPIO_EXTI12 +SH.GPXTI12.ConfNb=1 +SH.GPXTI3.0=GPIO_EXTI3 +SH.GPXTI3.ConfNb=1 +SH.GPXTI7.0=GPIO_EXTI7 +SH.GPXTI7.ConfNb=1 SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1 SH.S_TIM1_CH1.ConfNb=1 SH.S_TIM2_CH2.0=TIM2_CH2,PWM Generation2 CH2 diff --git a/dep/libiflytop_micro b/dep/libiflytop_micro index bb1b993..160fa66 160000 --- a/dep/libiflytop_micro +++ b/dep/libiflytop_micro @@ -1 +1 @@ -Subproject commit bb1b993c2015abe36525a7876b17f076665433b4 +Subproject commit 160fa668ad40f8abac72d2634ee54fa4f3ad9188 diff --git a/dep/libtrinamic b/dep/libtrinamic index 0280741..d438155 160000 --- a/dep/libtrinamic +++ b/dep/libtrinamic @@ -1 +1 @@ -Subproject commit 02807418568c7fdb1bee192424af3ad274b06269 +Subproject commit d4381558b25522ebd43c86d125f8177d38c578e3 diff --git a/src/board/device_io_service.cpp b/src/board/device_io_service.cpp index ea59b8a..e19efe2 100644 --- a/src/board/device_io_service.cpp +++ b/src/board/device_io_service.cpp @@ -1,6 +1,8 @@ #include "device_io_service.hpp" #include "libiflytop_micro/stm32/basic/stm32_hal_utils.hpp" +#include "libiflytop_micro\stm32\basic\stm32_hal_res_manager.hpp" +#include "project_board.hpp" #define TAG "DEVICE_IO_SERVICE" extern "C" { int fputc(int ch, FILE *stream) { @@ -12,21 +14,36 @@ int fputc(int ch, FILE *stream) { using namespace iflytop; namespace iflytop {} +void DeviceIoService::initialize() { // + // STM32_HAL.connect(this, &DeviceIoService::onGPIO_EXTI_Callback); +} + +void DeviceIoService::onGPIO_EXTI_Callback(uint16_t gpioNum) { + /** + * @brief 赋予盘零位光电触发 + */ + if (gpioNum == TMC_HOME_REF_GPIO_PIN) { + if (STM32_HAL_GPIO_IS_THIS_PIN_TRIGGER_IRQ(TMC_HOME_REF_GPIO)) { + onHomeRefSwitch.trigger(); + } + } +} + void DeviceIoService::debug_light_init() { - Stm32HalUtils::gpioInit(DEBUG_LIGHT_PORT, DEBUG_LIGHT_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET); + STM32_HAL.gpioInit(DEBUG_LIGHT_PORT, DEBUG_LIGHT_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET); } void DeviceIoService::fanInit(int freq) { - Stm32HalUtils::setPWMFreq(&htim2, freq); // fan0->fan3 - Stm32HalUtils::setPWMFreq(&htim4, freq); // fan4 - Stm32HalUtils::setPWMFreq(&htim8, freq); // fan5 + STM32_HAL.setPWMFreq(&htim2, freq); // fan0->fan3 + STM32_HAL.setPWMFreq(&htim4, freq); // fan4 + STM32_HAL.setPWMFreq(&htim8, freq); // fan5 // fan0 fan1 fan2 fan3 - Stm32HalUtils::gpioInit(GPIOC, GPIO_PIN_0, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET); + STM32_HAL.gpioInit(GPIOC, GPIO_PIN_0, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET); // fan4 - Stm32HalUtils::gpioInit(GPIOC, GPIO_PIN_2, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET); + STM32_HAL.gpioInit(GPIOC, GPIO_PIN_2, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET); // fan5 - Stm32HalUtils::gpioInit(GPIOC, GPIO_PIN_3, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET); + STM32_HAL.gpioInit(GPIOC, GPIO_PIN_3, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET); } void DeviceIoService::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) { @@ -37,7 +54,7 @@ void DeviceIoService::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) { } if (fanIndex <= 3) { - Stm32HalUtils::setPWMDuty(&htim2, TIM_CHANNEL_2, dutyCycle); + STM32_HAL.setPWMDuty(&htim2, TIM_CHANNEL_2, dutyCycle); m_fanState[0] = dutyCycle > 0; m_fanState[1] = dutyCycle > 0; m_fanState[2] = dutyCycle > 0; @@ -50,7 +67,7 @@ void DeviceIoService::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) { } } else if (fanIndex == 4) { - Stm32HalUtils::setPWMDuty(&htim4, TIM_CHANNEL_3, dutyCycle); + STM32_HAL.setPWMDuty(&htim4, TIM_CHANNEL_3, dutyCycle); m_fanState[4] = dutyCycle > 0; if (dutyCycle > 0) { @@ -59,7 +76,7 @@ void DeviceIoService::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET); } } else if (fanIndex == 5) { - Stm32HalUtils::setPWMDuty(&htim8, TIM_CHANNEL_3, dutyCycle); + STM32_HAL.setPWMDuty(&htim8, TIM_CHANNEL_3, dutyCycle); m_fanState[5] = dutyCycle > 0; if (dutyCycle > 0) { @@ -94,8 +111,8 @@ void DeviceIoService::peltier_hot_ctr_pwm(int pwm) { HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3); } void DeviceIoService::peltier_init() { // - Stm32HalUtils::gpioInit(GPIOB, GPIO_PIN_1, GPIO_MODE_AF_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET); - Stm32HalUtils::gpioInit(GPIOE, GPIO_PIN_10, GPIO_MODE_AF_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET); + STM32_HAL.gpioInit(GPIOB, GPIO_PIN_1, GPIO_MODE_AF_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET); + STM32_HAL.gpioInit(GPIOE, GPIO_PIN_10, GPIO_MODE_AF_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET); } void DeviceIoService::peltier_set_pwm(int pwm) { /** @@ -139,11 +156,11 @@ void DeviceIoService::peltier_set_pwm(int pwm) { * tmc芯片驱动相关 * *******************************************************************************/ void DeviceIoService::tmc_init() { - Stm32HalUtils::gpioInit( // + STM32_HAL.gpioInit( // GPIOA, GPIO_PIN_4, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET); - Stm32HalUtils::gpioInit( // + STM32_HAL.gpioInit( // GPIOE, GPIO_PIN_12, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET); - Stm32HalUtils::gpioInit( // + STM32_HAL.gpioInit( // GPIOE, GPIO_PIN_11, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET); } @@ -176,3 +193,7 @@ void DeviceIoService::tmc_subic_ENN_pin_set_state(uint8_t channel, bool state) { } } void DeviceIoService::tmc_nRESET_pin_set_state(uint8_t channel, bool state) {} + +void DeviceIoService::home_ref_switch_init() { // + STM32_HAL.gpioInitAsEXIT(TMC_HOME_REF_GPIO_PORT, TMC_HOME_REF_GPIO_PIN, GPIO_NOPULL, TMC_HOME_REF_GPIO_IRQ_MODE); +} diff --git a/src/board/device_io_service.hpp b/src/board/device_io_service.hpp index c638ba5..765272f 100644 --- a/src/board/device_io_service.hpp +++ b/src/board/device_io_service.hpp @@ -2,12 +2,13 @@ #include #include +#include "board/project_board.hpp" #include "libiflytop_micro/stm32/basic/basic.h" #include "libiflytop_micro\stm32\basic\iflytop_micro_os.hpp" +#include "libiflytop_micro\stm32\basic\stm32_hal_res_manager.hpp" #include "libtrinamic/src/ic/tmc2160.hpp" #include "libtrinamic\src\ic\tmc4361A.hpp" #include "main.h" -#include "project_board.hpp" #include "spi.h" #include "tim.h" #include "usart.h" @@ -18,13 +19,15 @@ using namespace std; class DeviceIoService : public IflytopMicroOS { private: /* data */ - bool m_fanState[6]; + ZSLOT1(DeviceIoService, onGPIO_EXTI_Callback, uint16_t); // GPIO中断回调 public: DeviceIoService(/* args */) {} ~DeviceIoService() {} + void initialize(); + /******************************************************************************* * 调试指示灯初始化 * *******************************************************************************/ @@ -56,6 +59,9 @@ class DeviceIoService : public IflytopMicroOS { void tmc_subic_ENN_pin_set_state(uint8_t channel, bool state); void tmc_nRESET_pin_set_state(uint8_t channel, bool state); + ZSignal0 onHomeRefSwitch; + void home_ref_switch_init(); + /******************************************************************************* * OVERRIDE IflytopMicroOS * *******************************************************************************/ diff --git a/src/board/fan_state_monitor.cpp b/src/board/fan_state_monitor.cpp index efe9761..33b2a5d 100644 --- a/src/board/fan_state_monitor.cpp +++ b/src/board/fan_state_monitor.cpp @@ -1,7 +1,7 @@ #include "fan_state_monitor.hpp" #include "libiflytop_micro/stm32/basic/basic.h" -#include "libiflytop_micro\stm32\basic\stm32_hal_utils.hpp" +#include "libiflytop_micro\stm32\basic/stm32_hal_res_manager.hpp" using namespace iflytop; @@ -18,7 +18,7 @@ void FanStateMonitor::initialize(IflytopMicroOS* os, GPIO_TypeDef* FB_GPIOx, uin m_lastFanState = false; m_fanError = false; - Stm32HalUtils::gpioInitAsInput(FB_GPIOx, FB_GPIO_Pin); + STM32_HAL.gpioInitAsInput(FB_GPIOx, FB_GPIO_Pin); m_lastPinState = HAL_GPIO_ReadPin(m_FB_GPIOx, m_FB_GPIO_Pin); } void FanStateMonitor::doFanStateCheckPeriodicJob() { diff --git a/src/board/hardware.cpp b/src/board/hardware.cpp index 2fce8f4..63a00ed 100644 --- a/src/board/hardware.cpp +++ b/src/board/hardware.cpp @@ -30,6 +30,7 @@ void Hardware::hardwareinit() { IflytopCanSlave::iflytop_can_slave_config_t *config = canSlaveService.createDefaultConfig(DEVICE_ID); canSlaveService.initialize(m_os, config); canSlaveService.activateRxIT(); + canSlaveService.registerListener(this); #endif /******************************************************************************* * 帕尔贴初始化 * @@ -54,13 +55,13 @@ void Hardware::hardwareinit() { m_deviceIoService.tmc_init(); m_deviceIoService.tmc_extern_clk_enable(); // 4361初始化 - TMC4361AImpl::TMC4361AConfig_t *tmc4361aconfig = TMC4361AImpl::createDeafultTMC4361AConfig(); + TMC4361A::TMC4361AConfig_t *tmc4361aconfig = TMC4361A::createDeafultTMC4361AConfig(this); tmc4361aconfig->encoder_config.diff_enc_in_disable = false; tmc4361aconfig->encoder_config.invert_enc_dir = true; // 如果编码器方向和期望方向相反,设置为true tmc4361aconfig->encoder_config.enc_in_res = 4000; tmc4361aconfig->close_loop_config.enable_closed_loop = false; - tmc4361motor1.initialize(&m_deviceIoService, MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160, tmc4361aconfig); + tmc4361motor1.initialize(MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160, tmc4361aconfig); tmc4361motor1.setMaximumAcceleration(300000); tmc4361motor1.setMaximumDeceleration(300000); @@ -183,3 +184,10 @@ void Hardware::testCanSlaveTxAndRx() { // canSlaveService.activateRxIT(); } } +void Hardware::TMC4361APort_setResetPinState(uint16_t channel, bool state) { m_deviceIoService.tmc_nRESET_pin_set_state(channel, state); } +void Hardware::TMC4361APort_setFREEZEPinState(uint16_t channel, bool state) { m_deviceIoService.tmc_nFREEZE_pin_set_state(channel, state); } +void Hardware::TMC4361APort_setENNPinState(uint16_t channel, bool state) { m_deviceIoService.tmc_ENN_pin_set_state(channel, state); } +bool Hardware::TMC4361APort_getTargetReachedPinState(uint16_t channel) { return false; } +void Hardware::TMC4361APort_sleepus(int32_t us) { m_os->sleepus(us); } +void Hardware::TMC4361APort_readWriteArray(uint8_t *data, size_t length) { m_deviceIoService.tmc_motor_spi_write_and_read(0, data, length); } +void Hardware::TMC4361APort_setSubICENNPinState(uint16_t channel, bool state) { m_deviceIoService.tmc_subic_ENN_pin_set_state(channel, state); } diff --git a/src/board/hardware.hpp b/src/board/hardware.hpp index 1e51920..137fd8d 100644 --- a/src/board/hardware.hpp +++ b/src/board/hardware.hpp @@ -7,12 +7,12 @@ #include "libiflytop_micro\stm32\component\tmp117\tmp117.hpp" namespace iflytop { -class Hardware { +class Hardware : public IflytopCanSlaveListener, public TMC4361APort { private: /* data */ public: - TMC4361AImpl tmc4361motor1; + TMC4361A tmc4361motor1; TMP117 tmp117[4]; FanStateMonitor m_fanStateMonitor[6]; IflytopCanSlave canSlaveService; @@ -22,11 +22,15 @@ class Hardware { bool m_canOnRxDataFlag; public: - ZSLOT0(Hardware, onCanRxData) { + /******************************************************************************* + * ListenerImpl * + *******************************************************************************/ + virtual void OnIflytopCanSlaveOnCanRxData() { m_canOnRxDataFlag = true; canSlaveService.deactivateRxIT(); } + public: Hardware(/* args */){}; ~Hardware(){}; @@ -41,6 +45,20 @@ class Hardware { void testTmp117(); void testCanSlaveTxAndRx(); void do_debug_light_state(); + + public: + /******************************************************************************* + * TMC4361APort * + *******************************************************************************/ + virtual void TMC4361APort_setResetPinState(uint16_t channel, bool state); + virtual void TMC4361APort_setFREEZEPinState(uint16_t channel, bool state); + virtual void TMC4361APort_setENNPinState(uint16_t channel, bool state); + virtual bool TMC4361APort_getTargetReachedPinState(uint16_t channel); + virtual void TMC4361APort_sleepus(int32_t us); + virtual void TMC4361APort_readWriteArray(uint8_t *data, size_t length); + virtual void TMC4361APort_setSubICENNPinState(uint16_t channel, bool state); + + public: }; } // namespace iflytop diff --git a/src/board/libtmcimpl.cpp b/src/board/libtmcimpl.cpp index f00f343..54d7dba 100644 --- a/src/board/libtmcimpl.cpp +++ b/src/board/libtmcimpl.cpp @@ -2,22 +2,3 @@ #include "libtmcimpl.hpp" #include "device_io_service.hpp" -namespace iflytop { -using namespace std; -/******************************************************************************* - * TMC4361AImpl * - *******************************************************************************/ -void TMC4361AImpl::setResetPinState(bool state) { m_deviceIoService->tmc_nRESET_pin_set_state(m_channel, state); }; -void TMC4361AImpl::setFREEZEPinState(bool state) { m_deviceIoService->tmc_nFREEZE_pin_set_state(m_channel, state); }; -void TMC4361AImpl::setENNPinState(bool state) { m_deviceIoService->tmc_ENN_pin_set_state(m_channel, state); }; -void TMC4361AImpl::setSubICENNPinState(bool state) { m_deviceIoService->tmc_subic_ENN_pin_set_state(m_channel, state); } -bool TMC4361AImpl::getTargetReachedPinState() { return false; }; -void TMC4361AImpl::sleepus(int32_t us) { m_deviceIoService->sleepus(us); }; -void TMC4361AImpl::readWriteArray(uint8_t *data, size_t length) { // - m_deviceIoService->tmc_motor_spi_write_and_read(m_channel, data, length); -}; -void TMC4361AImpl::initialize(DeviceIoService *deviceIoService, uint8_t channel, driver_ic_type_t driver_ic_type, TMC4361AConfig_t *config) { - m_deviceIoService = deviceIoService; - TMC4361A::initialize(channel, driver_ic_type, config); -} -} // namespace iflytop \ No newline at end of file diff --git a/src/board/libtmcimpl.hpp b/src/board/libtmcimpl.hpp index f0ad986..9285198 100644 --- a/src/board/libtmcimpl.hpp +++ b/src/board/libtmcimpl.hpp @@ -4,24 +4,3 @@ #include "libiflytop_micro/stm32/basic/basic.h" #include "libtrinamic/src/ic/tmc2160.hpp" #include "libtrinamic\src\ic\tmc4361A.hpp" -namespace iflytop { -using namespace std; -/** - * @brief 对接TMC4361和硬件的接口 - */ -class TMC4361AImpl : public TMC4361A { - DeviceIoService *m_deviceIoService; - - protected: - virtual void setResetPinState(bool state); - virtual void setFREEZEPinState(bool state); - virtual void setENNPinState(bool state); - virtual bool getTargetReachedPinState(); - virtual void sleepus(int32_t us); - virtual void readWriteArray(uint8_t *data, size_t length); - virtual void setSubICENNPinState(bool state); - - public: - void initialize(DeviceIoService *deviceIoService, uint8_t channel, driver_ic_type_t driver_ic_type, TMC4361AConfig_t *config); -}; -} // namespace iflytop \ No newline at end of file diff --git a/src/board/project_board.hpp b/src/board/project_board.hpp new file mode 100644 index 0000000..4ffdd15 --- /dev/null +++ b/src/board/project_board.hpp @@ -0,0 +1,25 @@ +#pragma once + +#define VERSION "v1.0" +// 设备ID +#define DEVICE_ID 0x02 +// 调试串口 +#define DEBUG_UART huart1 +// 调试指示灯 +#define DEBUG_LIGHT_PORT GPIOE +#define DEBUG_LIGHT_PIN GPIO_PIN_8 +// 微秒延迟定时器,注意该延时定时器需要按照以下文档进行配置 +// http://192.168.1.3:3000/zwikipedia/iflytop_wikipedia/src/branch/master/doc/stm32cubemx_us_timer.md +#define DELAY_US_TIMER htim6 + +// + +/******************************************************************************* + * TMC * + *******************************************************************************/ +// 电机通道编号 +#define MOTOR_1_TMC4361A_CHANNEL 1 + +#define TMC_HOME_REF_GPIO_PIN GPIO_PIN_3 +#define TMC_HOME_REF_GPIO_PORT GPIOD +#define TMC_HOME_REF_GPIO_IRQ_MODE GPIO_MODE_IT_RISING \ No newline at end of file diff --git a/src/lncubator_rotating_control_service.cpp b/src/lncubator_rotating_control_service.cpp index d539a3d..b7c51a8 100644 --- a/src/lncubator_rotating_control_service.cpp +++ b/src/lncubator_rotating_control_service.cpp @@ -1,6 +1,7 @@ #include "lncubator_rotating_control_service.hpp" using namespace iflytop; +#define TAG "LRCS" const uint32_t LncubatorRotatingControlService::mc_onecircle_ustep_num = (256 * 200 * 50); const uint32_t LncubatorRotatingControlService::mc_default_velocity = 500000; // 500k @@ -30,15 +31,39 @@ void LncubatorRotatingControlService::initialize(Hardware* hardware) { // * @brief 电机必须工作在位置模式 */ m_motor->setMotorInPositionMode(); + hardware->m_deviceIoService.onHomeRefSwitch.connect(this, onHomeSwitchKey); } void LncubatorRotatingControlService::moveToHome() { m_dowhat = krotateToHome; m_motor->moveTo(mc_onecircle_ustep_num * 2, m_maxVelocity); } - +void LncubatorRotatingControlService::onHomeSwitchKey() { + /** + * @brief 电机零点光电触发 + */ + m_homeKeyTriggered = true; +} void LncubatorRotatingControlService::setVelocity(uint32_t velocityMax) { m_maxVelocity = velocityMax; } void LncubatorRotatingControlService::rotate(uint32_t count) { m_motor->moveBy(count, m_maxVelocity); } void LncubatorRotatingControlService::periodicJob() { - if (krotateToHome) { + if (krotateToHome == m_dowhat) { + doRotateToHomeJob(); } } + +void LncubatorRotatingControlService::doRotateToHomeJob() { + if (m_homeKeyTriggered) { + m_homeKeyTriggered = false; + /** + * @brief 零点光电触发,记录零点位置 + */ + m_homePosition = m_motor->getENC_POS(); + m_motor->stop(); + m_dowhat = kidle; + ZLOGI(TAG, "home position:%d", m_homePosition); + } +} + +void LncubatorRotatingControlService::registerListener(LncubatorRotatingControlServiceListener* listener) { // + m_listener = listener; +} diff --git a/src/lncubator_rotating_control_service.hpp b/src/lncubator_rotating_control_service.hpp index 27f644b..a8edbb1 100644 --- a/src/lncubator_rotating_control_service.hpp +++ b/src/lncubator_rotating_control_service.hpp @@ -1,5 +1,8 @@ #pragma once #include "board\hardware.hpp" +#include "libiflytop_micro\stm32\basic\stm32_hal_res_manager.hpp" +#include "libiflytop_micro\stm32\component\state_machine\state_machine.hpp" + namespace iflytop { /** * @brief @@ -14,11 +17,19 @@ namespace iflytop { * 7. 读取校准值 * 8. 写入校准值 * + * + * */ #define LNCUBATOR_MAX_POSITION_COUNT 20 #define ZEROOFFSETCORRECTION 0 +class LncubatorRotatingControlServiceListener { + public: + virtual void OnlncubatorRotatingControlServiceException() = 0; + virtual void OnlncubatorRotatingControlServiceJobFinished() = 0; +}; + class LncubatorRotatingControlService { public: typedef enum { @@ -35,23 +46,26 @@ class LncubatorRotatingControlService { kidle, krotateToTarget, krotateToHome, + kspeedMode, } dowhat_t; /* data */ Hardware* m_hardware; IflytopMicroOS* m_os; - TMC4361AImpl* m_motor; + TMC4361A* m_motor; dowhat_t m_dowhat; // 零点位置 uint32_t m_homePosition; // 便宜修正,第一个仓位中心距离零点的距离 uint32_t m_homeOffsetCorrection; - uint32_t m_maxVelocity = 0; + bool m_workfinished; + bool m_homeKeyTriggered; - bool m_workfinished; + LncubatorRotatingControlServiceListener* m_listener; - bool homeKeyTriggered; + private: + ZSLOT0(LncubatorRotatingControlService, onHomeSwitchKey); public: LncubatorRotatingControlService(); @@ -61,6 +75,8 @@ class LncubatorRotatingControlService { void setVelocity(uint32_t velocityMax); void rotate(uint32_t count); + void registerListener(LncubatorRotatingControlServiceListener* listener); + void moveToHome(); void moveTo(refpoint_t refpoint, uint32_t positionIndex); void stop(); @@ -74,5 +90,8 @@ class LncubatorRotatingControlService { void calibrationPosition(refpoint_t refpoint, uint32_t positionIndex); void periodicJob(); + + private: + void doRotateToHomeJob(); }; } // namespace iflytop diff --git a/src/project_board.hpp b/src/project_board.hpp deleted file mode 100644 index 9dd8c82..0000000 --- a/src/project_board.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#define VERSION "v1.0" -// 设备ID -#define DEVICE_ID 0x02 - -// 调试串口 -#define DEBUG_UART huart1 - -// 调试指示灯 -#define DEBUG_LIGHT_PORT GPIOE -#define DEBUG_LIGHT_PIN GPIO_PIN_8 - -// 微秒延迟定时器,注意该延时定时器需要按照以下文档进行配置 -// http://192.168.1.3:3000/zwikipedia/iflytop_wikipedia/src/branch/master/doc/stm32cubemx_us_timer.md -#define DELAY_US_TIMER htim6 - -// 电机编号 -#define MOTOR_1_TMC4361A_CHANNEL 1 -#define MOTOR_1_TMC2160_CHANNEL 2 - -// \ No newline at end of file diff --git a/src/umain.cpp b/src/umain.cpp index 52cc320..e17373a 100644 --- a/src/umain.cpp +++ b/src/umain.cpp @@ -3,10 +3,10 @@ #include "board/device_io_service.hpp" #include "board/libtmcimpl.hpp" +#include "board/project_board.hpp" #include "libiflytop_micro\stm32\basic\basic.h" #include "libtrinamic/src/ic/tmc2160.hpp" #include "libtrinamic\src\ic\tmc4361A.hpp" -#include "project_board.hpp" // #include "board/hardware.hpp" #include "i2c.h" @@ -36,7 +36,7 @@ class Main { void Main::initialize() { zsignal_init(zsignal_listener, ZARRAY_SIZE(zsignal_listener)); - m_hardware.hardwareinit(); + m_hardware.hardwareinit(); // canSlaveService = &m_hardware.canSlaveService; }