diff --git a/doc/stm32f407ve.pdf b/doc/stm32f407ve.pdf new file mode 100644 index 0000000..75df452 Binary files /dev/null and b/doc/stm32f407ve.pdf differ diff --git a/stm32basic b/stm32basic index ea11d9f..7fb0eb2 160000 --- a/stm32basic +++ b/stm32basic @@ -1 +1 @@ -Subproject commit ea11d9f77beed2bf8145bbe490283c0830fa8a77 +Subproject commit 7fb0eb24a401679b66c7b4b7c3cf6c379635137c diff --git a/uappbase/appcfg/appcfg.hpp b/uappbase/appcfg/appcfg.hpp index 3c6bd0b..abd525b 100644 --- a/uappbase/appcfg/appcfg.hpp +++ b/uappbase/appcfg/appcfg.hpp @@ -3,24 +3,67 @@ #define MAX_USR_NAME_SIZE 10 -#define MOTO_POWER_EN_IO PC2 -#define MOTO4_CSN_IO PB3 -#define MOTO3_CSN_IO PB4 -#define MOTO2_CSN_IO PB5 -#define MOTO1_CSN_IO PB6 -#define MOTO4_DRV_ENN_IO PD0 -#define MOTO3_DRV_ENN_IO PD1 -#define MOTO2_DRV_ENN_IO PD2 -#define MOTO1_DRV_ENN_IO PD3 -#define ID1_IO PE0 -#define ID2_IO PE1 -#define ID3_IO PD7 -#define ID4_IO PD9 -#define ID5_IO PD8 -#define IO_OUT1_IO PC0 -#define IO_OUT2_IO PC1 - -#define MOTOR_SPI_INS hspi1 +/*********************************************************************************************************************** + * 调试指示灯 * + ***********************************************************************************************************************/ +#define DEBUG_LIGHT_IO PE2 + +#define DEBUG_UART_INDEX 1 +#define DEBUG_UART_INS huart1 +#define DEBUG_UART_BAUDRATE 460800 +#define DEBUG_TX_PIN PA9 +#define DEBUG_RX_PIN PA10 +/*********************************************************************************************************************** + * ID配置 * + ***********************************************************************************************************************/ +#define ID0_IO PE1 +#define ID1_IO PE3 +#define ID2_IO PE4 +#define ID3_IO PE5 +#define ID4_IO PE6 + +/*********************************************************************************************************************** + * 驱动器引脚配置 * + ***********************************************************************************************************************/ +// SPI +#define MOTOR_SPI_INS hspi1 +#define MOTOR_SPI_INDEX 1 +#define MOTOR_SPI_SCK PA5 +#define MOTOR_SPI_SDO PA6 +#define MOTOR_SPI_SDI PA7 +// POWER EN +#define MOTO_POWER_EN_IO PE7 +// CSN +#define MOTO1_CSN_IO PB8 +#define MOTO2_CSN_IO PB9 +#define MOTO3_CSN_IO PB10 +#define MOTO4_CSN_IO PB11 +// ENN +#define MOTO1_DRV_ENN_IO PD12 +#define MOTO2_DRV_ENN_IO PD13 +#define MOTO3_DRV_ENN_IO PD14 +#define MOTO4_DRV_ENN_IO PD15 +// REF +#define MOTOR1_REF_L_IO PD6 +#define MOTOR1_REF_R_IO PD7 +#define MOTOR2_REF_L_IO PD10 +#define MOTOR2_REF_R_IO PD11 +#define MOTOR3_REF_L_IO PD12 +#define MOTOR3_REF_R_IO PD13 +#define MOTOR4_REF_L_IO PD14 +#define MOTOR4_REF_R_IO PD15 + +#define IO_OUT1_IO PC0 +#define IO_OUT2_IO PC1 + +/*********************************************************************************************************************** + * BLE_REMOTER * + ***********************************************************************************************************************/ + +// PE6 + +#define BLE_CONNECTED_STATE_IO PE6 + /*********************************************************************************************************************** * MOTOR_CFG * ***********************************************************************************************************************/ @@ -38,6 +81,15 @@ #define PUMP_TEST_RPM 500 // 泵机测试时转速 /*********************************************************************************************************************** + * TJC * + ***********************************************************************************************************************/ + +#define TJC_UART_CH_SEL_PIN PB12 +#define TJC_UART_CH_EN_PIN PB13 + + + +/*********************************************************************************************************************** * 配置默认数值 * ***********************************************************************************************************************/ #define USER0_DEFAULT_NAME "管理员" diff --git a/uappbase/apphal/apphal.cpp b/uappbase/apphal/apphal.cpp index 23832b5..097b759 100644 --- a/uappbase/apphal/apphal.cpp +++ b/uappbase/apphal/apphal.cpp @@ -1,4 +1,6 @@ #include "apphal.hpp" + +#include "uappbase\appcfg\appcfg.hpp" using namespace iflytop; void AppHal::MX_TIM6_Init(void) { @@ -54,24 +56,30 @@ void AppHal::MX_TIM7_Init(void) { } void AppHal::DEBUG_UART_INIT(Pin_t tx, Pin_t rx, int32_t baudrate) { +#if (DEBUG_UART_INDEX == 1) GPIO_InitTypeDef GPIO_InitStruct = {0}; - EARLY_ASSERT(PA9 == tx); - EARLY_ASSERT(PA10 == rx); - - /*********************************************************************************************************************** - * IO鍒濆?嬪寲 * - ***********************************************************************************************************************/ __HAL_RCC_USART1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_DMA2_CLK_ENABLE(); - GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF7_USART1; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + if (tx == PA9 && rx == PA10) { + GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + } else if (tx == PB6 && rx == PB7) { + GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + } else { + EARLY_ASSERT(false); + } huart1.Instance = USART1; huart1.Init.BaudRate = baudrate; @@ -85,9 +93,6 @@ void AppHal::DEBUG_UART_INIT(Pin_t tx, Pin_t rx, int32_t baudrate) { Error_Handler(); } - /*********************************************************************************************************************** - * DMA鍒濆?嬪寲 * - ***********************************************************************************************************************/ HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 0); HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn); hdma2_stream2.Instance = DMA2_Stream2; @@ -107,6 +112,10 @@ void AppHal::DEBUG_UART_INIT(Pin_t tx, Pin_t rx, int32_t baudrate) { __HAL_LINKDMA(&huart1, hdmarx, hdma2_stream2); HAL_NVIC_SetPriority(USART1_IRQn, 5, 0); HAL_NVIC_EnableIRQ(USART1_IRQn); + +#else +#error "DEBUG_UART_INDEX not supported" +#endif } void AppHal::MX_IWDG_Init(void) { @@ -291,12 +300,13 @@ void AppHal::MX_I2C1_Init(void) { GPIO_InitStruct.Alternate = GPIO_AF4_I2C1; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } -void AppHal::MX_HSPI1_Init() { +void AppHal::tmc_spi_init() { +#if (MOTOR_SPI_INDEX == 1) + __HAL_RCC_SPI1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); - // static_assert(MOTOR_SPI == SPI1); - // static_assert(&MOTOR_SPI_INS == &hspi1); + static_assert(&MOTOR_SPI_INS == &hspi1); hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; @@ -314,9 +324,9 @@ void AppHal::MX_HSPI1_Init() { Error_Handler(); } - // static_assert(MOTOR_SPI_SCK == PA5); - // static_assert(MOTOR_SPI_SDO == PA6); - // static_assert(MOTOR_SPI_SDI == PA7); + static_assert(MOTOR_SPI_SCK == PA5); + static_assert(MOTOR_SPI_SDO == PA6); + static_assert(MOTOR_SPI_SDI == PA7); GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; @@ -325,4 +335,8 @@ void AppHal::MX_HSPI1_Init() { GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + +#else +#error "MOTOR_SPI_INDEX not supported" +#endif } diff --git a/uappbase/apphal/apphal.hpp b/uappbase/apphal/apphal.hpp index f789e55..935c0f7 100644 --- a/uappbase/apphal/apphal.hpp +++ b/uappbase/apphal/apphal.hpp @@ -14,7 +14,7 @@ class AppHal { static void UART4_Init(); static void MX_I2C1_Init(void) ; - static void MX_HSPI1_Init(); + static void tmc_spi_init(); }; diff --git a/ucomponents/zcan/zcan.cpp b/ucomponents/zcan/zcan.cpp index a128c6b..08b3832 100644 --- a/ucomponents/zcan/zcan.cpp +++ b/ucomponents/zcan/zcan.cpp @@ -124,7 +124,7 @@ HAL_StatusTypeDef ZCAN1::activateRxIT() { return hal_status; } -void ZCAN1::init() { +void ZCAN1::zcaninit() { if (inited) return; inited = true; diff --git a/ucomponents/zcan/zcan.hpp b/ucomponents/zcan/zcan.hpp index 22fc6fe..cd9bead 100644 --- a/ucomponents/zcan/zcan.hpp +++ b/ucomponents/zcan/zcan.hpp @@ -31,7 +31,7 @@ class ZCAN1 { return &instance; } - void init(); + void zcaninit(); bool txMsg(const uint32_t extid, const uint8_t txdata[], uint32_t txdatalen, int32_t overtime); bool txMsgNoError(const uint32_t extid, const uint8_t txdata[], uint32_t txdatalen, int32_t overtime); bool getRxMsg(zcanrx_t *rx); diff --git a/usrc/apphardware/apphardware.cpp b/usrc/apphardware/apphardware.cpp index 883f588..f746091 100644 --- a/usrc/apphardware/apphardware.cpp +++ b/usrc/apphardware/apphardware.cpp @@ -3,13 +3,21 @@ using namespace iflytop; #define TAG "AppHardware" +void AppHardware::setTJCScreenInDownloadMode() { + TJC_UART_CH_SEL_PIN.setState(true); + TJC_UART_CH_EN_PIN.setState(false); +} + void AppHardware::initialize() { AppHal::UART3_Init(); AppHal::UART4_Init(); AppHal::MX_I2C1_Init(); - AppHal::MX_HSPI1_Init(); + AppHal::tmc_spi_init(); + + TJC_UART_CH_SEL_PIN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, false); + TJC_UART_CH_EN_PIN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, false); + tjcUart = &huart4; - tjcUart = &huart4; remoteContolerUart = &huart3; MOTO_POWER_EN.initAsOutput(MOTO_POWER_EN_IO, kxs_gpio_nopull, false, true); @@ -21,15 +29,31 @@ void AppHardware::initialize() { MOTO2_DRV_ENN.initAsOutput(MOTO2_DRV_ENN_IO, kxs_gpio_nopull, false, true); MOTO3_DRV_ENN.initAsOutput(MOTO3_DRV_ENN_IO, kxs_gpio_nopull, false, true); MOTO4_DRV_ENN.initAsOutput(MOTO4_DRV_ENN_IO, kxs_gpio_nopull, false, true); - ID1.initAsInput(ID1_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); - ID2.initAsInput(ID2_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); - ID3.initAsInput(ID3_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); - ID4.initAsInput(ID4_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); - ID5.initAsInput(ID5_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + + MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true); + MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true); + MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true); + MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true); + + MOTOR1_REF_L.initAsInput(MOTOR1_REF_L_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + MOTOR1_REF_R.initAsInput(MOTOR1_REF_R_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + MOTOR2_REF_L.initAsInput(MOTOR2_REF_L_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + MOTOR2_REF_R.initAsInput(MOTOR2_REF_R_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + MOTOR3_REF_L.initAsInput(MOTOR3_REF_L_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + MOTOR3_REF_R.initAsInput(MOTOR3_REF_R_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + MOTOR4_REF_L.initAsInput(MOTOR4_REF_L_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + MOTOR4_REF_R.initAsInput(MOTOR4_REF_R_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + + id.ID0.initAsInput(ID0_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + id.ID1.initAsInput(ID1_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + id.ID2.initAsInput(ID2_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + id.ID3.initAsInput(ID3_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + id.ID4.initAsInput(ID4_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); + IO_OUT1.initAsOutput(IO_OUT1_IO, kxs_gpio_nopull, true, false); IO_OUT2.initAsOutput(IO_OUT2_IO, kxs_gpio_nopull, true, false); - BLE_CONNECTED_STATE_IO_PE6.initAsInput(PE6, kxs_gpio_nopull, kxs_gpio_no_irq, false); + BLE_CONNECTED_STATE.initAsInput(BLE_CONNECTED_STATE_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false); osDelay(10); MOTO_POWER_EN.setState(false); diff --git a/usrc/apphardware/apphardware.hpp b/usrc/apphardware/apphardware.hpp index 53b02cd..1304562 100644 --- a/usrc/apphardware/apphardware.hpp +++ b/usrc/apphardware/apphardware.hpp @@ -3,15 +3,20 @@ #include "ucomponents/eeprom/m24m02_i2c_eeprom.hpp" namespace iflytop { + +class ID { + public: + ZGPIO ID0; + ZGPIO ID1; + ZGPIO ID2; + ZGPIO ID3; + ZGPIO ID4; +}; + class AppHardware { private: /* data */ public: - TMC51X0 MOTO1; - TMC51X0 MOTO2; - TMC51X0 MOTO3; - TMC51X0 MOTO4; - ZGPIO MOTO_POWER_EN; ZGPIO MOTO1_CSN; ZGPIO MOTO2_CSN; @@ -21,22 +26,38 @@ class AppHardware { ZGPIO MOTO2_DRV_ENN; ZGPIO MOTO3_DRV_ENN; ZGPIO MOTO4_DRV_ENN; - ZGPIO ID1; - ZGPIO ID2; - ZGPIO ID3; - ZGPIO ID4; - ZGPIO ID5; + + ZGPIO MOTOR1_REF_L; + ZGPIO MOTOR1_REF_R; + ZGPIO MOTOR2_REF_L; + ZGPIO MOTOR2_REF_R; + ZGPIO MOTOR3_REF_L; + ZGPIO MOTOR3_REF_R; + ZGPIO MOTOR4_REF_L; + ZGPIO MOTOR4_REF_R; + + TMC51X0 MOTO1; + TMC51X0 MOTO2; + TMC51X0 MOTO3; + TMC51X0 MOTO4; + + ID id; + ZGPIO IO_OUT1; ZGPIO IO_OUT2; - ZGPIO BLE_CONNECTED_STATE_IO_PE6; + ZGPIO BLE_CONNECTED_STATE; UART_HandleTypeDef* tjcUart; + ZGPIO TJC_UART_CH_SEL_PIN; + ZGPIO TJC_UART_CH_EN_PIN; + UART_HandleTypeDef* remoteContolerUart; M24M02_I2C_EEPROM eeprom; - bool hardwareInitedOK = false;; + bool hardwareInitedOK = false; + ; static AppHardware* ins() { static AppHardware instance; @@ -54,6 +75,8 @@ class AppHardware { } bool isHardInitOk(); + + void setTJCScreenInDownloadMode(); }; } // namespace iflytop diff --git a/usrc/project_configs.h b/usrc/project_configs.h index 00c745d..1fcd678 100644 --- a/usrc/project_configs.h +++ b/usrc/project_configs.h @@ -9,7 +9,7 @@ #define SDK_CFG__SN_FLASH_ADDR 0x080E0004 // #define SDK_MAX_TASK 10 // 最大任务数量 -#define DEBUG_UART huart1 // 调试串口 + /*********************************************************************************************************************** * FLASH分区 * diff --git a/usrc/service/app_core.cpp b/usrc/service/app_core.cpp index 486e1fc..2629f8d 100644 --- a/usrc/service/app_core.cpp +++ b/usrc/service/app_core.cpp @@ -16,6 +16,21 @@ #define TAG "main" using namespace iflytop; +/** + * @brief + * + * + * + */ + +// #define TEST_ID +// #define TEST_CAN +// #define TEST_TMC_MOTOR +// #define TEST_TMC_MOTOR_REF +// #define TEST_BLE_IF +// #define TEST_EEPROM +// #define TEST_TJC_SCREEN + static const char* zhex2str(uint8_t* data, size_t len) { static char buf[256]; memset(buf, 0, sizeof(buf)); @@ -28,29 +43,8 @@ static const char* zhex2str(uint8_t* data, size_t len) { extern "C" { void umain() { AppCore::ins()->initialize(); } } -static iflytop::ZGPIO debuglight; -static bool errorFlag; - -void AppCore::debugLightLoop() { - static bool light = false; - static uint32_t lastcall = 0; - - if (errorFlag) { - if (zos_haspassedms(lastcall) > 30) { - light = !light; - debuglight.write(light); - lastcall = zos_get_tick(); - } - } else { - if (zos_haspassedms(lastcall) > 300) { - light = !light; - debuglight.write(light); - lastcall = zos_get_tick(); - } - } -} -void AppCore::appsetup() { +void AppCore::test() { osDelay(1000); /*********************************************************************************************************************** * INIT * @@ -60,93 +54,235 @@ void AppCore::appsetup() { AppEventBus::ins()->initialize(); // 硬件初始化 - ZCAN1::ins()->init(); + ZCAN1::ins()->zcaninit(); AppHardware::ins()->initialize(); // 基础硬件初始化 - // 配置初始化 - ConfigService::ins()->initialize(); +#ifdef TEST_ID - if (!AppHardware::ins()->isHardInitOk()) { - FrontEndControler::ins()->initialize(); // 前端控制器,对屏幕的消息进行解析,发送消息给屏幕 - FrontEndControler::ins()->startSchedule(); - FrontEndControler::ins()->alertNoConfirm("设备异常:\r\n 存储异常,请尝试重新上电"); - while (true) { - osDelay(1); - } + while (true) { + ID* id = &AppHardware::ins()->id; + ZLOGI(TAG, "ID0:%d ID1:%d ID2:%d ID3:%d ID4:%d", // + id->ID0.read(), id->ID1.read(), id->ID2.read(), id->ID3.read(), id->ID4.read()); + osDelay(1000); } - // hardInit - AppHardware::ins()->initialize(); // 基础硬件初始化 - RemoteControlerUpper::ins()->initialize(); // 遥控器初始化 - FrontEndControler::ins()->initialize(); // 前端控制器,对屏幕的消息进行解析,发送消息给屏幕 - ValveStateSyncService::ins()->initialize(ZCAN1::ins()); - - // BaseServiceInit - PUMPCS->initialize(); - RemoteControlerStateSyncService::ins()->initialize(); - - // Page - Page_login::ins()->initialize(); // - Page_main::ins()->initialize(); // - Page_keybAcidCh::ins()->initialize(); - Page_muAcidType::ins()->initialize(); - Page_menu::ins()->initialize(); - Page_muInterval::ins()->initialize(); - Page_changePasswd::ins()->initialize(); - Page_muSettings::ins()->initialize(); - Page_muUsrMgr::ins()->initialize(); - Page_muDeviceInfo::ins()->initialize(); - // Page_muAudit::ins()->initialize(); - Page_muPumpTest::ins()->initialize(); - // EventProcesser - Page_muPumpSett::ins()->initialize(); - Page_muBleHandSett::ins()->initialize(); - Page_muMotorSett::ins()->initialize(); - - RemoteControlerEventProcesser::ins()->initialize(); - /*********************************************************************************************************************** - * REG_EVENT_HANDLER * - ***********************************************************************************************************************/ +#endif +#ifdef TEST_CAN // - /*********************************************************************************************************************** - * START * - ***********************************************************************************************************************/ - FrontEndControler::ins()->startSchedule(); - RCTRL->startSchedule(); - RemoteControlerStateSyncService::ins()->startSync(); - ValveStateSyncService::ins()->startSync(); + ZCAN1::ins()->regOnCanMessage([this](zcanrx_t* rx) { // + ZLOGI(TAG, "zcanrx 0x%08x:%s", rx->extid, zhex2str(rx->rxpacket, rx->rkpacketlen)); + }); + + while (true) { + static uint8_t txdata[] = {0x12, 0x34, 0x56, 0x78, 0x12, 0x34, 0x56, 0x78}; + ZCAN1::ins()->txMsg(0x33333333, (uint8_t*)txdata, 8, 1000); + osDelay(1000); + } + +#endif - // dim - UIS->chpage(pg_login); +#ifdef TEST_TMC_MOTOR + + while (true) { + AppHardware::ins()->MOTO1.rotate(800); + osDelay(3000); + AppHardware::ins()->MOTO2.rotate(800); + osDelay(3000); + AppHardware::ins()->MOTO3.rotate(800); + osDelay(3000); + AppHardware::ins()->MOTO4.rotate(800); + osDelay(3000); + AppHardware::ins()->MOTO1.rotate(0); + AppHardware::ins()->MOTO2.rotate(0); + AppHardware::ins()->MOTO3.rotate(0); + AppHardware::ins()->MOTO4.rotate(0); + osDelay(3000); + } + +#endif + +#ifdef TEST_TMC_MOTOR_REF + + auto* m1_ref_l = &AppHardware::ins()->MOTOR1_REF_L; + auto* m1_ref_r = &AppHardware::ins()->MOTOR1_REF_R; + auto* m2_ref_l = &AppHardware::ins()->MOTOR2_REF_L; + auto* m2_ref_r = &AppHardware::ins()->MOTOR2_REF_R; + auto* m3_ref_l = &AppHardware::ins()->MOTOR3_REF_L; + auto* m3_ref_r = &AppHardware::ins()->MOTOR3_REF_R; + auto* m4_ref_l = &AppHardware::ins()->MOTOR4_REF_L; + auto* m4_ref_r = &AppHardware::ins()->MOTOR4_REF_R; + + while (true) { + ZLOGI(TAG, "m1 r:%d l:%d , m2 r:%d l:%d , m3 r:%d l:%d , m4 r:%d l:%d", // + m1_ref_r->read(), m1_ref_l->read(), m2_ref_r->read(), m2_ref_l->read(), m3_ref_r->read(), m3_ref_l->read(), m4_ref_r->read(), m4_ref_l->read()); + osDelay(1000); + } + +#endif + +#ifdef TEST_BLE_IF + RCTRL->initialize(); + RCTRL->startSchedule(); - osDelay(100); CfgItermCache bleNameCache; - const char* bleName = CS->getStr(kcfg_bleClientName, &bleNameCache); - if (strlen(bleName) != 0) { - ZLOGI(TAG, "start scan :%s", bleName); - for (size_t i = 0;; i++) { - if (i != 0) ZLOGI(TAG, "re start scan %s %d", bleName, i); - bool suc = RCTRL->startScan(bleName, true); - if (suc) break; - } - } else { - ZLOGI(TAG, "start scan %s", "XXXXXXXXX"); - for (size_t i = 0;; i++) { - if (i != 0) ZLOGI(TAG, "re start scan %s %d", "XXXXXXXX", i); - bool suc = RCTRL->startScan("XXXXXXXXX", false); // 输入一个错误的设备名,当作不扫描 - if (suc) break; + ZLOGI(TAG, "start scan :%s", BLENAME); + for (size_t i = 0;; i++) { + if (i != 0) ZLOGI(TAG, "re start scan %s %d", BLENAME, i); + bool suc = RCTRL->startScan(BLENAME, true); + if (suc) break; + } + RCTRL->regOnReport([this](uint8_t* rx, int32_t len) { + zble_proto_packet_t* packet = (zble_proto_packet_t*)rx; + if (packet->cmd == kzble_app_report_key_event) { + int32_t keyEvent = *(int32_t*)packet->data; + if (keyEvent == hand_acid_remoter_kevent_add_liquid) ZLOGI(TAG, "OnKey --> add_liquid"); + if (keyEvent == hand_acid_remoter_kevent_change_next_mode) ZLOGI(TAG, "OnKey --> change_next_mode"); + if (keyEvent == hand_acid_remoter_kevent_reflux) ZLOGI(TAG, "OnKey --> reflux"); + if (keyEvent == hand_acid_remoter_kevent_preFilling) ZLOGI(TAG, "OnKey --> preFilling"); + return; } + }); + + while (true) { + ZLOGI(TAG, "ble connect state %d", RCTRL->isConnected()); + osDelay(1000); + } + +#endif +#ifdef TEST_EEPROM + while (true) { + // 扫描到 0x50 说明EEPROM在线 + AppHardware::ins()->eeprom.scan_i2c(); + osDelay(3000); + } +#endif + +#ifdef TEST_TJC_SCREEN_DOWNLOAD_MODE + AppHardware::ins()->setTJCScreenInDownloadMode(); +#endif + +#ifdef TEST_TJC_SCREEN + while (true) { + // 扫描到 0x50 说明EEPROM在线 + uint8_t tx = 0x73; + uint8_t rx = 0; + bool suc = FrontEndControler::ins()->echo(tx, &rx); + ZLOGI(TAG, "echo suc:%d tx:%x rx:%x", suc, tx, rx); + + osDelay(3000); + } + +#endif + + while (true) { + // 测试陶晶驰屏幕串口,通信通道是否工作正常 + // 1. 下发指令(准备一个专门的测试UI),每接收到一条指令,上报一条指令 + // + + // 测试陶晶驰屏幕串口,烧录通道是否工作正常(单独提供一个镜像) + // 1. 切换到烧录模式 + // 2. + + // RTC是否工作正常(测试掉电时间是否丢失) + // 读取RTC时间,并显示 + + // USB功能(是否能够识别到U盘),识别到U盘并触发事件,然后打印消息 + // ? + // + + // WIFI,功能模块,WIFI串口接收到数据,WIFI串口上报数据 + // ? + // } + + // // 配置初始化 + // ConfigService::ins()->initialize(); + + // if (!AppHardware::ins()->isHardInitOk()) { + // FrontEndControler::ins()->initialize(); // 前端控制器,对屏幕的消息进行解析,发送消息给屏幕 + // FrontEndControler::ins()->startSchedule(); + // FrontEndControler::ins()->alertNoConfirm("设备异常:\r\n 存储异常,请尝试重新上电"); + // while (true) { + // osDelay(1); + // } + // } + + // // hardInit + // AppHardware::ins()->initialize(); // 基础硬件初始化 + // RemoteControlerUpper::ins()->initialize(); // 遥控器初始化 + // FrontEndControler::ins()->initialize(); // 前端控制器,对屏幕的消息进行解析,发送消息给屏幕 + // ValveStateSyncService::ins()->initialize(ZCAN1::ins()); + + // // BaseServiceInit + // PUMPCS->initialize(); + // RemoteControlerStateSyncService::ins()->initialize(); + + // // Page + // Page_login::ins()->initialize(); // + // Page_main::ins()->initialize(); // + // Page_keybAcidCh::ins()->initialize(); + // Page_muAcidType::ins()->initialize(); + // Page_menu::ins()->initialize(); + // Page_muInterval::ins()->initialize(); + // Page_changePasswd::ins()->initialize(); + // Page_muSettings::ins()->initialize(); + // Page_muUsrMgr::ins()->initialize(); + // Page_muDeviceInfo::ins()->initialize(); + // // Page_muAudit::ins()->initialize(); + // Page_muPumpTest::ins()->initialize(); + // // EventProcesser + // Page_muPumpSett::ins()->initialize(); + // Page_muBleHandSett::ins()->initialize(); + // Page_muMotorSett::ins()->initialize(); + + // RemoteControlerEventProcesser::ins()->initialize(); + // /*********************************************************************************************************************** + // * REG_EVENT_HANDLER * + // ***********************************************************************************************************************/ + + // // + + // /*********************************************************************************************************************** + // * START * + // ***********************************************************************************************************************/ + // FrontEndControler::ins()->startSchedule(); + // RCTRL->startSchedule(); + // RemoteControlerStateSyncService::ins()->startSync(); + // ValveStateSyncService::ins()->startSync(); + + // // dim + // UIS->chpage(pg_login); + + // osDelay(100); + // CfgItermCache bleNameCache; + // const char* bleName = CS->getStr(kcfg_bleClientName, &bleNameCache); + // if (strlen(bleName) != 0) { + // ZLOGI(TAG, "start scan :%s", bleName); + // for (size_t i = 0;; i++) { + // if (i != 0) ZLOGI(TAG, "re start scan %s %d", bleName, i); + // bool suc = RCTRL->startScan(bleName, true); + // if (suc) break; + // } + // } else { + // ZLOGI(TAG, "start scan %s", "XXXXXXXXX"); + // for (size_t i = 0;; i++) { + // if (i != 0) ZLOGI(TAG, "re start scan %s %d", "XXXXXXXX", i); + // bool suc = RCTRL->startScan("XXXXXXXXX", false); // 输入一个错误的设备名,当作不扫描 + // if (suc) break; + // } + // } } -#define DEBUG_LIGHT_IO PE2 + +static ZThread ledthread; void AppCore::initialize() { AppHal::MX_TIM6_Init(); AppHal::MX_TIM7_Init(); - AppHal::DEBUG_UART_INIT(PA9, PA10, 460800); - debuglight.initAsOutput(DEBUG_LIGHT_IO, kxs_gpio_nopull, false, false); + + AppHal::DEBUG_UART_INIT(DEBUG_TX_PIN, DEBUG_RX_PIN, DEBUG_UART_BAUDRATE); + zlog_init(&DEBUG_UART_INS); ZLOGI(TAG, "======================= boardinfo ==================== "); ZLOGI(TAG, "project : %s ", PROJECT); @@ -157,14 +293,35 @@ void AppCore::initialize() { SysMgr::ins()->initedFinished(); SysMgr::ins()->dumpSysInfo(); - appsetup(); - // AppHal::MX_IWDG_Init(); + // 启动调试指示灯功能 + ledthread.init("led", 1024, osPriorityNormal); + ledthread.start([this]() { + static iflytop::ZGPIO debuglight; + debuglight.initAsOutput(DEBUG_LIGHT_IO, kxs_gpio_nopull, false, false); + while (true) { + static bool light = false; + static uint32_t lastcall = 0; - while (true) { - osDelay(1); - osDelay(30); + if (zbase_gstate_get()->fatalFlag) { + if (zos_haspassedms(lastcall) > 30) { + light = !light; + debuglight.write(light); + lastcall = zos_get_tick(); + } + } else { + if (zos_haspassedms(lastcall) > 300) { + light = !light; + debuglight.write(light); + lastcall = zos_get_tick(); + } + } - debugLightLoop(); - // HAL_IWDG_Refresh(&hiwdg); - } + osDelay(30); + } + }); + + test(); + // AppHal::MX_IWDG_Init(); + + while (true) osDelay(30); } diff --git a/usrc/service/app_core.hpp b/usrc/service/app_core.hpp index e9594f5..67c5849 100644 --- a/usrc/service/app_core.hpp +++ b/usrc/service/app_core.hpp @@ -1,16 +1,14 @@ #pragma once #include "apphardware/apphardware.hpp" -#include "uappbase/base.hpp" #include "config/config.hpp" +#include "uappbase/base.hpp" namespace iflytop { class AppCore { private: /* data */ AppCore(/* args */) {} - - public: static AppCore* ins() { static AppCore ins; @@ -18,9 +16,9 @@ class AppCore { } void initialize(); void appsetup(); - void debugLightLoop(); public: + void test(); }; } // namespace iflytop \ No newline at end of file diff --git a/usrc/service/front_end_controler.cpp b/usrc/service/front_end_controler.cpp index 02000bc..d9ec91d 100644 --- a/usrc/service/front_end_controler.cpp +++ b/usrc/service/front_end_controler.cpp @@ -381,6 +381,33 @@ bool FrontEndControler::readInt(uint8_t pid, uint8_t cId, int32_t* val) { return true; } +bool FrontEndControler::echo(uint8_t tx, uint8_t* rx) { + zlock_guard lg(m_cmdlock); + + startReceiveAck(); + sendcmd("com_stop"); + sendcmd("printh AA"); + sendcmd("printh %02X", tx); + sendcmd("printh FF FF FF"); + sendcmd("com_start"); + + bool suc = ackQueue.receive(&ackcache, CMD_OVERTIME); + if (!suc) { + ZLOGI(TAG, "readTxt failed"); + return false; + } + + uint8_t int32val = 0; + memcpy(&int32val, &ackcache.data[1], 1); + *rx = int32val; + + if (tx != int32val) { + return false; + } + + return true; +} + bool FrontEndControler::setTxt(uint8_t pid, uint8_t bid, const char* txt, ...) { zlock_guard lg(m_cmdlock); diff --git a/usrc/service/front_end_controler.hpp b/usrc/service/front_end_controler.hpp index 0936213..6833311 100644 --- a/usrc/service/front_end_controler.hpp +++ b/usrc/service/front_end_controler.hpp @@ -1,7 +1,7 @@ #pragma once #include "apphardware/apphardware.hpp" -#include "uappbase/base.hpp" #include "config/config.hpp" +#include "uappbase/base.hpp" // #include "tjc/tjc.hpp" @@ -57,6 +57,7 @@ class FrontEndControler { // cmd list bool readTxt(uint8_t pid, uint8_t bid, char* txt, int32_t txtbuflen); bool readInt(uint8_t pid, uint8_t bid, int32_t* val); + bool echo(uint8_t tx, uint8_t* rx); bool setTxt(uint8_t pid, uint8_t bid, const char* txt, ...); bool setTxt(uint8_t bid, const char* txt) { return setTxt(m_nowPage, bid, txt); } diff --git a/usrc/service/remote_controler.cpp b/usrc/service/remote_controler.cpp index 1f8ff5a..987af81 100644 --- a/usrc/service/remote_controler.cpp +++ b/usrc/service/remote_controler.cpp @@ -43,7 +43,7 @@ void RemoteControlerUpper::regOnReport(on_report_cb_t on_report) { m_ncb++; } -bool RemoteControlerUpper::isConnected() { return AppHardware::ins()->BLE_CONNECTED_STATE_IO_PE6.getState(); } +bool RemoteControlerUpper::isConnected() { return AppHardware::ins()->BLE_CONNECTED_STATE.getState(); } void RemoteControlerUpper::callOnReport(uint8_t* rx, int32_t len) { for (int32_t i = 0; i < m_ncb; i++) { m_cb[i](rx, len); diff --git a/usrc/service/remote_controler_event_processer.cpp b/usrc/service/remote_controler_event_processer.cpp index 2ca8bca..427c47e 100644 --- a/usrc/service/remote_controler_event_processer.cpp +++ b/usrc/service/remote_controler_event_processer.cpp @@ -38,6 +38,8 @@ void RemoteControlerEventProcesser::initialize() { AppEvent_t appevent; appevent.type = kAppEvent_BleConnectEvent; strncpy(appevent.d.bleName, event->blename, sizeof(appevent.d.bleName)); + + ZLOGI(TAG, "on ble connect -> client name:%s", event->blename); AppEventBus::ins()->pushEvent(appevent); } else if (packet->cmd == kzble_report_disconnect_event) { GSM->setRemoterS(false); diff --git a/usrc/service/valve_state_ctrl_service.cpp b/usrc/service/valve_state_ctrl_service.cpp index efcbbde..65b5c5c 100644 --- a/usrc/service/valve_state_ctrl_service.cpp +++ b/usrc/service/valve_state_ctrl_service.cpp @@ -7,7 +7,7 @@ using namespace iflytop; void ValveStateSyncService::initialize(ZCAN1* can) { m_thread.init("ValveStateSyncService-Thread"); this->can = can; - ZCAN1::ins()->init(); + ZCAN1::ins()->zcaninit(); lock.init(); }