|
这项测试原来认为比较简单,按照原来的设置后来减少为ADC1的通道1、通道6、通道7.通道4,5 留给DAC使用。, y- I! Y' ~7 Y$ [! v8 n: a4 C 因此修改STM32CubeMX为,见图24_2_1~4的选设。导出工程文件。& u: j* V, f) F3 k 现在自定义变量区,定义一下变量: uint16_t ADC_Result[4],adcx[4],adcNum=16;6 O+ B' ]' f, R) X# o4 @ 在自定义程序区添加函数声明,如果函数在main前边,可以不用声明。 void adcTest(void);$ h9 i; c6 o2 T! D" d& A2 T; a 主函数main里添加: MX_ADC1_Init();6 C+ r2 ]- A6 q* {# c 在循环体中将刚才的printf函数改成:0 V! _- E+ ~4 ?( Y printf("ADC1=%4d ADC2=%4d ADC3=%4d \n\r", adcx[0],adcx[1],adcx[2]);/ U/ t- Z' Y5 {2 ^! v 在主函数后边添加:2 S! V! V, [- R: P //ADC Test& X7 a# T: {' ~5 n. F. B void adcTest(void){ int i;" B. H" I% v8 ^/ K1 ]$ n adcx[0]=adcx[1]=adcx[2]=0;/ W+ }% ?9 s& s2 H0 e for(i=0;i<adcNum;i++){. B' j8 c& x- m) Q% V: c9 e HAL_ADCEx_Calibration_Start(&hadc1);//PA_1,6,7 HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC_Result,ADC_NUMOFCHANNEL);; x- B8 D/ p# \! z( m adcx[0]+=ADC_Result[1];4 l+ ]) M, T% W adcx[1]+=ADC_Result[2]; adcx[2]+=ADC_Result[3];6 Z( p1 s* A7 k6 B* S; E" S' ? }2 q5 k3 Y0 ?; R- ` adcx[0]=adcx[0]/adcNum;adcx[1]=adcx[1]/adcNum;adcx[2]=adcx[2]/adcNum; }0 V4 ~8 W# R2 ], n8 v2 s9 K 次函数的作用是调用测试一轮ADC 的3个输入通道,测试次数由adcNum的只值决定,本例为16次平均。5 l/ B4 _* J* F0 D! R! j8 i9 G 结果见截图23_2_5。 |
23-5
23-5
23-5
23-5
23-5
谢谢分享 |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
微信公众号
手机版