节后上班,安排时间把节前的任务做一做。通讯测试完了,测试一下14bit A/D外设。连接比较简单,参考板卡原理图,将电位器用杜邦线直接连到3.3V,GND和PC0端口,PC7(LED)端口即可。如图1所示:
2 g8 ^% F5 X; H然后打开STM32CubeMX,根据需求对时钟,GPIO,AD外设进行配置,具体配置如图2所示:
2 U3 z, z1 o# V( j: n/ |9 ?
4 X& E& Q' U3 T: C e生成code,这样大框架就搭好了,主要功能是实现每300ms单次转换后LED翻转一次。在main函数中添加Calibration函数
j+ u1 X, M( f, l, u- /* Perform ADC calibration */
S4 `8 `3 C; R0 e$ d ? - if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)
9 l4 G& b1 C+ W+ F% p- z4 a( S4 x - {
! }! b3 E6 S; Z) C2 k$ @3 O! P - /* Calibration Error *// n) U/ E5 }, v8 Y; f
- Error_Handler();2 f% u; |" c4 P7 b- ^$ N
- }
复制代码 在while 中添加开始转换中断函数# p/ c/ j' G9 k# ?( o
- /* Start ADC group regular conversion */
/ Q8 ]2 r8 K$ ]7 g; J+ r/ G - if (HAL_ADC_Start_IT(&hadc1) != HAL_OK)5 }3 i/ C j) v. C( d4 v
- {
( l4 z1 y4 H7 ^. F \# @ - /* Error: ADC conversion start could not be performed */. V% o( \ I5 @; n
- Error_Handler();
" x# ~6 o4 |" z) }1 L - }
t3 ^6 C5 b1 K, r* V- a5 t - HAL_Delay (300);* M( f( V& N$ L4 {, S4 L
- HAL_GPIO_TogglePin (GPIOC,GPIO_PIN_7);
复制代码 还需要自己移植一下callback 函数
# n0 {/ E+ {7 U, ]1 B& y3 ?" p- void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)! }. e: Z8 r6 s+ J5 R; i6 h
- { T8 C5 ]3 e! E/ ?6 g0 s- q1 Z0 u) h* j7 c
- /* Retrieve ADC conversion data */
6 C( t0 K0 j% K6 L - uhADCxConvertedData = HAL_ADC_GetValue(hadc);
/ X! b' m6 f5 R8 ]$ |
$ @2 O# j' R) n8 t O- /* Computation of ADC conversions raw data to physical values */- y; n4 \1 ^. ~0 A! V) ?1 J9 P
- /* using helper macro. */% q4 C7 h/ C& i, o |3 ^8 }
- uhADCxConvertedData_Voltage_mVolt = __LL_ADC_CALC_DATA_TO_VOLTAGE(ADC1, VDDA_APPLI, uhADCxConvertedData, LL_ADC_RESOLUTION_14B);
8 @# e9 m1 [1 J v v - }
复制代码 这就基本配置完了,但Debug并不顺利,代码一直卡在Error_Handler函数中,不知道什么情况。后来重新使用cubemx生成代码,就可以了。但是AD没有运行。查看了官方硬件开发入门手册,想来应该是VDDA电源没开启,参考了一下官方的例程,在HAL_MspInit 函数中果然有这一段:
`# c* O# b1 y* r# k1 \( L$ B: r* d但是在CubeMX中没找到配置VDDA的地方,不仔细看文档会错过很多内容。
$ p1 D8 R0 y; Z8 l4 p这样再Debug,程序运行正常。转动电位器,在watch窗口中就可以看到转换数值和转换电压,如图3所示:
/ t4 D0 n9 | _" @6 ^& h4 [' l9 X' o! R初步测试了一下,后边可根据需要再调整。
! {; m8 h5 ^& P' ?/ s: B' Y: B- z, t3 F+ y- t% {, C. `5 {( b* W9 t
|