From 94b79163ec4a685d0ff9d9bc94df08e1f8063b93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=90=83=E6=B2=B9=E7=82=B8=E9=B8=A1?= <1425962791@qq.com> Date: Sun, 15 Mar 2026 11:20:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9ADC=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8F=91=E9=80=81=E4=B8=8E=E5=A4=84=E7=90=86=EF=BC=8C=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=A4=96=E9=83=A8=E7=9A=84=E9=AB=98=E4=BC=98=E5=85=88?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- software/Power_Pico/Core/Inc/adc.h | 1 + software/Power_Pico/Core/Src/adc.c | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/software/Power_Pico/Core/Inc/adc.h b/software/Power_Pico/Core/Inc/adc.h index 54a020c..cc660ca 100644 --- a/software/Power_Pico/Core/Inc/adc.h +++ b/software/Power_Pico/Core/Inc/adc.h @@ -107,6 +107,7 @@ void MX_ADC1_Init(void); /* USER CODE BEGIN Prototypes */ +void Process_ADC_Chunk(uint16_t *chunk_ptr, uint8_t packet_idx); void Data_Monitor_Get_Values(float *out_vol_v, float *out_cur_ua); void Data_Monitor_Clear(void); diff --git a/software/Power_Pico/Core/Src/adc.c b/software/Power_Pico/Core/Src/adc.c index 09e694e..f10fb2d 100644 --- a/software/Power_Pico/Core/Src/adc.c +++ b/software/Power_Pico/Core/Src/adc.c @@ -26,6 +26,7 @@ #include "usb_device.h" #include "usbd_cdc_if.h" #include "gate.h" +#include "user_TasksInit.h" // DMA 双缓冲原始数据 [200行][5列] uint16_t adc_raw_buffer[ADC_TIMES * 2][ADC_CHANNELS]; @@ -304,7 +305,7 @@ void Data_Monitor_Clear(void) } // 处理 ADC 数据块的核心函数,负责数据选择、切换决策和USB发送 -static void Process_ADC_Chunk(uint16_t *chunk_ptr, uint8_t packet_idx) +void Process_ADC_Chunk(uint16_t *chunk_ptr, uint8_t packet_idx) { USB_ADC_Packet_t *pkg = &usb_packet_buffer[packet_idx]; @@ -427,8 +428,10 @@ static void Process_ADC_Chunk(uint16_t *chunk_ptr, uint8_t packet_idx) low_underload_cnt = 0; } - // USB 发送 (非阻塞) - CDC_Transmit_FS((uint8_t*)pkg, sizeof(USB_ADC_Packet_t)); + // USB 发送前,检查设备状态是否为 CONFIGURED + if (USER_USB_is_Configured()) { + CDC_Transmit_FS((uint8_t*)pkg, sizeof(USB_ADC_Packet_t)); + } // monitor_chunk_counter++; @@ -445,14 +448,16 @@ void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc) { // 处理前半段 (Buffer 行 0 ~ 99) // 传入 &adc_raw_buffer[0][0] - Process_ADC_Chunk(&adc_raw_buffer[0][0], 0); + // Process_ADC_Chunk(&adc_raw_buffer[0][0], 0); + osThreadFlagsSet(MessageSendTaskHandle, FLAG_ADC_HALF_READY); // 交给task中进行处理 } void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { // 处理后半段 (Buffer 行 100 ~ 199) // 传入 &adc_raw_buffer[ADC_TIMES][0] - Process_ADC_Chunk(&adc_raw_buffer[ADC_TIMES][0], 1); + // Process_ADC_Chunk(&adc_raw_buffer[ADC_TIMES][0], 1); + osThreadFlagsSet(MessageSendTaskHandle, FLAG_ADC_FULL_READY); // 交给task中进行处理 } /* USER CODE END 1 */