A/D功能在模拟信号采集中用的很多,查看DATASHEET,该款芯片有两个AD可用,通道数达到23个。查看了一下例程,通过例程来学习理解G431的AD应用。这次测试找了一个小电位器,焊几根线到测试板上,连接3.3V,GND,PA1,就可以进行测试了。如图1所示: 通过例程学习到,AD通过TIM1触发,DMA管理来完成数据转换的,移植过来,理解一下即可。 还是初始化时钟,依然使用内部时钟。初始化引脚,初始化外设功能,部分参考代码如下: 此处需要修改 - sConfig.Channel = ADC_CHANNEL_2;//ADC_CHANNEL_6;% W- g2 k# `3 `0 A* X
- sConfig.Rank = ADC_REGULAR_RANK_1;$ u" a7 t; u9 p' w R9 b5 B
- sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;; i0 n3 I8 l2 K9 f" m* b; M
- sConfig.SingleDiff = ADC_SINGLE_ENDED;7 y! c. ^) N- q! N( M# L) ^0 i2 }3 W2 V
- sConfig.OffsetNumber = ADC_OFFSET_NONE;
/ A# W# F n5 B2 W - sConfig.Offset = 0;& k# c6 O; D9 j9 L2 H
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
, h; h7 r' r0 Y% e- A- I7 J - {
7 E5 ?: A0 {; K1 {% w% m6 | - Error_Handler();# `, J( i v* l; D: c( V! K1 Z
- }
复制代码- __HAL_RCC_ADC12_CLK_ENABLE();
) P2 ^( l, I8 T- x- I: ] - 7 U _5 O6 j$ C K; | n
- __HAL_RCC_GPIOA_CLK_ENABLE();2 `% h5 X6 I# {2 H0 C, }" w
- GPIO_InitStruct.Pin = GPIO_PIN_1;5 ]" ?; J8 j, x' W ?5 m/ Y
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;) j& P0 }, m0 l1 m# J
- GPIO_InitStruct.Pull = GPIO_NOPULL;3 X, [, z! N1 L" X5 i
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码 其他的可参照例程理解。& W9 e8 [& h& J) z
编译,下载,通过DEBUG模式,将转换数据加载到watch1窗口中,通过螺丝刀转动电位器,观测电位器数值的变化,如图2所示。 最小值为0,最大值并不是预想的0xFFF。又看了一遍datasheet,A/D的转换范围为0-3.6V,板子上接的3.3V,想来原因就是这个。如图3所示。 关于A/D的数值抖动,的确是需要做些处理, \/ v% y5 {0 i* T. C$ A$ r
7 o9 D+ X( E. g6 m1 v& g |