OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 74|回复: 0

STM32F407裸机时ADC很稳,使用FreeRTOS后波动变大

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-3-26
在线时间
3 小时
发表于 2025-1-10 10:03:22 | 显示全部楼层 |阅读模式
5金钱
最近为了测试STM32F407的ADC,特意画了一个最小系统测试ADC的效果。
电路只有5路电压采集和一个串口打印功能。
采样周期也试了

采集方式: 使用定时器1ms触发+DMA方式采集数据, 长度512个字节。
代码生成是使用STM32CUBEMX.
ADC数据处理如下:

// 使用TIM3触发,APB1=84MHz
volatile uint16_t adc1_buffer[ADC1_LEN*ADC1_CH_NUM] = {0};
uint8_t  flag = 0;

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)    //ADC转换完成回调
{
        if(hadc->Instance == ADC1)
        {
                //HAL_TIM_Base_Stop(&htim3);
                HAL_ADC_Stop_DMA(&hadc1);
                flag = 1;
        }
}



  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
                if(flag == 1)
                {
                        flag = 0;
                        for(uint16_t i=0; i<ADC1_LEN; i++)
                        {
                                printf("%d, %d\r\n", adc1_buffer[3*i+1], adc1_buffer[3*i+2]);
                        }
                        //HAL_TIM_Base_Start(&htim3);        
                        HAL_ADC_Start_DMA(&hadc1, (uint32_t *)&adc1_buffer, ADC1_LEN*ADC1_CH_NUM);
                }

}


问题:
当我使用裸机的时候,采集到的ADC数据是很稳的, 基本就2个值的波动。




但是我只在cubemx上选择FreeRTOS,系统参数都是默认的,这时采集到的ADC数据波动就变大了,有十几个值的波动,
FreeRTOS的系统时钟由1ms改为10ms,100ms也没用, 这是为什么????

裸机时的ADC数据波动

裸机时的ADC数据波动

使用FreeRTOS时的ADC数据波动

使用FreeRTOS时的ADC数据波动

STM32F407_Prj.zip

7.99 MB, 下载次数: 2

裸机程序

STM32F407_osPrj.zip

9.02 MB, 下载次数: 1

FreeRTOS程序

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-1-19 02:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表