#include #include #include "sdk/os/zos.hpp" #include "sdk\components\flash\zsimple_flash.hpp" #include "sdk\components\zcancmder\zcanreceiver.hpp" #include "sdk\components\zcancmder_module\zcan_basic_order_module.hpp" #include "sdk\components\zprotocols\zcancmder_v2\protocol_parser.hpp" // #include "sdk\components\flash\znvs.hpp" // #include "sdk/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp" #include "sdk\components\pipette_module\pipette_ctrl_module_v2.hpp" #include "sdk\components\sensors\m3078\m3078_code_scaner.hpp" #include "sdk\components\sensors\tmp117\tmp117.hpp" #include "sdk\components\ti\drv8710.hpp" #include "sdk\components\tmc\ic\ztmc5130.hpp" #include "sdk\components\water_cooling_temperature_control_module\pwm_ctrl_module.hpp" #include "sdk\components\water_cooling_temperature_control_module\water_cooling_temperature_control_module.hpp" #include "sdk\components\water_cooling_temperature_control_module\water_cooling_temperature_control_module_factory.cpp" #include "sdk\components\water_cooling_temperature_control_module\water_cooling_temperature_control_module_factory.hpp" // #include "M3078CodeScanner" #define TAG "main" using namespace iflytop; using namespace std; extern void umain(); extern "C" { void StartDefaultTask(void const* argument) { umain(); } } extern "C" { extern DMA_HandleTypeDef hdma_usart2_rx; extern DMA_HandleTypeDef hdma_usart2_tx; } static ZCanCmder g_zcanCmder; static ZIProtocolParser g_ziProtocolParser; // static TMC5130 g_motor; static StepMotorCtrlModule g_stepMotorCtrlModule; // static PipetteModule g_pipetteModule; // USART4_TX void init_and_reg_motor() { osDelay(1000); { TMC5130::cfg_t cfg = { .spi = &TMC_MOTOR_SPI, // .csgpio = MOTOR0_CSN, // .ennPin = MOTOR0_ENN, // .spi_mode_select = MOTOR1_SPI_MODE_SELECT, // }; g_motor.initialize(&cfg); g_motor.setMotorShaft(false); ZLOGI(TAG, "motora initialize 5160:%x ", g_motor.readICVersion()); } g_motor.setAcceleration(100); g_motor.setDeceleration(100); g_motor.setIHOLD_IRUN(0, 8, 10); static ZGPIO input[10]; input[0].initAsInput(PD1 /*REFL*/, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); input[1].initAsInput(PD2 /*REFR*/, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); input[2].initAsInput(PD3 /*DIAG0*/, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); input[3].initAsInput(PD4 /*DIAG1*/, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); g_stepMotorCtrlModule.initialize(BOARD_ID * 10 + 1, &g_motor, input, ZARRAY_SIZE(input), MOTOR_CFG_FLASH_MARK); g_ziProtocolParser.registerModule(&g_stepMotorCtrlModule); } void init_and_reg_cliptip_module() { // # RS232输出压力流 // /1U2!0R\r // # 设置移液枪最大行程100,防止设备误操作导致吸入液体到设备中 // /1u1,100R\r PipetteModule::config_t cfg = { .limit_ul = 100, }; PipetteModule::hardward_config_t hardwarecfg = { .uart = &huart2, .hdma_rx = &hdma_usart2_rx, .hdma_tx = &hdma_usart2_tx, }; g_pipetteModule.initialize(BOARD_ID * 10 + 2, &cfg, &hardwarecfg); g_ziProtocolParser.registerModule(&g_pipetteModule); } void init_and_reg_m3078() { // static M3078CodeScanner codescanner; static M3078CodeScanner::hardware_config_t cfg = { .uart = &huart2, .hdma_rx = nullptr, .hdma_tx = nullptr, .codeReadOkPin = PinNull, .rstPin = PinNull, .triggerPin = PD15, }; codescanner.initialize(BOARD_ID * 10 + 3, &cfg); g_ziProtocolParser.registerModule(&codescanner); } void umain() { chip_cfg_t chipcfg; chipcfg.us_dleay_tim = &DELAY_US_TIMER; chipcfg.tim_irq_scheduler_tim = &TIM_IRQ_SCHEDULER_TIMER; chipcfg.huart = &DEBUG_UART; chipcfg.debuglight = DEBUG_LIGHT_GPIO; chip_init(&chipcfg); zos_cfg_t zoscfg; zos_init(&zoscfg); ZLOGI(TAG, "boardId:%d", BOARD_ID); /******************************************************************************* * NVSINIT * *******************************************************************************/ ZNVS::ins().initialize(IFLYTOP_NVS_CONFIG_FLASH_SECTOR); { static I_StepMotorCtrlModule::flash_config_t cfg; StepMotorCtrlModule::create_default_cfg(cfg); ZNVS::ins().alloc_config(MOTOR_CFG_FLASH_MARK, (uint8_t*)&cfg, sizeof(cfg)); } ZNVS::ins().init_config(); auto zcanCmder_cfg = g_zcanCmder.createCFG(BOARD_ID); g_zcanCmder.init(zcanCmder_cfg); g_ziProtocolParser.initialize(&g_zcanCmder); init_and_reg_motor(); init_and_reg_cliptip_module(); init_and_reg_m3078(); while (true) { OSDefaultSchduler::getInstance()->loop(); g_zcanCmder.loop(); } };