diff --git a/Power_Pico/Core/Inc/adc.h b/Power_Pico/Core/Inc/adc.h index 0957737..0b6a9ad 100644 --- a/Power_Pico/Core/Inc/adc.h +++ b/Power_Pico/Core/Inc/adc.h @@ -29,10 +29,23 @@ extern "C" { #include "main.h" /* USER CODE BEGIN Includes */ + #define ADC_TIMES 10 #define ADC_CHANELS 4 + +typedef struct { + uint8_t header[5]; + // 0x55, 0xAA header + // 0x64 adc times, 0x05 adc channels (so data lenth is times * channels * 2 bytes) + // and 1byte for direct & unit, 0x0? for positive, 0x1? for negative, 0x?0 for LOW, 0x?1 for MID, 0x?2 for HIGH + uint16_t data[ADC_TIMES][ADC_CHANELS]; // ADC 数据(真正要采集的地方) +} __attribute__((packed)) ADC_Packet; + +extern ADC_Packet adc_packet1, adc_packet2; + // cur 5mr, cur 500mr, cur 50r, val -extern uint16_t adc_buf[ADC_TIMES][ADC_CHANELS]; +extern uint16_t adc_buf1[ADC_TIMES+1][ADC_CHANELS]; +extern uint16_t adc_buf2[ADC_TIMES+1][ADC_CHANELS]; /* USER CODE END Includes */ extern ADC_HandleTypeDef hadc1; diff --git a/Power_Pico/Core/Src/adc.c b/Power_Pico/Core/Src/adc.c index c0d49b2..2bc152a 100644 --- a/Power_Pico/Core/Src/adc.c +++ b/Power_Pico/Core/Src/adc.c @@ -22,8 +22,10 @@ /* USER CODE BEGIN 0 */ +ADC_Packet adc_packet1, adc_packet2; // cur 5mr, cur 500mr, cur 50r, voltage -uint16_t adc_buf[ADC_TIMES][ADC_CHANELS]; +uint16_t adc_buf1[ADC_TIMES+1][ADC_CHANELS]; +uint16_t adc_buf2[ADC_TIMES+1][ADC_CHANELS]; /* USER CODE END 0 */ @@ -100,7 +102,7 @@ void MX_ADC1_Init(void) Error_Handler(); } /* USER CODE BEGIN ADC1_Init 2 */ - + __HAL_DMA_ENABLE_IT(&hdma_adc1, DMA_IT_TC); /*开启DMA传输完成中断*/ /* USER CODE END ADC1_Init 2 */ } @@ -144,7 +146,7 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_adc1.Init.Mode = DMA_CIRCULAR; + hdma_adc1.Init.Mode = DMA_NORMAL; hdma_adc1.Init.Priority = DMA_PRIORITY_LOW; hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)