/** * @file main.c * @brief Emm_V5.0 步进闭环电机驱动演示 (ESP-IDF) * * 硬件接线: * ESP32 TX (GPIO6) -> 电机 RX * ESP32 RX (GPIO7) -> 电机 TX * ESP32 GND -> 电机 GND */ #include "emm_v5.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" void app_main(void) { uint8_t rx_buf[128] = {0}; uint8_t rx_len; /* 初始化驱动 (UART1, TX=GPIO6, RX=GPIO7, LED=GPIO2) */ Emm_V5_Init(UART_NUM_1, GPIO_NUM_6, GPIO_NUM_7); /* 上电延时 2 秒, 等待电机闭环初始化完毕 */ ESP_LOGI("MAIN", "等待电机初始化..."); vTaskDelay(pdMS_TO_TICKS(2000)); /* ---- 速度模式演示 ---- */ ESP_LOGI("MAIN", "发送速度控制命令: 地址1, CW, 1000RPM, 加速度10"); Emm_V5_Vel_Control(1, 0, 100, 10, false); /* 接收电机返回的数据 */ rx_len = Emm_V5_Receive_Data(rx_buf, sizeof(rx_buf)); /* 验证校验字节 (0x6B), 点亮/熄灭 LED */ if (rx_len > 0 && rx_buf[rx_len - 1] == 0x6B) { gpio_set_level(EMM_V5_LED_GPIO, 1); ESP_LOGI("MAIN", "通信正常 (校验通过, LED亮)"); } else { gpio_set_level(EMM_V5_LED_GPIO, 0); ESP_LOGW("MAIN", "通信异常 (校验失败, LED灭)"); } /* 打印返回的原始数据 (调试用, 每个字节+1 避免与电机地址冲突) */ ESP_LOGI("MAIN", "返回数据长度: %d", rx_len); if (rx_len > 0) { printf("返回数据(+1偏移): "); for (int i = 0; i < rx_len; i++) { printf("%02X ", rx_buf[i] + 1); } printf("\n"); } ESP_LOGI("MAIN", "演示完成, 程序挂起"); while (1) { vTaskDelay(pdMS_TO_TICKS(1000)); } }