新手上路
- 积分
- 29
- 金钱
- 29
- 注册时间
- 2013-3-26
- 在线时间
- 3 小时
|
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也没用, 这是为什么????
|
|