手机端自定义做链接网站,网站建设亮点,花园休闲平台设计,wordpress nginx 500错误STM32 ADC — 单通道采样 文章目录 STM32 ADC --- 单通道采样cubeMX配置代码修改#xff1a;应用 使用cubeMX生成HAL工程
需求#xff1a;有多个通道需要进行ADC采样#xff0c;实现每次采样只采样一个通道#xff0c;且可以随时采样不同通道的功能。
cubeMX配置 这里我们…STM32 ADC — 单通道采样 文章目录 STM32 ADC --- 单通道采样cubeMX配置代码修改应用 使用cubeMX生成HAL工程
需求有多个通道需要进行ADC采样实现每次采样只采样一个通道且可以随时采样不同通道的功能。
cubeMX配置 这里我们想通过10通道和11通道分别进行ADC采样。需要注意的是当ADC规则转换中配置的转换数大于1时cubeMX会自动将扫描转换模式使能。但这里我们实际需要扫描转换模式为关闭这里可以等下在代码中修改。还有个需要注意的地方是结束转换的选择单个通道完成转换时即触发EOC标志位
代码修改
为了方便后续继续使用cubeMX生成代码不影响改动我们采用重新初始化ADC的方式来实现需求
void adc1_init(void) {/* 配置ADC引脚 */GPIO_InitTypeDef GPIO_InitStruct {0};GPIO_InitStruct.Pin GPIO_PIN_0 | GPIO_PIN_1;GPIO_InitStruct.Mode GPIO_MODE_ANALOG;HAL_GPIO_Init(GPIOC, GPIO_InitStruct);/* 重新初始化ADC1 */HAL_ADC_DeInit(hadc1);hadc1.Instance ADC1;hadc1.Init.ClockPrescaler ADC_CLOCK_SYNC_PCLK_DIV4;hadc1.Init.Resolution ADC_RESOLUTION_12B;hadc1.Init.ScanConvMode DISABLE; //ENABLE;hadc1.Init.ContinuousConvMode DISABLE;hadc1.Init.DiscontinuousConvMode DISABLE;hadc1.Init.ExternalTrigConvEdge ADC_EXTERNALTRIGCONVEDGE_NONE;hadc1.Init.ExternalTrigConv ADC_SOFTWARE_START;hadc1.Init.DataAlign ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion 1;hadc1.Init.DMAContinuousRequests DISABLE;hadc1.Init.EOCSelection ADC_EOC_SINGLE_CONV;if (HAL_ADC_Init(hadc1) ! HAL_OK){};}uint16_t adc_sample(ADC_HandleTypeDef *hadc, uint32_t adc_channel) {ADC_ChannelConfTypeDef sConfig {0};sConfig.Channel adc_channel;sConfig.Rank 1;sConfig.SamplingTime ADC_SAMPLETIME_56CYCLES;HAL_ADC_ConfigChannel(hadc, sConfig);HAL_ADC_Start(hadc);HAL_ADC_PollForConversion(hadc, 100); //等待转换完成uint16_t value HAL_ADC_GetValue(hadc);return value;
}通过adc1_init()函数将ADC1重新初始化
将扫描转换模式修改为DISABLE将转换通道数设置为1后续还有其它引脚通道需要转换时在配置ADC引脚处添加相关的初始化即可
后续便可以通过adc_sample()函数根据通道号进行ADC采样了这里的采样方式为轮询等待模式。
应用