本文共 1869 字,大约阅读时间需要 6 分钟。
/* USER CODE BEGIN Includes */#include "stdio.h"/* USER CODE END Includes *//* USER CODE BEGIN PD */#ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch,FILE F)#endifPUTCHAR_PROTOTYPE{ LL_USART_TransmitData8(USART2, (uint8_t)ch); while(!LL_USART_IsActiveFlag_TXE(USART2)){ } return ch;}/* USER CODE END PD *//* USER CODE BEGIN PV */uint16_t ADC_ConvertedValue[150];uint8_t i;uint32_t ad0,ad1,ad4;/* USER CODE END PV *//* USER CODE BEGIN 0 */void ADC_DMA_Config_Start(void){ LL_mDelay(2); //延时2ms,避免DMA读取数据通道不对 // LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH); LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 150); LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue); LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA)); LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); LL_ADC_StartCalibration(ADC1); while(LL_ADC_IsCalibrationOnGoing(ADC1)); LL_ADC_Enable(ADC1); LL_ADC_REG_StartConversion(ADC1); LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);}/* USER CODE END 0 *//* USER CODE BEGIN 2 */ printf("STM32CubeMX Test...\r\n"); ADC_DMA_Config_Start(); /* USER CODE END 2 *//* USER CODE BEGIN 3 */ for(i = 0,ad0 = 0,ad1 = 0,ad4 = 0; i < 150;){ ad0 += ADC_ConvertedValue[i++]; ad1 += ADC_ConvertedValue[i++]; ad4 += ADC_ConvertedValue[i++]; } ad0 /= 50; // 实现均匀滤波 ad1 /= 50; // 实现均匀滤波 ad4 /= 50; // 实现均匀滤波// printf("ADC->CH1 Value:%lf\r\n",(float)ad0*3.3/4095);// printf("ADC->CH2 Value:%lf\r\n",(float)ad1*3.3/4095);// printf("ADC->CH4 Value:%lf\r\n",(float)ad4*3.3/4095); printf("ADC Value:%lf,%lf,%lf\r\n",(float)ad0*3.3/4095,(float)ad1*3.3/4095,(float)ad4*3.3/4095); } /* USER CODE END 3 */
转载地址:http://gwccz.baihongyu.com/