我正在使用定时器触发STM32F103C8T6上的ADC1。ADC使用DMA,转换完成后,通过USB(虚拟COM端口)将缓冲区数据发送到电脑。电脑终端上只显示零。
我用STM32CubeIDE和HAL库进行开发。用TIM4及其第4通道作为触发源。生成500 kHz的方波用示波器测试过,如果选择"PWM Generation CH4"选项,可以正确输出500 kHz方波。
测试了在while(1)循环中启动的另外两个单脉冲定时器,工作正常。然后单独编写了ADC的测试代码,使用TIM4 CH4触发ADC,这个也能正常工作。
但是,当我把这两部分代码合并时,就出现了问题。我在ADC回调函数中设置标志位,在while(1)中进行USB传输后重置标志位,但没有效果。也试过在ADC回调中停止ADC和TIM4,在USB传输完成后重新启动,同样无法解决问题。电脑终端上仍然只显示零值。
ADC_ChannelConfTypeDef sConfig = {0};
/* USER CODE BEGIN ADC1_Init 1 */
/* USER CODE END ADC1_Init 1 */
/** Common config
*/
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T4_CC4;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_3;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
|