节后上班,安排时间把节前的任务做一做。通讯测试完了,测试一下14bit A/D外设。连接比较简单,参考板卡原理图,将电位器用杜邦线直接连到3.3V,GND和PC0端口,PC7(LED)端口即可。如图1所示:' B/ Z3 X1 o. y, c/ _' e
然后打开STM32CubeMX,根据需求对时钟,GPIO,AD外设进行配置,具体配置如图2所示:* Q- Z+ e- h: v' N1 z
) p# }& W9 p, a7 r8 W' r% }
生成code,这样大框架就搭好了,主要功能是实现每300ms单次转换后LED翻转一次。在main函数中添加Calibration函数 G: [3 y* y4 `+ j. e! f8 w
- /* Perform ADC calibration */
, Z7 v1 f! q: m) Z& k - if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)
! c1 D9 Y* p; ~% ^1 a - { F+ v* |9 k$ ~: g* J0 U
- /* Calibration Error */
( H# E% p3 ~6 L6 x, V - Error_Handler(); d% g9 T) ^2 U# z: J
- }
复制代码 在while 中添加开始转换中断函数
: g. a* W8 W) c$ `: k1 t$ {5 k- /* Start ADC group regular conversion */
0 p: a+ _0 r v X# S( _2 ?# o - if (HAL_ADC_Start_IT(&hadc1) != HAL_OK)
! V( T% d0 w+ c2 U1 v; S - {1 n1 O, {" r' ?% @9 s- W" W' Y
- /* Error: ADC conversion start could not be performed */; [6 Y3 Y! y* T- ^( F9 g
- Error_Handler();4 W; I9 ?1 T( `
- }2 H, S7 V J- y
- HAL_Delay (300);% _' ~3 |9 {* z' I3 T! `5 l
- HAL_GPIO_TogglePin (GPIOC,GPIO_PIN_7);
复制代码 还需要自己移植一下callback 函数
0 B8 J- A, z( z& ]1 I2 S: h. h: F- void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
4 T6 E* H% g* G, l - {! \% \2 s, x$ z1 }5 ~5 r1 p
- /* Retrieve ADC conversion data */
1 T1 x: c a$ _, B0 {1 x1 k - uhADCxConvertedData = HAL_ADC_GetValue(hadc);$ a c k4 N! X9 C
% r4 G7 o6 d4 T" U3 l- /* Computation of ADC conversions raw data to physical values */
, W% h6 I: d$ \5 Y' b3 ^ - /* using helper macro. */ `& O& ?( I' h, o0 B+ u
- uhADCxConvertedData_Voltage_mVolt = __LL_ADC_CALC_DATA_TO_VOLTAGE(ADC1, VDDA_APPLI, uhADCxConvertedData, LL_ADC_RESOLUTION_14B);
3 {, U! k! x( m# t( u - }
复制代码 这就基本配置完了,但Debug并不顺利,代码一直卡在Error_Handler函数中,不知道什么情况。后来重新使用cubemx生成代码,就可以了。但是AD没有运行。查看了官方硬件开发入门手册,想来应该是VDDA电源没开启,参考了一下官方的例程,在HAL_MspInit 函数中果然有这一段:& I1 Q+ g3 \& j+ M2 o5 O
但是在CubeMX中没找到配置VDDA的地方,不仔细看文档会错过很多内容。; ^, z. h ~7 P; U* `! \" l" {# q
这样再Debug,程序运行正常。转动电位器,在watch窗口中就可以看到转换数值和转换电压,如图3所示:
% f- H% x3 J3 q! y2 [* A% Q初步测试了一下,后边可根据需要再调整。
5 K5 A5 F- B! x9 J9 L' K5 V9 n
: ~/ e. T# }9 B |