STM32H7实现ADC等周期采集(定时器触发+DMA传输)

定时器输出的PWM通道设置的是2s的周期,50%占空比,方便没有示波器的条件下观察结果。 数据会2s采集一次,500ms打印一次。 主函数代码

u16 buffer[128];
int main(void)
{
          
   
    u16 adcx;
    //Cache_Enable();                 //打开L1-Cache
    HAL_Init();                           //初始化HAL库
    Stm32_Clock_Init(200, 2, 2, 2); //设置时钟,400Mhz
    delay_init(400);                        //延时初始化
    uart_init(115200);                  //串口初始化
    printf("hello
");
    MX_DMA_Init();
    MX_ADC1_Init();
	MX_TIM3_Init();
	
	HAL_ADC_Start_DMA(&hadc1, (uint32_t *)buffer, 16);
	HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
	

    while (1)
    {
          
   
        printf("
value:");
        for (int i = 0; i < 32; i++)
        {
          
   
            if (i % 8 == 0)   printf("
");
            printf("%d	", buffer[i]);              //返回最近一次ADC1规则组的转换结果
        }
        delay_ms(500);
    }
}

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
          
   
    printf("DMA transfer complete
");
}
void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc)
{
          
   
    printf("DMA Half transfer complete
");
}

void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
{
          
   
    printf("DMA transfer error
");
}



void Error_Handler(void)
{
          
   
    /* USER CODE BEGIN Error_Handler_Debug */
    /* User can add his own implementation to report the HAL error return state */

    /* USER CODE END Error_Handler_Debug */
}

数据读取效果:

经验分享 程序员 微信小程序 职场和发展