这项测试原来认为比较简单,按照原来的设置后来减少为ADC1的通道1、通道6、通道7.通道4,5 留给DAC使用。: w( z s* E. @4 b7 C$ w5 w 因此修改STM32CubeMX为,见图24_2_1~4的选设。导出工程文件。1 w6 Z1 t, P/ A2 X- u) _ 现在自定义变量区,定义一下变量: uint16_t ADC_Result[4],adcx[4],adcNum=16;6 H- M7 \2 [# V+ C8 u 在自定义程序区添加函数声明,如果函数在main前边,可以不用声明。' Q6 Y8 {2 l1 O: y" c3 x. n void adcTest(void); p b* S+ i) R$ R' l 主函数main里添加:+ g* h, _1 `6 w- O( O MX_ADC1_Init();! \" ^) z* \! \) G" Q 在循环体中将刚才的printf函数改成:0 z1 E$ u8 E/ q0 Y% b% G printf("ADC1=%4d ADC2=%4d ADC3=%4d \n\r", adcx[0],adcx[1],adcx[2]);5 t9 o6 b2 }/ Z4 ]/ w 在主函数后边添加:$ C, f1 R9 `) M6 \ M6 E- L //ADC Test void adcTest(void){ int i; adcx[0]=adcx[1]=adcx[2]=0; for(i=0;i<adcNum;i++){ HAL_ADCEx_Calibration_Start(&hadc1);//PA_1,6,7 HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC_Result,ADC_NUMOFCHANNEL); adcx[0]+=ADC_Result[1]; adcx[1]+=ADC_Result[2];3 A+ T( p1 D/ B* g adcx[2]+=ADC_Result[3]; } adcx[0]=adcx[0]/adcNum;adcx[1]=adcx[1]/adcNum;adcx[2]=adcx[2]/adcNum; }( [% j4 z8 f* m/ M( Y- B) ?0 r 次函数的作用是调用测试一轮ADC 的3个输入通道,测试次数由adcNum的只值决定,本例为16次平均。2 Y$ [* I+ E: t$ M* \ 结果见截图23_2_5。 , k; d1 O6 Y7 N' ?* \ |
23-5
23-5
23-5
23-5
23-5
谢谢分享 |
小马哥STM32F103开源小四轴RoboFly全部资料大放送
STM32固件库分享,超全系列整理
【MCU实战经验】+STM32F107的USB使用
基于STM32F103两轮平衡小车设计(开源)
STM32F107VCT6官方原理图和PCB
【福利】用STM32库的朋友有福了:STM32F10x_StdPeriph_Lib_V3.5.0chm...
基于STM32F10xx存储器和系统架构经验分享
基于STM32F1的CAN通信之BH1750
基于STM32F1的CAN通信之OLED
基于STM32F1的CAN通信之之串口IAP