|
A/D功能在模拟信号采集中用的很多,查看DATASHEET,该款芯片有两个AD可用,通道数达到23个。查看了一下例程,通过例程来学习理解G431的AD应用。这次测试找了一个小电位器,焊几根线到测试板上,连接3.3V,GND,PA1,就可以进行测试了。如图1所示: 通过例程学习到,AD通过TIM1触发,DMA管理来完成数据转换的,移植过来,理解一下即可。 还是初始化时钟,依然使用内部时钟。初始化引脚,初始化外设功能,部分参考代码如下: 此处需要修改 - sConfig.Channel = ADC_CHANNEL_2;//ADC_CHANNEL_6;
- sConfig.Rank = ADC_REGULAR_RANK_1;
- sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;
- sConfig.SingleDiff = ADC_SINGLE_ENDED;
- sConfig.OffsetNumber = ADC_OFFSET_NONE;
- sConfig.Offset = 0;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
复制代码- __HAL_RCC_ADC12_CLK_ENABLE();
-
- __HAL_RCC_GPIOA_CLK_ENABLE();
- GPIO_InitStruct.Pin = GPIO_PIN_1;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码 其他的可参照例程理解。
编译,下载,通过DEBUG模式,将转换数据加载到watch1窗口中,通过螺丝刀转动电位器,观测电位器数值的变化,如图2所示。 最小值为0,最大值并不是预想的0xFFF。又看了一遍datasheet,A/D的转换范围为0-3.6V,板子上接的3.3V,想来原因就是这个。如图3所示。 关于A/D的数值抖动,的确是需要做些处理
|