ESP32-C6基于ESP-IDF驱动ADS1292R 250Hz采样数据异常求助
ESP32-C6 + ADS1292R 250Hz采样率数据错位问题求助
我正在使用ESP32-C6与ADS1292R采集ECG数据,已通过SPI成功建立通信,可读写ADS1292R寄存器,并采用GPIO中断接收采样数据。当采样率设置为125Hz时,未连接人体也能稳定接收数据;但设置为250Hz时,无法获取稳定数据,接收的数据出现错位错误。
相关代码如下:
static void IRAM_ATTR gpio_isr_handler(void *arg) { uint32_t gpio_num = (uint32_t)arg; xQueueSendFromISR(gpio_evt_queue, &gpio_num, NULL); } static void gpio_task(void *arg) { uint32_t io_num; uint8_t val[9] = {0}; for (;;) { if (xQueueReceive(gpio_evt_queue, &io_num, portMAX_DELAY)) { for (int i = 0; i < 9; i++) { val[i] = ads1292r_receive_data(spi_handle); } printf("%x %x %x %x %x %x %x %x %x\n", val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7], val[8]); usleep(3000); } } } void app_main(void) { // gpio config gpio_config_t io_conf; io_conf.intr_type = GPIO_INTR_DISABLE; io_conf.mode = GPIO_MODE_OUTPUT; io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL; io_conf.pull_down_en = 0; io_conf.pull_up_en = 0; gpio_config(&io_conf); io_conf.mode = GPIO_MODE_INPUT; io_conf.pin_bit_mask = BIT64(GPIO_DRDY); io_conf.pull_down_en = 0; io_conf.pull_up_en = 1; io_conf.intr_type = GPIO_INTR_NEGEDGE; gpio_config(&io_conf); // gpio isr gpio_evt_queue = xQueueCreate(100, sizeof(uint32_t)); xTaskCreate(gpio_task, "gpio_task", 4096, NULL, 15, NULL); gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); gpio_isr_handler_add(GPIO_DRDY, gpio_isr_handler, (void *)GPIO_DRDY); // uart config uart_config_t uart_config = { .baud_rate = 115200, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, .source_clk = UART_SCLK_DEFAULT, }; uart_driver_install(UART_NUM_0, 512 * 2, 0, 0, NULL, 0); uart_param_config(UART_NUM_0, &uart_config); uart_set_pin(UART_NUM_0, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); // spi config spi_bus_config_t spi_bus_cfg = { .mosi_io_num = GPIO_MOSI, .miso_io_num = GPIO_MISO, .sclk_io_num = GPIO_SCLK, .quadhd_io_num = -1, .quadwp_io_num = -1, }; spi_bus_initialize(SPI2_HOST, &spi_bus_cfg, SPI_DMA_CH_AUTO); spi_device_interface_config_t dev_cfg = { .clock_speed_hz = 1 * 1000 * 1000, .mode = 1, .spics_io_num = -1, .queue_size = 1, }; spi_bus_add_device(SPI2_HOST, &dev_cfg, &spi_handle); ads1292r_init(spi_handle); }
数据表现
- 125Hz采样率:数据输出稳定,无错位
- 250Hz采样率:数据出现错位,无法稳定获取有效数据
我怀疑这可能与FreeRTOS任务调度有关,但不确定具体原因,也不知道如何解决。希望能实现250Hz下获取正确数据,恳请各位提供帮助!
内容的提问来源于stack exchange,提问作者WeiShx
相关产品推荐
相关产品推荐

