diff --git a/app/Core/Src/main.c b/app/Core/Src/main.c index 3d77805..07842a9 100644 --- a/app/Core/Src/main.c +++ b/app/Core/Src/main.c @@ -58,7 +58,7 @@ void SystemClock_Config(void); /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ - +extern int umain(int argc, char const *argv[]) ; /* USER CODE END 0 */ /** @@ -97,6 +97,7 @@ int main(void) MX_USART1_UART_Init(); MX_USART3_UART_Init(); /* USER CODE BEGIN 2 */ + umain(0, NULL); /* USER CODE END 2 */ diff --git a/src/board/hardware.cpp b/src/board/hardware.cpp index 8a3fe8d..5027794 100644 --- a/src/board/hardware.cpp +++ b/src/board/hardware.cpp @@ -52,19 +52,25 @@ uint8_t Hardware::getDeviceId() { return DEVICE_ID; } *******************************************************************************/ void Hardware::input_sensors_init() { +#if 0 SENSOR_INT0.initAsInput(STM32_GPIO::kInput_noIrq, false /*mirror*/); SENSOR_INT1.initAsInput(STM32_GPIO::kInput_noIrq, false /*mirror*/); +#endif } uint32_t Hardware::input_sensors_get_table(int tableNum) { uint32_t val = 0; +#if 0 val |= SENSOR_INT0.getStateUint32() << 0; val |= SENSOR_INT1.getStateUint32() << 1; +#endif return val; } void Hardware::input_sensors_table_dump(int tableNum) { +#if 0 ZLOGI(TAG, "[0]:%d [1]:%d", // SENSOR_INT0.getStateUint32(), // SENSOR_INT1.getStateUint32()); +#endif } void Hardware::output_switch_init() { diff --git a/src/board/hardwarelib.cpp b/src/board/hardwarelib.cpp index b6c2137..a3d2707 100644 --- a/src/board/hardwarelib.cpp +++ b/src/board/hardwarelib.cpp @@ -2,27 +2,3 @@ #define TAG "hardware" using namespace iflytop; - -/******************************************************************************* - * TMC5130HImpl * - *******************************************************************************/ - -void TMC5130HImpl::initialize(const char *name, IflytopMicroOS *os, SPI_HandleTypeDef *spi, STM32_GPIO *spics, STM32_GPIO *enn) { - m_name = name; - m_os = os; - m_port.initialize(os, spi, spics, enn); - TMC5130::createDeafultTMC5130Config(&m_config, &m_port); - tmc5130.initialize(0, &m_config); - - uint32_t idVersion0 = tmc5130.readChipVERSION(); - ZLOGI(m_name, "idVersion :%x", idVersion0); - - tmc5130.setMotorShaft(false); - - tmc5130.setAcceleration(30000); - tmc5130.setDeceleration(30000); - - tmc5130.setIHOLD_IRUN(0, 3, 0); -} -void TMC5130HImpl::periodicJob() { tmc5130.periodicJob(m_os->getTicket()); } -TMC5130 *TMC5130HImpl::getTMC5130() { return &tmc5130; } diff --git a/src/board/hardwarelib.hpp b/src/board/hardwarelib.hpp index dcd0f7d..b27dad6 100644 --- a/src/board/hardwarelib.hpp +++ b/src/board/hardwarelib.hpp @@ -13,18 +13,5 @@ #include "libiflytop_micro\stm32\component\tmcutils\tmc51x0_port_impl.hpp" namespace iflytop { -class TMC5130HImpl { - public: - const char* m_name; - IflytopMicroOS* m_os; - TMC51X0PortImpl m_port; - TMC5130::TMC5130Config_t m_config; - TMC5130 tmc5130; - - public: - void initialize(const char* name, IflytopMicroOS* os, SPI_HandleTypeDef* spi, STM32_GPIO* spics, STM32_GPIO* enn); - void periodicJob(); - TMC5130* getTMC5130(); -}; } // namespace iflytop diff --git a/src/board/project_board.hpp b/src/board/project_board.hpp index ba48191..aa5b030 100644 --- a/src/board/project_board.hpp +++ b/src/board/project_board.hpp @@ -4,51 +4,12 @@ #define DEVICE_ID 200 // 调试串口 -#define DEBUG_UART huart1 +#define DEBUG_UART huart2 // 调试指示灯 -#define DEBUG_LIGHT_GPIO PB3 +#define DEBUG_LIGHT_GPIO PA1 // 微秒延迟定时器,注意该延时定时器需要按照以下文档进行配置 // http://192.168.1.3:3000/zwikipedia/iflytop_wikipedia/src/branch/master/doc/stm32cubemx_us_timer.md #define DELAY_US_TIMER htim4 -#define CONFIG_ENABLE_IFLYTOP_CAN_SLAVE_MODULE 1 -#define CONFIG_ENABLE_TMC_MOTOR 1 -/******************************************************************************* - * 5130步进电机配置 * - *******************************************************************************/ -#if CONFIG_ENABLE_TMC_MOTOR -// 电机通道编号 -#define MOTOR_SPI hspi1 -#define TMC5130_MOTOR_NUM 1 -#define MOTOR0_CSN PA4 -#define MOTOR0_ENN PB9 -// #define MOTOR1_SPI_MODE_SELECT - -// 步进电机 -#define MOTOR_R_SENSOR PB13 -#define MOTOR_L_SENSOR PB12 // 作为零点限位 -#endif - -#if CONFIG_ENABLE_IFLYTOP_CAN_SLAVE_MODULE -/******************************************************************************* - * CAN REG LIST * - *******************************************************************************/ -#define DEVICE_BASIC_CTRL_ADD_BASE 0 // 模块控制基本功能 https://iflytop1.feishu.cn/wiki/wikcnBmIF0vqLzbzWBsB3VDMalb -#define REG_MOTOR1_CTRL_ADD_BASE 10000 // 步进电机控制基地址 https://iflytop1.feishu.cn/wiki/wikcnI9UaaRBfWQ7zY2PQfik5hb -#define REG_GPIO_INPUT0 1000 // GPIO输入寄存器0 -#define REG_GPIO_OUTPUT0_WRITE 1100 // GPIO输出寄存器0 0-16,写时,高16位为掩码 -#define REG_GPIO_OUTPUT0_STATE 1101 // GPIO输出寄存器0 0-16,写时,高16位为掩码 -#endif - - -/******************************************************************************* - * GPIO INPUT * - *******************************************************************************/ -#define SENSOR_INT1 PA0 -#define SENSOR_INT0 PA1 - -/******************************************************************************* - * GPIO OUTPUT * - *******************************************************************************/ diff --git a/src/umain.cpp b/src/umain.cpp index a9ad837..d1465fe 100644 --- a/src/umain.cpp +++ b/src/umain.cpp @@ -14,30 +14,6 @@ using namespace std; #define TAG "umain" int random(int max) { return SysTick->VAL % max; } -#if CONFIG_ENABLE_IFLYTOP_CAN_SLAVE_MODULE -/******************************************************************************* - * IflytopCanProtocolStackProcesser * - *******************************************************************************/ -icps::error_t Main::onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser *processer, icps::WriteEvent *writeEvent) { - if (m_deviceBaseControlService.isThisRegOwnToMe(writeEvent->reg)) { - return m_deviceBaseControlService.processIflytopCanRegisterWriteEvent(writeEvent); - } else if (writeEvent->reg->add == REG_GPIO_OUTPUT0_WRITE) { - uint32_t mask = (writeEvent->newvalue & 0xFFFF0000) >> 16; - uint32_t value = writeEvent->newvalue & 0xFFFF; - m_hardware.output_switch_set(0, (uint16_t)mask, value); - return icps::kSuccess; - } - return icps::kSuccess; -} -icps::error_t Main::onHostRegisterReadEvent(IflytopCanProtocolStackProcesser *processer, icps::ReadEvent *event) { return icps::kSuccess; } -void Main::onHostRegisterReportEvent(IflytopCanProtocolStackProcesser *processer, icps::ReportEvent *event) {} - -icps::error_t Main::onSetEngineerMode(DeviceBaseControlService *service, int32_t engineer_mode) { - ZLOGI(TAG, "onSetEngineerMode %d", engineer_mode); - return icps::kSuccess; -} -#endif - /******************************************************************************* * MAIN * *******************************************************************************/ @@ -57,67 +33,6 @@ void Main::main(int argc, char const *argv[]) { m_hardware.input_sensors_init(); m_hardware.output_switch_init(); -#if CONFIG_ENABLE_TMC_MOTOR - m_motor5130_1.initialize("motor1", &m_hardware, &MOTOR_SPI, &MOTOR0_CSN, &MOTOR0_ENN); -#endif - -#if CONFIG_ENABLE_IFLYTOP_CAN_SLAVE_MODULE - /******************************************************************************* - * m_protocolStack * - *******************************************************************************/ - IflytopCanProtocolStackProcesser::createDefaultConfig(&m_iflytopCanStackConfig, m_hardware.getDeviceId(), m_regList, ZARRAY_SIZE(m_regList)); - m_protocolStack.initialize(&m_hardware, &m_iflytopCanStackConfig); - m_protocolStack.setDumpPacketFlag(false); - m_protocolStack.registerListener(this); - m_protocolStack.activeReg(REG_GPIO_INPUT0, icps::kr, 0); - m_protocolStack.activeReg(REG_GPIO_OUTPUT0_WRITE, icps::kw, 0); - m_protocolStack.activeReg(REG_GPIO_OUTPUT0_STATE, icps::kr, 0); - - /******************************************************************************* - * m_deviceBaseControlService * - *******************************************************************************/ - m_deviceBaseControlService.initialize(&m_hardware, &m_protocolStack, m_hardware.getDeviceId()); - m_deviceBaseControlService.setListener(this); - -#if CONFIG_ENABLE_TMC_MOTOR - /******************************************************************************* - * 电机服务 * - *******************************************************************************/ - { - TMC5130 *tmc_motor = m_motor5130_1.getTMC5130(); - SingleAxisMotorControlerV2 *service = &m_motorService; - MOTOR_L_SENSOR.initAsInput(STM32_GPIO::kInput_risingAndFallingIrq, true /*mirror*/); - STM32_GPIO *homeGpio = &MOTOR_L_SENSOR; - - tmc_motor->setMotorShaft(false); - tmc_motor->setIHOLD_IRUN(2, 3, 0); - - service->initialize( // - "motorService", &m_protocolStack, REG_MOTOR1_CTRL_ADD_BASE, - homeGpio, // ZERO_GPIO - NULL, // LGPIO - NULL, // RGPIO - tmc_motor, // motor - &m_hardware // os - ); - - // service->disableMoveHomeCheck(); - service->cfg_acc->setVal(30000); // 加速度 - service->cfg_dec->setVal(30000); // 减速度 - service->cfg_velocity->setVal(300000); // 位置模式时运行的速度 - service->cfg_zero_shift->setVal(0); // 回零时的偏移量 - service->cfg_runhome_velocity->setVal(50000); // 回零速度 - service->cfg_runtohome_dec->setVal(100000); // 回零减速度 - service->cfg_min_pos->setVal(INT32_MIN); // 最小位置 - service->cfg_max_pos->setVal(INT32_MAX); // 最大位置 - service->cfg_runtohome_max_distance->setVal(256 * 200 * 5); // 回零时移动的最大位移 - service->cfg_runtohome_leave_zero_point_distance->setVal(256 * 200 * 5); // 回零时离开零点的距离 - service->cfg_runtohome_keep_move_distance->setVal(256 * 25 * 1); // 回零时保持运动的距离 - } - -#endif -#endif - while (true) { m_hardware.periodicJob(); m_hardware.debug_light_periodicJob(); @@ -126,18 +41,6 @@ void Main::main(int argc, char const *argv[]) { m_hardware.input_sensors_table_dump(0); } -#if CONFIG_ENABLE_IFLYTOP_CAN_SLAVE_MODULE - if (m_ticket % 20 == 0) { - m_protocolStack.writeRegValue(REG_GPIO_INPUT0, m_hardware.input_sensors_get_table(0), false); - m_protocolStack.writeRegValue(REG_GPIO_OUTPUT0_STATE, m_hardware.output_switch_get(0), false); - } - m_protocolStack.periodicJob(); -#endif - -#if CONFIG_ENABLE_TMC_MOTOR - m_motor5130_1.periodicJob(); -#endif - HAL_IWDG_Refresh(&hiwdg); } } diff --git a/src/umain.hpp b/src/umain.hpp index 72447f3..b859353 100644 --- a/src/umain.hpp +++ b/src/umain.hpp @@ -23,43 +23,15 @@ namespace iflytop { class __class {}; -class Main : -#if CONFIG_ENABLE_IFLYTOP_CAN_SLAVE_MODULE - public IflytopCanProtocolStackProcesserListener, - public DeviceBaseControlServiceListener, -#endif - public __class { +class Main : public __class { public: Hardware m_hardware; -#if CONFIG_ENABLE_IFLYTOP_CAN_SLAVE_MODULE - IflytopCanProtocolStackProcesser::iflytop_can_slave_config_t m_iflytopCanStackConfig; - icps::Reg_t m_regList[128]; - IflytopCanProtocolStackProcesser m_protocolStack; - - DeviceBaseControlService m_deviceBaseControlService; // 设备基础服务 - SingleAxisMotorControlerV2 m_motorService; // 平移电机 -#endif - -#if CONFIG_ENABLE_TMC_MOTOR - TMC5130HImpl m_motor5130_1; -#endif - int32_t m_ticket; // 保证一个数一个数的递增,但不保证时间准确 Main() {} void main(int argc, char const *argv[]); -#if CONFIG_ENABLE_IFLYTOP_CAN_SLAVE_MODULE - /******************************************************************************* - * IflytopCanProtocolStackProcesser * - *******************************************************************************/ - virtual icps::error_t onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser *processer, icps::WriteEvent *writeEvent); - virtual icps::error_t onHostRegisterReadEvent(IflytopCanProtocolStackProcesser *processer, icps::ReadEvent *writeEvent); - virtual void onHostRegisterReportEvent(IflytopCanProtocolStackProcesser *processer, icps::ReportEvent *writeEvent); - virtual icps::error_t onSetEngineerMode(DeviceBaseControlService *service, int32_t engineer_mode); -#endif - private: void generateScheduleTicket(); };