ADC_DMA_TIM
- /**************************************************************************
- * 文件名:ADC.h *
- * 编写人:离逝的风 *
- * 更新时间:2018.12.25 *
- * 说明:此文件属于开源,所有权对任何人开放 *
- * 如有问题请联系邮箱:1477153217@qq.com *
- * 使用步骤: *
- * 1.开启ADCx_EN设置为1 *
- * 2.设置通道数量ADCx_Lenth *
- * 3.选择定时器触发并设置相关配置 *
- * 4.设置各个通道转换周期 *
- * 4.在主函数中使用ADCx_Init初始化 *
- * 5.在ADCx_BUFF为转换数据结果 *
- ***************************************************************************/
- //注意:下面使用的是DMA传输数据,不需要CPU参与!只能从0通道开始转换,依次转换
- #ifndef __ADC_H
- #define __ADC_H
- #include "stm32f10x.h"
- /**#############################下面为所有ADC通道引脚说明##########################################*/
- /*-------------------------------------------------------------------------------------------------
- ADC1:
- CH0->PA0 CH1->PA0 CH2->PA2 CH3->PA3 CH4->PA4 CH5->PA5 CH6->PA6 CH7->PA7
- CH8->PB0 CH9->PB1 CH10->PC0 CH11->PC1 CH12->PC2 CH13->PC3 CH14->PC4 CH15->PC5
- CH16->温度传感器 CH17->内部参考电压
- ---------------------------------------------------------------------------------------------------
- ADC2:
- CH0->PA0 CH1->PA0 CH2->PA2 CH3->PA3 CH4->PA4 CH5->PA5 CH6->PA6 CH7->PA7
- CH8->PB0 CH9->PB1 CH10->PC0 CH11->PC1 CH12->PC2 CH13->PC3 CH14->PC4 CH15->PC5
- ---------------------------------------------------------------------------------------------------
- ADC3:
- CH0->PA0 CH1->PA0 CH2->PA2 CH3->PA3 CH4->PF6 CH5->PF7 CH6->PF8 CH7->PF9
- CH8->PF10 -------- CH10->PC0 CH11->PC1 CH12->PC2 CH13->PC3 -------- --------
- --------------------------------------------------------------------------------------------------*/
- /**#############################下面为文件配置,根据用户需求修改##################################**/
- //需要的功能设置为1,否则设置为0,默认为0
- #define ADC1_EN 1
- #define ADC3_EN 0
- /*##############################下面为ADC传输长度################################################*/
- //比如有五个传感器则需要定义长度为5
- //取值范围1-16
- /*****从0通道开始转换*******/
- #define ADC1_Lenth 3
- #define ADC3_Lenth 3
- /**#############################下面为ADC存储数据缓存区###########################################**/
- //所有的转换结果会保存在下面的数组中
- extern unsigned int ADC1_BUFF[ADC1_Lenth+];
- extern unsigned int ADC3_BUFF[ADC3_Lenth+];
- /**#############################下面为ADC触发定时器设置###########################################**/
- //定时器选择
- // 1:定时器1 2:定时器2 4:定时器4
- #define ADC1_TRR 1
- // 1:定时器1 2:定时器2 3:定时器3
- #define ADC3_TRR 2
- //定时器预分频值 时钟来自72MHz
- #define ADC1_PSC 719
- #define ADC3_PSC 719
- //定时器比较输出值
- #define ADC1_CCR 100
- #define ADC3_CCR 100
- //定时器预装值
- #define ADC1_ARR 200
- #define ADC3_ARR 200
- /*##############################ADC时钟分频定义,需用户选择,默认6分频即72/6=12M####################*/
- //备注:取值0-3 该时钟来自72MHz的PLL时钟,经过分频后作为ADC时钟
- // 0:2分频 1:4分频 2:6分频 3:8分频
- #define ADC_CLK_PRE 2
- /*###############################ADC转换周期定义,默认239.5周期#####################################*/
- //备注:取值0-7 每个通道的转换周期设置
- // 0:1.5周期 1:7.5周期 2:13.5周期 3:28.5周期 4:41.5周期 5:55.5周期
- // 6:71.5周期 7:239.5周期
- #define ADC1_CH0_SMPR 7
- #define ADC1_CH1_SMPR 7
- #define ADC1_CH2_SMPR 7
- #define ADC1_CH3_SMPR 7
- #define ADC1_CH4_SMPR 7
- #define ADC1_CH5_SMPR 7
- #define ADC1_CH6_SMPR 7
- #define ADC1_CH7_SMPR 7
- #define ADC1_CH8_SMPR 7
- #define ADC1_CH9_SMPR 7
- #define ADC1_CH10_SMPR 7
- #define ADC1_CH11_SMPR 7
- #define ADC1_CH12_SMPR 7
- #define ADC1_CH13_SMPR 7
- #define ADC1_CH14_SMPR 7
- #define ADC1_CH15_SMPR 7
- #define ADC3_CH0_SMPR 7
- #define ADC3_CH1_SMPR 7
- #define ADC3_CH2_SMPR 7
- #define ADC3_CH3_SMPR 7
- #define ADC3_CH4_SMPR 7
- #define ADC3_CH5_SMPR 7
- #define ADC3_CH6_SMPR 7
- #define ADC3_CH7_SMPR 7
- #define ADC3_CH8_SMPR 7
- #define ADC3_CH10_SMPR 7
- #define ADC3_CH11_SMPR 7
- #define ADC3_CH12_SMPR 7
- #define ADC3_CH13_SMPR 7
- /*##############################下面为ADC接口函数,供用户使用#######################################*/
- /**-----------------ADC1---------------------------------*/
- #if(ADC1_EN==1)
- //函数名:ADC1_Init
- //参数:无
- //返回值:无
- //功能:ADC1初始化函数
- void ADC1_Init(void);
- #endif
- /**-----------------ADC3---------------------------------*/
- #if(ADC3_EN==1)
- //函数名:ADC3_Init
- //参数:无
- //返回值:无
- //功能:ADC3初始化函数
- void ADC3_Init(void);
- #endif
- #endif
- //FILE END
- /**************************************************************************
- * 文件名:ADC.c *
- * 编写人:离逝的风 *
- * 更新时间:2018.12.25 *
- * 说明:此文件属于开源,所有权对任何人开放 *
- * 如有问题请联系邮箱:1477153217@qq.com *
- * 使用步骤: *
- * 1.开启ADCx_EN设置为1 *
- * 2.设置通道数量ADCx_Lenth *
- * 3.选择定时器触发并设置相关配置 *
- * 4.设置各个通道转换周期 *
- * 4.在主函数中使用ADCx_Init初始化 *
- * 5.在ADCx_BUFF为转换数据结果 *
- ***************************************************************************/
- #include "ADC.h"
- unsigned int ADC1_BUFF[ADC1_Lenth+]={};
- unsigned int ADC3_BUFF[ADC3_Lenth+]={};
- /*###############################下面为ADC1#################################################*/
- #if(ADC1_EN==1)
- void ADC1_Init(void)
- {
- RCC->APB2ENR|=(<<)|(<<); //开启ADC1与复用功能时钟
- RCC->CFGR&=(~(<<)); //清除ADC1分频的值
- RCC->CFGR|=(ADC_CLK_PRE<<); //让ADC的预分频为6,得到72/6=12M的ADC时钟
- ADC1->SQR1&=(~(<<)); //清楚转换通道数
- ADC1->SQR1|=((ADC1_Lenth-)<<); //设置转换通道个数位ADC1_Lenth
- #if(ADC1_Lenth==1)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR3|=(<<); //规则0
- #endif
- #if(ADC1_Lenth==2)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR3|=(<<)|(<<); //规则序号
- #endif
- #if(ADC1_Lenth==3)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR3|=(<<)|(<<)|(<<); //规则序号
- #endif
- #if(ADC1_Lenth==4)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR3|=(<<)|(<<)|(<<)|(<<); //规则序号
- #endif
- #if(ADC1_Lenth==5)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- #endif
- #if(ADC1_Lenth==6)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
- GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- #endif
- #if(ADC1_Lenth==7)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
- GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
- GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
- ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC1->SQR2|=(<<)
- #endif
- #if(ADC1_Lenth==8)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
- GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
- GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA7设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
- ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC1->SQR2|=(<<)|(<<);
- #endif
- #if(ADC1_Lenth==9)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
- GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
- GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
- ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC1->SQR2|=(<<)|(<<)|(<<);
- #endif
- #if(ADC1_Lenth==10)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
- GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
- GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
- GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
- ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC1->SQR2|=(<<)|(<<)|(<<)|(<<);
- #endif
- #if(ADC1_Lenth==11)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
- GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
- GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
- GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
- GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
- ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC1->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<);
- #endif
- #if(ADC1_Lenth==12)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
- GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
- GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
- GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
- GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
- GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
- ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC1->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
- #endif
- #if(ADC1_Lenth==13)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
- GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
- GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
- GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
- GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
- GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
- GPIOC->CRL&=0XFFFFF0FF;GPIOC->CRL|=0X00000000; //GPIOC2设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
- ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC1->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
- ADC1->SQR1|=(<<);
- #endif
- #if(ADC1_Lenth==14)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
- GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
- GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
- GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
- GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
- GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
- GPIOC->CRL&=0XFFFFF0FF;GPIOC->CRL|=0X00000000; //GPIOC2设置为模拟输入
- GPIOC->CRL&=0XFFFF0FFF;GPIOC->CRL|=0X00000000; //GPIOC3设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
- ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC1->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
- ADC1->SQR1|=(<<)|(<<);
- #endif
- #if(ADC1_Lenth==15)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
- GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
- GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
- GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
- GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
- GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
- GPIOC->CRL&=0XFFFFF0FF;GPIOC->CRL|=0X00000000; //GPIOC2设置为模拟输入
- GPIOC->CRL&=0XFFFF0FFF;GPIOC->CRL|=0X00000000; //GPIOC3设置为模拟输入
- GPIOC->CRL&=0XFFF0FFFF;GPIOC->CRL|=0X00000000; //GPIOC4设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
- ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC1->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
- ADC1->SQR1|=(<<)|(<<)|(<<);
- #endif
- #if(ADC1_Lenth==16)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
- GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
- GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
- GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
- GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
- GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
- GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
- GPIOC->CRL&=0XFFFFF0FF;GPIOC->CRL|=0X00000000; //GPIOC2设置为模拟输入
- GPIOC->CRL&=0XFFFF0FFF;GPIOC->CRL|=0X00000000; //GPIOC3设置为模拟输入
- GPIOC->CRL&=0XFFF0FFFF;GPIOC->CRL|=0X00000000; //GPIOC4设置为模拟输入
- GPIOC->CRL&=0XFF0FFF0F;GPIOC->CRL|=0X00000000; //GPIOC5设置为模拟输入
- ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
- ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
- ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
- ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC1->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
- ADC1->SQR1|=(<<)|(<<)|(<<)|(<<);
- #endif
- ADC1->CR1&=0X00; //清除CR1位
- ADC1->CR1|=(<<); //使用扫描模式
- ADC1->CR1|=(<<);
- ADC1->CR2&=0X00; //清除CR2位
- #if(ADC1_TRR==1)
- ADC1->CR2|=(<<); //选择定时器1事件1触发
- #endif
- #if(ADC1_TRR==2)
- ADC1->CR2|=(<<); //选择定时器2事件2触发
- #endif
- #if(ADC1_TRR==4)
- ADC1->CR2|=(<<); //选择定时器4事件4触发
- #endif
- ADC1->CR2|=(<<)|(<<); //1<<20非常重要,必须使用外部事件启动转换
- ADC1->CR2|=(<<); //使用DMA
- ADC1->CR2|=(<<); //单次转换模式
- ADC1->CR2|=<<; //复位校准(初始化校准)
- while(ADC1->CR2&(<<)); //等待校准初始化完成
- ADC1->CR2|=<<; //开始校准
- while(ADC1->CR2&(<<)); //等待校准完成
- ADC1->CR2|=<<; //开始转换规则通道
- /**********************下面位DMA设置*****************************/
- RCC->AHBENR|=0x01; //开启DMA时钟
- DMA1_Channel1->CCR&=;
- DMA1_Channel1->CCR|=(<<); //非存储器到存储器
- DMA1_Channel1->CCR|=(<<); //优先级最高
- DMA1_Channel1->CCR|=(<<); //缓存区数据宽度32位 说明:地址长度为32,所以设置32位宽度
- DMA1_Channel1->CCR|=(<<); //外设数据宽度32位
- DMA1_Channel1->CCR|=(<<); //执行存储区地址增量
- DMA1_Channel1->CCR|=(<<); //不执行外设地址增量
- DMA1_Channel1->CCR|=(<<); //循环模式
- DMA1_Channel1->CCR|=(<<); //传输方向:从外设读
- DMA1_Channel1->CNDTR|=ADC1_Lenth; //定义传输数量
- DMA1_Channel1->CMAR|=(unsigned long)(ADC1_BUFF); //定义传输外设地址
- DMA1_Channel1->CPAR|=(unsigned long)(&ADC1->DR); //定义传输目标地址,即存储区地址
- DMA1_Channel1->CCR|=(<<); //启动DMA传输
- /******************************************************************/
- /********************下面为TIM触发设置****************************/
- #if(ADC1_TRR==1) //如果选择TIM1
- RCC->APB2ENR|=(<<); //开启TIM1时钟
- TIM1->CR1&=; //清除寄存器值
- TIM1->CR1|=(<<); //不使用分频设置,即72MHz
- TIM1->CR1|=(<<); //使能自动重装
- TIM1->CR1|=(<<); //计数器向上或者向下
- TIM1->CR1|=(<<); //计数器向上
- TIM1->CCMR1&=; //清除寄存器值
- TIM1->CCMR1|=(<<); //设置为PWM1模式
- TIM1->CCMR1|=(<<); //设置为输出 即OC1
- TIM1->CCER|=(<<); //捕获输出极性高电平有效
- TIM1->CCER|=(<<); //使能捕获输出1 即OC1
- TIM1->PSC&=0x00; //清除预分频值
- TIM1->PSC|=ADC1_PSC; //预分频值
- TIM1->CCR1&=0X00; //清除比较值
- TIM1->CCR1|=ADC1_CCR; //比较值
- TIM1->ARR&=0X00; //清除重装初值
- TIM1->ARR|=ADC1_ARR; //重装初值
- TIM1->BDTR|=(<<); //开启事件输出使能
- TIM1->CR1|=(<<); //启动定时器计数
- #endif
- #if(ADC1_TRR==2) //如果选择TIM2
- RCC->APB1ENR|=(<<); //开启TIM2时钟
- TIM2->CR1&=; //清除寄存器值
- TIM2->CR1|=(<<); //不使用分频设置,即72MHz
- TIM2->CR1|=(<<); //使能自动重装
- TIM2->CR1|=(<<); //计数器向上或者向下
- TIM2->CR1|=(<<); //计数器向上
- TIM2->CCMR1&=; //清除寄存器值
- TIM2->CCMR1|=(<<); //设置为PWM1模式
- TIM2->CCMR1|=(<<); //设置为输出
- TIM2->CCER|=(<<); //捕获输出极性高电平有效
- TIM2->CCER|=(<<); //使能捕获输出 OC2
- TIM2->PSC&=0x00; //清除预分频值
- TIM2->PSC|=ADC1_PSC; //预分频值
- TIM2->CCR2&=0X00; //清除比较值
- TIM2->CCR2|=ADC1_CCR; //比较值
- TIM2->ARR&=0X00; //清除重装初值
- TIM2->ARR|=ADC1_ARR; //重装初值
- TIM2->CR1|=(<<); //启动定时器计数
- #endif
- #if(ADC1_TRR==4) //如果选择TIM4
- RCC->APB1ENR|=(<<); //开启TIM4时钟
- TIM4->CR1&=; //清除寄存器值
- TIM4->CR1|=(<<); //不使用分频设置,即72MHz
- TIM4->CR1|=(<<); //使能自动重装
- TIM4->CR1|=(<<); //计数器向上或者向下
- TIM4->CR1|=(<<); //计数器向上
- TIM4->CCMR2&=; //清除寄存器值
- TIM4->CCMR2|=(<<); //设置为PWM1模式
- TIM4->CCMR2|=(<<); //设置为输出
- TIM4->CCER|=(<<); //捕获输出极性高电平有效
- TIM4->CCER|=(<<); //使能捕获输出 OC4
- TIM4->PSC&=0x00; //清除预分频值
- TIM4->PSC|=ADC1_PSC; //预分频值
- TIM4->CCR4&=0X00; //清除比较值
- TIM4->CCR4|=ADC1_CCR; //比较值
- TIM4->ARR&=0X00; //清除重装初值
- TIM4->ARR|=ADC1_ARR; //重装初值
- TIM4->CR1|=(<<); //启动定时器计数
- #endif
- }
- #endif
- /*###############################下面为ADC3#################################################*/
- #if(ADC3_EN==1)
- void ADC3_Init(void)
- {
- RCC->APB2ENR|=(<<)|(<<); //开启ADC3与复用功能时钟
- RCC->CFGR&=(~(<<)); //清除ADC3分频的值
- RCC->CFGR|=(ADC_CLK_PRE<<); //让ADC的预分频为6,得到72/6=12M的ADC时钟
- ADC3->SQR1&=~(0XF<<); //设置转换通道个数为1
- ADC3->SQR1|=((ADC3_Lenth-)<<); //设置转换通道个数位ADC3_Lenth
- #if(ADC3_Lenth==1)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<); //规则序号
- #endif
- #if(ADC3_Lenth==2)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<)|(<<); //规则序号
- #endif
- #if(ADC3_Lenth==3)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<)|(<<)|(<<); //规则序号
- #endif
- #if(ADC3_Lenth==4)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<)|(<<)|(<<)|(<<); //规则序号
- #endif
- #if(ADC3_Lenth==5)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- #endif
- #if(ADC3_Lenth==6)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- #endif
- #if(ADC3_Lenth==7)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
- GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC3->SQR2|=(<<);
- #endif
- #if(ADC3_Lenth==8)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
- GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
- GPIOF->CRH&=0XFFFFFF0F;GPIOF->CRH|=0X00000000; //GPIOF9设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC3->SQR2|=(<<)|(<<);
- #endif
- #if(ADC3_Lenth==9)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
- GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
- GPIOF->CRH&=0XFFFFFF0F;GPIOF->CRH|=0X00000000; //GPIOF9设置为模拟输入
- GPIOF->CRH&=0XFFFFF0FF;GPIOF->CRH|=0X00000000; //GPIOF10设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC3->SQR2|=(<<)|(<<)|(<<);
- #endif
- #if(ADC3_Lenth==10)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
- GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
- GPIOF->CRH&=0XFFFFFF0F;GPIOF->CRH|=0X00000000; //GPIOF9设置为模拟输入
- GPIOF->CRH&=0XFFFFF0FF;GPIOF->CRH|=0X00000000; //GPIOF10设置为模拟输入
- GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC3->SQR2|=(<<)|(<<)|(<<)|(<<);
- #endif
- #if(ADC3_Lenth==11)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
- GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
- GPIOF->CRH&=0XFFFFFF0F;GPIOF->CRH|=0X00000000; //GPIOF9设置为模拟输入
- GPIOF->CRH&=0XFFFFF0FF;GPIOF->CRH|=0X00000000; //GPIOF10设置为模拟输入
- GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
- GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC3->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<);
- #endif
- #if(ADC3_Lenth==12)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
- GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
- GPIOF->CRH&=0XFFFFFF0F;GPIOF->CRH|=0X00000000; //GPIOF9设置为模拟输入
- GPIOF->CRH&=0XFFFFF0FF;GPIOF->CRH|=0X00000000; //GPIOF10设置为模拟输入
- GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
- GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
- GPIOC->CRL&=0XFFFFF0FF;GPIOC->CRL|=0X00000000; //GPIOC2设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC3->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
- #endif
- #if(ADC3_Lenth==13)
- GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
- GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
- GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
- GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
- GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
- GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
- GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
- GPIOF->CRH&=0XFFFFFF0F;GPIOF->CRH|=0X00000000; //GPIOF9设置为模拟输入
- GPIOF->CRH&=0XFFFFF0FF;GPIOF->CRH|=0X00000000; //GPIOF10设置为模拟输入
- GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
- GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
- GPIOC->CRL&=0XFFFFF0FF;GPIOC->CRL|=0X00000000; //GPIOC2设置为模拟输入
- GPIOC->CRL&=0XFFFF0FFF;GPIOC->CRL|=0X00000000; //GPIOC3设置为模拟输入
- ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
- /** 下面为设置各个通道周期 **/
- ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
- ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
- ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
- /**下面为设置转换规则通道**/
- ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
- ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
- ADC3->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
- ADC3->SQR1|=(<<);
- #endif
- ADC3->CR1&=0X00; //清除CR1位
- ADC3->CR1|=(<<); //使用扫描模式
- ADC3->CR2&=0X00; //清除CR2位
- #if(ADC3_TRR==1)
- ADC3->CR2|=(<<); //选择定时器1事件3触发
- #endif
- #if(ADC3_TRR==2)
- ADC3->CR2|=(<<); //选择定时器2事件3触发
- #endif
- #if(ADC3_TRR==3)
- ADC3->CR2|=(<<); //选择定时器3事件1触发
- #endif
- ADC3->CR2|=(<<)|(<<); //1<<20非常重要,必须使用外部事件启动转换
- ADC3->CR2|=(<<); //使用DMA
- ADC3->CR2|=(<<); //单次转换模式
- ADC3->CR2|=<<; //复位校准(初始化校准)
- while(ADC3->CR2&(<<)); //等待校准初始化完成
- ADC3->CR2|=<<; //开始校准
- while(ADC3->CR2&(<<)); //等待校准完成
- ADC3->CR2|=<<; //开始转换规则通道
- /**********************下面位DMA设置*****************************/
- RCC->AHBENR|=0x02; //开启DMA时钟
- DMA2_Channel5->CCR&=;
- DMA2_Channel5->CCR|=(<<); //非存储器到存储器
- DMA2_Channel5->CCR|=(<<); //优先级最高
- DMA2_Channel5->CCR|=(<<); //缓存区数据宽度32位 说明:地址长度为32,所以设置32位宽度
- DMA2_Channel5->CCR|=(<<); //外设数据宽度32位
- DMA2_Channel5->CCR|=(<<); //执行存储区地址增量
- DMA2_Channel5->CCR|=(<<); //不执行外设地址增量
- DMA2_Channel5->CCR|=(<<); //循环模式
- DMA2_Channel5->CCR|=(<<); //传输方向:从外设读
- DMA2_Channel5->CNDTR|=ADC3_Lenth; //定义传输数量
- DMA2_Channel5->CMAR|=(unsigned long)(ADC3_BUFF); //定义传输外设地址
- DMA2_Channel5->CPAR|=(unsigned long)(&ADC3->DR); //定义传输目标地址,即存储区地址
- DMA2_Channel5->CCR|=(<<); //启动DMA传输
- /******************************************************************/
- /********************下面为TIM触发设置****************************/
- #if(ADC3_TRR==1) //如果选择TIM1
- RCC->APB2ENR|=(<<); //开启TIM1时钟
- TIM1->CR1&=; //清除寄存器值
- TIM1->CR1|=(<<); //不使用分频设置,即72MHz
- TIM1->CR1|=(<<); //使能自动重装
- TIM1->CR1|=(<<); //计数器向上或者向下
- TIM1->CR1|=(<<); //计数器向上
- TIM1->CCMR2&=; //清除寄存器值
- TIM1->CCMR2|=(<<); //设置为PWM1模式
- TIM1->CCMR2|=(<<); //设置为输出 即OC3
- TIM1->CCER|=(<<); //捕获输出极性高电平有效
- TIM1->CCER|=(<<); //使能捕获输出1 即OC3
- TIM1->PSC&=0x00; //清除预分频值
- TIM1->PSC|=ADC3_PSC; //预分频值
- TIM1->CCR3&=0X00; //清除比较值
- TIM1->CCR3|=ADC3_CCR; //比较值
- TIM1->ARR&=0X00; //清除重装初值
- TIM1->ARR|=ADC3_ARR; //重装初值
- TIM1->BDTR|=(<<); //开启事件输出使能
- TIM1->CR1|=(<<); //启动定时器计数
- #endif
- #if(ADC3_TRR==2) //如果选择TIM2
- RCC->APB1ENR|=(<<); //开启TIM2时钟
- TIM2->CR1&=; //清除寄存器值
- TIM2->CR1|=(<<); //不使用分频设置,即72MHz
- TIM2->CR1|=(<<); //使能自动重装
- TIM2->CR1|=(<<); //计数器向上或者向下
- TIM2->CR1|=(<<); //计数器向上
- TIM2->CCMR2&=; //清除寄存器值
- TIM2->CCMR2|=(<<); //设置为PWM1模式
- TIM2->CCMR2|=(<<); //设置为输出
- TIM2->CCER|=(<<); //捕获输出极性高电平有效
- TIM2->CCER|=(<<); //使能捕获输出 OC3
- TIM2->PSC&=0x00; //清除预分频值
- TIM2->PSC|=ADC3_PSC; //预分频值
- TIM2->CCR3&=0X00; //清除比较值
- TIM2->CCR3|=ADC3_CCR; //比较值
- TIM2->ARR&=0X00; //清除重装初值
- TIM2->ARR|=ADC3_ARR; //重装初值
- TIM2->CR1|=(<<); //启动定时器计数
- #endif
- #if(ADC3_TRR==3) //如果选择TIM3
- RCC->APB1ENR|=(<<); //开启TIM3时钟
- TIM3->CR1&=; //清除寄存器值
- TIM3->CR1|=(<<); //不使用分频设置,即72MHz
- TIM3->CR1|=(<<); //使能自动重装
- TIM3->CR1|=(<<); //计数器向上或者向下
- TIM3->CR1|=(<<); //计数器向上
- TIM3->CCMR1&=; //清除寄存器值
- TIM3->CCMR1|=(<<); //设置为PWM1模式
- TIM3->CCMR1|=(<<); //设置为输出
- TIM3->CCER|=(<<); //捕获输出极性高电平有效
- TIM3->CCER|=(<<); //使能捕获输出 OC1
- TIM3->PSC&=0x00; //清除预分频值
- TIM3->PSC|=ADC3_PSC; //预分频值
- TIM3->CCR1&=0X00; //清除比较值
- TIM3->CCR1|=ADC3_CCR; //比较值
- TIM3->ARR&=0X00; //清除重装初值
- TIM3->ARR|=ADC3_ARR; //重装初值
- TIM3->CR1|=(<<); //启动定时器计数
- #endif
- }
- #endif
- //FILE END
ADC_DMA_TIM的更多相关文章
随机推荐
- flask接收post提交的json数据并保存至数据库
定义数据模型 # 定义数据模型class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(d ...
- Python对象迭代与反迭代相关问题与解决技巧
1.如何实现可迭代对象和迭代器对象(1)¶ In [1]: # 列表和字符串都是可迭代对象 l = [1,2,3,4] In [2]: s = 'abcde' In [3]: for x in l ...
- yii2 模板twig中使用GridView::widget
yii框架twig模板中使用GridView::widget 需要这样写: {{ grid_view_widget({ 'dataProvider': provider, 'columns': [ ' ...
- Crane (POJ 2991)
//线段树 延迟标签 // #include <bits/stdc++.h> using namespace std; const int maxn=1e4+5; double x[max ...
- python字符串处理内置方法一览表
python字符串处理内置方法一览表 序号 方法及描述 1 capitalize()将字符串的第一个字符转换为大写 2 center(width, fillchar) 返回一个指定的宽度 widt ...
- vue学习笔记(nvm安装)
https://github.com/creationix/nvm https://github.com/coreybutler/nvm-windows 慕课网:https://www.imooc.c ...
- 一篇教你看懂spring bean工厂和aop
这篇文章为spring回顾总结的第二篇,本篇主要分为两个部分,分别是spring的bean工厂的实现.spring的aop实现原理,这两部分也是面试当中问的比较多的. spring的bean工厂的实现 ...
- vba判断文件是否存在的两种方法(转)
方法1. 用VBA自带的dir()判断,代码如下: 在 Microsoft Windows 中, Dir 支持多字符 (*)和单字符 (?) 的通配符来指定多重文件 Function IsFileEx ...
- sqoop mysql导入hive 数值类型变成null的问题分析
问题描述:mysql通过sqoop导入到hive表中,发现有个别数据类型为int或tinyint的列导入后数据为null.设置各种行分隔符,列分隔符都没有效果. 问题分析:hive中单独将有问题的那几 ...
- docker--centos镜像安装tomcat jdk1.8 mysql部署java web项目
一.下载centos7标准镜像及安装mysql5.7 在centos安装mysql5.7 二.安装jdk 1.查询可用jdk版本 yum search java|grep jdk 2.根据搜索到的jd ...