在原先的工程基础上,来继续F7的学习,今天想了解下STM32F7的ADC功能,首先背面的arudino排针座,我全给拆了,因为手上没有相应的模块,全部焊接成插针,方便我的使用和学习,看看这彩色的插针效果还不错吧,
就是拆的时候比较费劲,下面我们查看原理图找到我们需要使用的AD口
使用ADC1模块,首先需要进行IO的初始化,
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_ADC1_CLK_ENABLE();
/**ADC1
PC2 ------> ADC1_IN12
PA4 ------> ADC1_IN4
PA6 ------> ADC1_IN6
*/
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
设置为模拟输入,无上拉
下面进行ADC1的初始化
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; //四分频
hadc1.Init.Resolution = ADC_RESOLUTION_12B; //12位精度
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
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)
{
Error_Handler();
}
在进行了ADC1初始化后,我们在读取ADC之前需要对通道进行初始化
ADC_ChannelConfTypeDef sConfig;
sConfig.Channel = ADC_CHANNEL_6; //通道6
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
if (HAL_ADC_ConfigChannel(&hadc1,&sConfig)!=HAL_OK)
{
Error_Handler();
}
我们在while(1)中简单调用
HAL_ADC_Start(&hadc1);
printf("%d\r\n",HAL_ADC_GetValue(&hadc1));
HAL_ADC_Stop(&hadc1);
HAL_Delay(500);
就可以看到现象了,我们这边手焊接了一个电位器用于ADC的测试,用螺丝刀拧动电位器就可以看到现象了。
同样的我们将ADC的值显示在电容屏上。
点击此处,查看STM32F769I开发板官方资源。