用STM32CUBE 生成的,用的指南者,PC1,和内部温度采集成程序。
ADC配置:使能扫描转换模式(Scan Conversion Mode),
使能连续转换模式(Continuous Conversion Mode),使能DMA连续请求。ADC规则组选择转换通道数为2(Number Of Conversion)。其他为默认设置。
看了初始化 也是使能了的
hadc1.Init.ContinuousConvMode = ENABLE;
/* ADC1 init function */
void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig;
/**Common config
*/
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 2;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/**Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_11;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/**Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
sConfig.Rank = ADC_REGULAR_RANK_2;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
程序读电位器电压值,调也不会变,不是说连续转换模式是打开的,就是DMA会一直会刷新缓冲区数吗?
一直读都一固定值。
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_Value, 2);
}
在回调里加上重新启动,就可以了,有点疑惑,怎么一开始不会自动刷新数据,要手动启动。 |