#include #include #include "board.h" #include "sdk\components\subcanmodule\zcancmder_subboard_initer.hpp" /******************************************************************************* * PROJECT_INCLUDE * *******************************************************************************/ #include "sdk/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp" #include "sdk\components\mini_servo_motor\feite_servo_motor.hpp" #include "sdk\components\mini_servo_motor\mini_servo_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\tmc\ic\ztmc4361A.hpp" #include "sdk\components\tmc\ic\ztmc5130.hpp" #define TAG "main" using namespace iflytop; using namespace std; static ZCancmderSubboardIniter initer; extern void umain(); extern "C" { void StartDefaultTask(void const* argument) { umain(); } extern DMA_HandleTypeDef hdma_usart3_rx; extern DMA_HandleTypeDef hdma_usart3_tx; } /******************************************************************************* * GET_DEVICE_ID * *******************************************************************************/ static int32_t getDeviceId() { static bool init = false; static ZGPIO ID0; static ZGPIO ID1; static ZGPIO ID2; static ZGPIO ID3; static ZGPIO ID4; if (!init) { ID0.initAsInput(ID0_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); ID1.initAsInput(ID1_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); ID2.initAsInput(ID2_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); ID3.initAsInput(ID3_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); ID4.initAsInput(ID4_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); init = true; } uint8_t id = ID0.getState() * 1 + ID1.getState() * 2 + ID2.getState() * 4 + ID3.getState() * 8 + ID4.getState() * 16; return id; } /******************************************************************************* * INIT_SUBMODULE * *******************************************************************************/ class PWMCtrler : public ZIPWMCtrl { ZPWMGenerator pwm; int32_t m_freq = 50000; int32_t m_duty = 30; int32_t m_state = 0; public: void initialize() { pwm.initialize(&htim2, TIM_CHANNEL_2, m_freq, 0); pwm.stopPWM(); } virtual int32_t pwm_set_state(int32_t state) { if (state) { pwm.startPWM(m_freq, m_duty); } else { pwm.stopPWM(); } m_state = state; return 0; } virtual int32_t pwm_get_state(int32_t& state) { state = m_state; return 0; } virtual int32_t set_pwm_duty(int32_t duty) { m_duty = duty; if (m_state) { pwm.startPWM(m_freq, m_duty); } return 0; } virtual int32_t get_pwm_duty(int32_t& duty) { duty = m_duty; return 0; } virtual int32_t set_pwm_freq(int32_t freq) { m_freq = freq; if (m_state) { pwm.startPWM(m_freq, m_duty); } return 0; } virtual int32_t get_pwm_freq(int32_t& duty) { duty = m_freq; return 0; } }; PWMCtrler pwmCtrler; void nvs_init_cb() {} static void initsubmodule() { // osDelay(1000); { pwmCtrler.initialize(); pwmCtrler.pwm_set_state(0); } } /******************************************************************************* * MAIN * *******************************************************************************/ void umain() { ZCancmderSubboardIniter::cfg_t cfg = // { .deviceId = getDeviceId(), .input_gpio = { {.pin = PD0, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD1, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD2, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD3, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD4, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD5, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD6, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD7, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD8, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD9, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD10, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD11, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD12, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD13, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD14, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, {.pin = PD15, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false}, }, .output_gpio = { {.pin = PE7, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PE8, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PE9, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PE10, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PE11, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PE12, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PE13, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PE14, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PE15, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PB0, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PB1, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PB2, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PB3, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PB4, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PB5, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, {.pin = PB6, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false}, // {.pin = PC6, .mode = ZGPIO::kMode_pulldown, .mirror = false, .initLevel = false, .log_when_setstate = false}, {.pin = PC7, .mode = ZGPIO::kMode_pulldown, .mirror = false, .initLevel = false, .log_when_setstate = false}, {.pin = PC8, .mode = ZGPIO::kMode_pulldown, .mirror = false, .initLevel = false, .log_when_setstate = false}, }, .pwmctrl = { // &pwmCtrler, }, }; initer.init(&cfg); initsubmodule(); initer.loop(); }