打印
[STM32F4]

定时器触发 ADC 连续读数,取值异常

[复制链接]
135|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
地瓜patch|  楼主 | 2025-3-30 20:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 地瓜patch 于 2025-3-30 20:28 编辑

在stm32F407的 PB8 配置定时器的PWM,输出 200us 的  高电 300us低电平。
又使用普通定时器模式创建一个 1.8KHz 波,占空比约为 35%。
在定时器中断处理程序中触发 PB0 上的 adc 转换。
它会持续运行一分钟以上,没有值。然后突然退出到第二个 for 循环,取得的ADC值大部分都无效。

#define ADC_ARRY_SIZE   30uint16_t adc_vals[ADC_ARRY_SIZE] = {0};
uint16_t adc_val = 0;
uint32_t adc_zero_count = 0;
uint32_t index_no = 0;
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
    adc_val = HAL_ADC_GetValue(&hadc3);
    if((adc_val != 0) && (index_no < ADC_ARRY_SIZE))
       adc_vals[index_no++] = adc_val;
    else if(adc_val == 0)
      adc_zero_count++;
}
void set_pwm2_duty(uint32_t duty_count)
{      
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, duty_count);
}
int main(void)
{
     adc_val = 0;
     adc_zero_count = 0;
     index_no = 0;
     adc_buffer_full = false;
     int i;
//Generated code begin
     HAL_Init();
     SystemClock_Config();
     MX_GPIO_Init();
    MX_ADC3_Init();
    MX_TIM2_Init();
    MX_TIM6_Init();
//generated code end
     set_laser_pwm_duty(3000);
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOGPIOB, GPIO_PIN_8, GPIO_PIN_SET);
    HAL_TIM_Base_Start_IT(&htim6);
//start pulse timer
    adc_trigger = true;
     while (1)
    {
       /* USER CODE END WHILE */
        /* USER CODE BEGIN 3 */
       if(index_no >= 30)
             break;
       HAL_Delay(1);
    }
    HAL_TIM_Base_Stop(&htim6);
//start blink timer
    HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1);
    HAL_ADC_Stop_IT(&hadc3);
    for(i=0;i<ADC_ARRY_SIZE;i++)
       ladc_vals = adc_vals;
    for(;;);
}

使用特权

评论回复
沙发
梅花香自123| | 2025-3-31 22:56 | 只看该作者
在运行中,ADC 获取的数据大部分都无效,且程序会在某些时刻退出到第二个 for 循环。

使用特权

评论回复
板凳
elephant00| | 2025-4-1 14:13 | 只看该作者
检查时钟配置是否已经正确配置和开启。

使用特权

评论回复
地板
cr315| | 2025-4-1 18:00 | 只看该作者
检查硬件连接和电源稳定性。

使用特权

评论回复
5
两只袜子| | 2025-4-1 19:00 | 只看该作者
检查中断优先级设置,确保定时器中断和ADC中断不会相互阻塞。

使用特权

评论回复
6
jcky001| | 2025-4-1 19:20 | 只看该作者
可能是由于ADC配置错误、转换未完成或读取时机不正确导致的。检查ADC的配置和读取逻辑。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

1429

主题

13699

帖子

27

粉丝