1. /**************************************************************************
  2. * 文件名:ADC.h *
  3. * 编写人:离逝的风 *
  4. * 更新时间:2018.12.25 *
  5. * 说明:此文件属于开源,所有权对任何人开放 *
  6. * 如有问题请联系邮箱:1477153217@qq.com *
  7. * 使用步骤: *
  8. * 1.开启ADCx_EN设置为1 *
  9. * 2.设置通道数量ADCx_Lenth *
  10. * 3.选择定时器触发并设置相关配置 *
  11. * 4.设置各个通道转换周期 *
  12. * 4.在主函数中使用ADCx_Init初始化 *
  13. * 5.在ADCx_BUFF为转换数据结果 *
  14. ***************************************************************************/
  15. //注意:下面使用的是DMA传输数据,不需要CPU参与!只能从0通道开始转换,依次转换
  16. #ifndef __ADC_H
  17. #define __ADC_H
  18.  
  19. #include "stm32f10x.h"
  20.  
  21. /**#############################下面为所有ADC通道引脚说明##########################################*/
  22. /*-------------------------------------------------------------------------------------------------
  23. ADC1:
  24. CH0->PA0 CH1->PA0 CH2->PA2 CH3->PA3 CH4->PA4 CH5->PA5 CH6->PA6 CH7->PA7
  25. CH8->PB0 CH9->PB1 CH10->PC0 CH11->PC1 CH12->PC2 CH13->PC3 CH14->PC4 CH15->PC5
  26. CH16->温度传感器 CH17->内部参考电压
  27. ---------------------------------------------------------------------------------------------------
  28. ADC2:
  29. CH0->PA0 CH1->PA0 CH2->PA2 CH3->PA3 CH4->PA4 CH5->PA5 CH6->PA6 CH7->PA7
  30. CH8->PB0 CH9->PB1 CH10->PC0 CH11->PC1 CH12->PC2 CH13->PC3 CH14->PC4 CH15->PC5
  31. ---------------------------------------------------------------------------------------------------
  32. ADC3:
  33. CH0->PA0 CH1->PA0 CH2->PA2 CH3->PA3 CH4->PF6 CH5->PF7 CH6->PF8 CH7->PF9
  34. CH8->PF10 -------- CH10->PC0 CH11->PC1 CH12->PC2 CH13->PC3 -------- --------
  35. --------------------------------------------------------------------------------------------------*/
  36.  
  37. /**#############################下面为文件配置,根据用户需求修改##################################**/
  38. //需要的功能设置为1,否则设置为0,默认为0
  39. #define ADC1_EN 1
  40. #define ADC3_EN 0
  41.  
  42. /*##############################下面为ADC传输长度################################################*/
  43. //比如有五个传感器则需要定义长度为5
  44. //取值范围1-16
  45. /*****从0通道开始转换*******/
  46. #define ADC1_Lenth 3
  47. #define ADC3_Lenth 3
  48.  
  49. /**#############################下面为ADC存储数据缓存区###########################################**/
  50. //所有的转换结果会保存在下面的数组中
  51. extern unsigned int ADC1_BUFF[ADC1_Lenth+];
  52. extern unsigned int ADC3_BUFF[ADC3_Lenth+];
  53.  
  54. /**#############################下面为ADC触发定时器设置###########################################**/
  55. //定时器选择
  56. // 1:定时器1 2:定时器2 4:定时器4
  57. #define ADC1_TRR 1
  58. // 1:定时器1 2:定时器2 3:定时器3
  59. #define ADC3_TRR 2
  60.  
  61. //定时器预分频值 时钟来自72MHz
  62. #define ADC1_PSC 719
  63. #define ADC3_PSC 719
  64.  
  65. //定时器比较输出值
  66. #define ADC1_CCR 100
  67. #define ADC3_CCR 100
  68.  
  69. //定时器预装值
  70. #define ADC1_ARR 200
  71. #define ADC3_ARR 200
  72.  
  73. /*##############################ADC时钟分频定义,需用户选择,默认6分频即72/6=12M####################*/
  74. //备注:取值0-3 该时钟来自72MHz的PLL时钟,经过分频后作为ADC时钟
  75. // 0:2分频 1:4分频 2:6分频 3:8分频
  76. #define ADC_CLK_PRE 2
  77.  
  78. /*###############################ADC转换周期定义,默认239.5周期#####################################*/
  79. //备注:取值0-7 每个通道的转换周期设置
  80. // 0:1.5周期 1:7.5周期 2:13.5周期 3:28.5周期 4:41.5周期 5:55.5周期
  81. // 6:71.5周期 7:239.5周期
  82. #define ADC1_CH0_SMPR 7
  83. #define ADC1_CH1_SMPR 7
  84. #define ADC1_CH2_SMPR 7
  85. #define ADC1_CH3_SMPR 7
  86. #define ADC1_CH4_SMPR 7
  87. #define ADC1_CH5_SMPR 7
  88. #define ADC1_CH6_SMPR 7
  89. #define ADC1_CH7_SMPR 7
  90. #define ADC1_CH8_SMPR 7
  91. #define ADC1_CH9_SMPR 7
  92. #define ADC1_CH10_SMPR 7
  93. #define ADC1_CH11_SMPR 7
  94. #define ADC1_CH12_SMPR 7
  95. #define ADC1_CH13_SMPR 7
  96. #define ADC1_CH14_SMPR 7
  97. #define ADC1_CH15_SMPR 7
  98.  
  99. #define ADC3_CH0_SMPR 7
  100. #define ADC3_CH1_SMPR 7
  101. #define ADC3_CH2_SMPR 7
  102. #define ADC3_CH3_SMPR 7
  103. #define ADC3_CH4_SMPR 7
  104. #define ADC3_CH5_SMPR 7
  105. #define ADC3_CH6_SMPR 7
  106. #define ADC3_CH7_SMPR 7
  107. #define ADC3_CH8_SMPR 7
  108. #define ADC3_CH10_SMPR 7
  109. #define ADC3_CH11_SMPR 7
  110. #define ADC3_CH12_SMPR 7
  111. #define ADC3_CH13_SMPR 7
  112.  
  113. /*##############################下面为ADC接口函数,供用户使用#######################################*/
  114. /**-----------------ADC1---------------------------------*/
  115. #if(ADC1_EN==1)
  116. //函数名:ADC1_Init
  117. //参数:无
  118. //返回值:无
  119. //功能:ADC1初始化函数
  120. void ADC1_Init(void);
  121.  
  122. #endif
  123. /**-----------------ADC3---------------------------------*/
  124. #if(ADC3_EN==1)
  125. //函数名:ADC3_Init
  126. //参数:无
  127. //返回值:无
  128. //功能:ADC3初始化函数
  129. void ADC3_Init(void);
  130.  
  131. #endif
  132.  
  133. #endif
  134.  
  135. //FILE END
  1. /**************************************************************************
  2. * 文件名:ADC.c *
  3. * 编写人:离逝的风 *
  4. * 更新时间:2018.12.25 *
  5. * 说明:此文件属于开源,所有权对任何人开放 *
  6. * 如有问题请联系邮箱:1477153217@qq.com *
  7. * 使用步骤: *
  8. * 1.开启ADCx_EN设置为1 *
  9. * 2.设置通道数量ADCx_Lenth *
  10. * 3.选择定时器触发并设置相关配置 *
  11. * 4.设置各个通道转换周期 *
  12. * 4.在主函数中使用ADCx_Init初始化 *
  13. * 5.在ADCx_BUFF为转换数据结果 *
  14. ***************************************************************************/
  15. #include "ADC.h"
  16.  
  17. unsigned int ADC1_BUFF[ADC1_Lenth+]={};
  18. unsigned int ADC3_BUFF[ADC3_Lenth+]={};
  19.  
  20. /*###############################下面为ADC1#################################################*/
  21. #if(ADC1_EN==1)
  22. void ADC1_Init(void)
  23. {
  24. RCC->APB2ENR|=(<<)|(<<); //开启ADC1与复用功能时钟
  25.  
  26. RCC->CFGR&=(~(<<)); //清除ADC1分频的值
  27. RCC->CFGR|=(ADC_CLK_PRE<<); //让ADC的预分频为6,得到72/6=12M的ADC时钟
  28.  
  29. ADC1->SQR1&=(~(<<)); //清楚转换通道数
  30. ADC1->SQR1|=((ADC1_Lenth-)<<); //设置转换通道个数位ADC1_Lenth
  31.  
  32. #if(ADC1_Lenth==1)
  33. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  34. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  35. /** 下面为设置各个通道周期 **/
  36. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  37. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  38. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  39. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  40. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  41. /**下面为设置转换规则通道**/
  42. ADC1->SQR3&=0X00;ADC1->SQR3|=(<<); //规则0
  43. #endif
  44.  
  45. #if(ADC1_Lenth==2)
  46. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  47. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  48. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  49. /** 下面为设置各个通道周期 **/
  50. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  51. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  52. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  53. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  54. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  55. /**下面为设置转换规则通道**/
  56. ADC1->SQR3&=0X00;ADC1->SQR3|=(<<)|(<<); //规则序号
  57. #endif
  58.  
  59. #if(ADC1_Lenth==3)
  60. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  61. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  62. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  63. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  64. /** 下面为设置各个通道周期 **/
  65. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  66. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  67. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  68. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  69. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  70. /**下面为设置转换规则通道**/
  71. ADC1->SQR3&=0X00;ADC1->SQR3|=(<<)|(<<)|(<<); //规则序号
  72. #endif
  73.  
  74. #if(ADC1_Lenth==4)
  75. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  76. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  77. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  78. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  79. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  80. /** 下面为设置各个通道周期 **/
  81. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  82. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  83. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  84. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  85. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  86. /**下面为设置转换规则通道**/
  87. ADC1->SQR3&=0X00;ADC1->SQR3|=(<<)|(<<)|(<<)|(<<); //规则序号
  88. #endif
  89.  
  90. #if(ADC1_Lenth==5)
  91. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  92. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  93. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  94. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  95. GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
  96. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  97. /** 下面为设置各个通道周期 **/
  98. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  99. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  100. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  101. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  102. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  103. /**下面为设置转换规则通道**/
  104. ADC1->SQR3&=0X00;ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  105. #endif
  106.  
  107. #if(ADC1_Lenth==6)
  108. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  109. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  110. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  111. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  112. GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
  113. GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
  114. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  115. /** 下面为设置各个通道周期 **/
  116. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  117. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  118. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  119. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  120. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  121. /**下面为设置转换规则通道**/
  122. ADC1->SQR3&=0X00;ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  123. #endif
  124.  
  125. #if(ADC1_Lenth==7)
  126. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  127. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  128. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  129. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  130. GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
  131. GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
  132. GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  133. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  134. /** 下面为设置各个通道周期 **/
  135. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  136. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  137. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  138. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  139. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  140. /**下面为设置转换规则通道**/
  141. ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
  142. ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  143. ADC1->SQR2|=(<<)
  144. #endif
  145.  
  146. #if(ADC1_Lenth==8)
  147. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  148. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  149. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  150. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  151. GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
  152. GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
  153. GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  154. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA7设置为模拟输入
  155. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  156. /** 下面为设置各个通道周期 **/
  157. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  158. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  159. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  160. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  161. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  162. /**下面为设置转换规则通道**/
  163. ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
  164. ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  165. ADC1->SQR2|=(<<)|(<<);
  166. #endif
  167.  
  168. #if(ADC1_Lenth==9)
  169. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  170. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  171. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  172. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  173. GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
  174. GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
  175. GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  176. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  177. GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
  178. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  179. /** 下面为设置各个通道周期 **/
  180. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  181. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  182. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  183. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  184. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  185. /**下面为设置转换规则通道**/
  186. ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
  187. ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  188. ADC1->SQR2|=(<<)|(<<)|(<<);
  189. #endif
  190.  
  191. #if(ADC1_Lenth==10)
  192. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  193. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  194. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  195. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  196. GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
  197. GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
  198. GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  199. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  200. GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
  201. GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
  202. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  203. /** 下面为设置各个通道周期 **/
  204. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  205. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  206. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  207. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  208. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  209. /**下面为设置转换规则通道**/
  210. ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
  211. ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  212. ADC1->SQR2|=(<<)|(<<)|(<<)|(<<);
  213. #endif
  214.  
  215. #if(ADC1_Lenth==11)
  216. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  217. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  218. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  219. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  220. GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
  221. GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
  222. GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  223. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  224. GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
  225. GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
  226. GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
  227. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  228. /** 下面为设置各个通道周期 **/
  229. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  230. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  231. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  232. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  233. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  234. /**下面为设置转换规则通道**/
  235. ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
  236. ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  237. ADC1->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<);
  238. #endif
  239.  
  240. #if(ADC1_Lenth==12)
  241. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  242. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  243. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  244. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  245. GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
  246. GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
  247. GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  248. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  249. GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
  250. GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
  251. GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
  252. GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
  253. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  254. /** 下面为设置各个通道周期 **/
  255. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  256. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  257. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  258. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  259. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  260. /**下面为设置转换规则通道**/
  261. ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
  262. ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  263. ADC1->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
  264. #endif
  265.  
  266. #if(ADC1_Lenth==13)
  267. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  268. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  269. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  270. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  271. GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
  272. GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
  273. GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  274. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  275. GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
  276. GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
  277. GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
  278. GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
  279. GPIOC->CRL&=0XFFFFF0FF;GPIOC->CRL|=0X00000000; //GPIOC2设置为模拟输入
  280. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  281. /** 下面为设置各个通道周期 **/
  282. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  283. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  284. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  285. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  286. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  287. /**下面为设置转换规则通道**/
  288. ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
  289. ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  290. ADC1->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
  291. ADC1->SQR1|=(<<);
  292. #endif
  293.  
  294. #if(ADC1_Lenth==14)
  295. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  296. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  297. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  298. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  299. GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
  300. GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
  301. GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  302. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  303. GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
  304. GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
  305. GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
  306. GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
  307. GPIOC->CRL&=0XFFFFF0FF;GPIOC->CRL|=0X00000000; //GPIOC2设置为模拟输入
  308. GPIOC->CRL&=0XFFFF0FFF;GPIOC->CRL|=0X00000000; //GPIOC3设置为模拟输入
  309. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  310. /** 下面为设置各个通道周期 **/
  311. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  312. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  313. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  314. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  315. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  316. /**下面为设置转换规则通道**/
  317. ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
  318. ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  319. ADC1->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
  320. ADC1->SQR1|=(<<)|(<<);
  321. #endif
  322.  
  323. #if(ADC1_Lenth==15)
  324. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  325. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  326. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  327. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  328. GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
  329. GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
  330. GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  331. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  332. GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
  333. GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
  334. GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
  335. GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
  336. GPIOC->CRL&=0XFFFFF0FF;GPIOC->CRL|=0X00000000; //GPIOC2设置为模拟输入
  337. GPIOC->CRL&=0XFFFF0FFF;GPIOC->CRL|=0X00000000; //GPIOC3设置为模拟输入
  338. GPIOC->CRL&=0XFFF0FFFF;GPIOC->CRL|=0X00000000; //GPIOC4设置为模拟输入
  339. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  340. /** 下面为设置各个通道周期 **/
  341. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  342. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  343. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  344. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  345. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  346. /**下面为设置转换规则通道**/
  347. ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
  348. ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  349. ADC1->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
  350. ADC1->SQR1|=(<<)|(<<)|(<<);
  351. #endif
  352.  
  353. #if(ADC1_Lenth==16)
  354. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  355. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  356. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  357. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  358. GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00000000; //GPIOA4设置为模拟输入
  359. GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0X00000000; //GPIOA5设置为模拟输入
  360. GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  361. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOA6设置为模拟输入
  362. GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000000; //GPIOB0设置为模拟输入
  363. GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=0X00000000; //GPIOB1设置为模拟输入
  364. GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
  365. GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
  366. GPIOC->CRL&=0XFFFFF0FF;GPIOC->CRL|=0X00000000; //GPIOC2设置为模拟输入
  367. GPIOC->CRL&=0XFFFF0FFF;GPIOC->CRL|=0X00000000; //GPIOC3设置为模拟输入
  368. GPIOC->CRL&=0XFFF0FFFF;GPIOC->CRL|=0X00000000; //GPIOC4设置为模拟输入
  369. GPIOC->CRL&=0XFF0FFF0F;GPIOC->CRL|=0X00000000; //GPIOC5设置为模拟输入
  370. ADC1->SMPR1&=0X00;ADC1->SMPR2&=0X00; //清除寄存器之前的值
  371. /** 下面为设置各个通道周期 **/
  372. ADC1->SMPR2|=(ADC1_CH0_SMPR<<)|(ADC1_CH1_SMPR<<)|(ADC1_CH2_SMPR<<);
  373. ADC1->SMPR2|=(ADC1_CH3_SMPR<<)|(ADC1_CH4_SMPR<<)|(ADC1_CH5_SMPR<<);
  374. ADC1->SMPR2|=(ADC1_CH6_SMPR<<)|(ADC1_CH7_SMPR<<)|(ADC1_CH8_SMPR<<)|(ADC1_CH9_SMPR<<);
  375. ADC1->SMPR1|=(ADC1_CH10_SMPR<<)|(ADC1_CH11_SMPR<<)|(ADC1_CH12_SMPR<<)|(ADC1_CH13_SMPR<<);
  376. ADC1->SMPR1|=(ADC1_CH14_SMPR<<)|(ADC1_CH15_SMPR<<);
  377. /**下面为设置转换规则通道**/
  378. ADC1->SQR3&=0X00;ADC1->SQR2&=0X00;ADC1->SQR1&=0X00;
  379. ADC1->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  380. ADC1->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
  381. ADC1->SQR1|=(<<)|(<<)|(<<)|(<<);
  382. #endif
  383. ADC1->CR1&=0X00; //清除CR1位
  384. ADC1->CR1|=(<<); //使用扫描模式
  385. ADC1->CR1|=(<<);
  386. ADC1->CR2&=0X00; //清除CR2位
  387.  
  388. #if(ADC1_TRR==1)
  389. ADC1->CR2|=(<<); //选择定时器1事件1触发
  390. #endif
  391.  
  392. #if(ADC1_TRR==2)
  393. ADC1->CR2|=(<<); //选择定时器2事件2触发
  394. #endif
  395.  
  396. #if(ADC1_TRR==4)
  397. ADC1->CR2|=(<<); //选择定时器4事件4触发
  398. #endif
  399.  
  400. ADC1->CR2|=(<<)|(<<); //1<<20非常重要,必须使用外部事件启动转换
  401.  
  402. ADC1->CR2|=(<<); //使用DMA
  403. ADC1->CR2|=(<<); //单次转换模式
  404. ADC1->CR2|=<<; //复位校准(初始化校准)
  405. while(ADC1->CR2&(<<)); //等待校准初始化完成
  406.  
  407. ADC1->CR2|=<<; //开始校准
  408. while(ADC1->CR2&(<<)); //等待校准完成
  409. ADC1->CR2|=<<; //开始转换规则通道
  410.  
  411. /**********************下面位DMA设置*****************************/
  412. RCC->AHBENR|=0x01; //开启DMA时钟
  413. DMA1_Channel1->CCR&=;
  414. DMA1_Channel1->CCR|=(<<); //非存储器到存储器
  415. DMA1_Channel1->CCR|=(<<); //优先级最高
  416. DMA1_Channel1->CCR|=(<<); //缓存区数据宽度32位 说明:地址长度为32,所以设置32位宽度
  417. DMA1_Channel1->CCR|=(<<); //外设数据宽度32位
  418. DMA1_Channel1->CCR|=(<<); //执行存储区地址增量
  419. DMA1_Channel1->CCR|=(<<); //不执行外设地址增量
  420. DMA1_Channel1->CCR|=(<<); //循环模式
  421. DMA1_Channel1->CCR|=(<<); //传输方向:从外设读
  422.  
  423. DMA1_Channel1->CNDTR|=ADC1_Lenth; //定义传输数量
  424. DMA1_Channel1->CMAR|=(unsigned long)(ADC1_BUFF); //定义传输外设地址
  425. DMA1_Channel1->CPAR|=(unsigned long)(&ADC1->DR); //定义传输目标地址,即存储区地址
  426. DMA1_Channel1->CCR|=(<<); //启动DMA传输
  427. /******************************************************************/
  428.  
  429. /********************下面为TIM触发设置****************************/
  430. #if(ADC1_TRR==1) //如果选择TIM1
  431. RCC->APB2ENR|=(<<); //开启TIM1时钟
  432. TIM1->CR1&=; //清除寄存器值
  433. TIM1->CR1|=(<<); //不使用分频设置,即72MHz
  434. TIM1->CR1|=(<<); //使能自动重装
  435. TIM1->CR1|=(<<); //计数器向上或者向下
  436. TIM1->CR1|=(<<); //计数器向上
  437.  
  438. TIM1->CCMR1&=; //清除寄存器值
  439. TIM1->CCMR1|=(<<); //设置为PWM1模式
  440. TIM1->CCMR1|=(<<); //设置为输出 即OC1
  441.  
  442. TIM1->CCER|=(<<); //捕获输出极性高电平有效
  443. TIM1->CCER|=(<<); //使能捕获输出1 即OC1
  444.  
  445. TIM1->PSC&=0x00; //清除预分频值
  446. TIM1->PSC|=ADC1_PSC; //预分频值
  447.  
  448. TIM1->CCR1&=0X00; //清除比较值
  449. TIM1->CCR1|=ADC1_CCR; //比较值
  450. TIM1->ARR&=0X00; //清除重装初值
  451. TIM1->ARR|=ADC1_ARR; //重装初值
  452.  
  453. TIM1->BDTR|=(<<); //开启事件输出使能
  454. TIM1->CR1|=(<<); //启动定时器计数
  455. #endif
  456.  
  457. #if(ADC1_TRR==2) //如果选择TIM2
  458. RCC->APB1ENR|=(<<); //开启TIM2时钟
  459. TIM2->CR1&=; //清除寄存器值
  460. TIM2->CR1|=(<<); //不使用分频设置,即72MHz
  461. TIM2->CR1|=(<<); //使能自动重装
  462. TIM2->CR1|=(<<); //计数器向上或者向下
  463. TIM2->CR1|=(<<); //计数器向上
  464.  
  465. TIM2->CCMR1&=; //清除寄存器值
  466. TIM2->CCMR1|=(<<); //设置为PWM1模式
  467. TIM2->CCMR1|=(<<); //设置为输出
  468.  
  469. TIM2->CCER|=(<<); //捕获输出极性高电平有效
  470. TIM2->CCER|=(<<); //使能捕获输出 OC2
  471.  
  472. TIM2->PSC&=0x00; //清除预分频值
  473. TIM2->PSC|=ADC1_PSC; //预分频值
  474.  
  475. TIM2->CCR2&=0X00; //清除比较值
  476. TIM2->CCR2|=ADC1_CCR; //比较值
  477. TIM2->ARR&=0X00; //清除重装初值
  478. TIM2->ARR|=ADC1_ARR; //重装初值
  479.  
  480. TIM2->CR1|=(<<); //启动定时器计数
  481. #endif
  482.  
  483. #if(ADC1_TRR==4) //如果选择TIM4
  484. RCC->APB1ENR|=(<<); //开启TIM4时钟
  485. TIM4->CR1&=; //清除寄存器值
  486. TIM4->CR1|=(<<); //不使用分频设置,即72MHz
  487. TIM4->CR1|=(<<); //使能自动重装
  488. TIM4->CR1|=(<<); //计数器向上或者向下
  489. TIM4->CR1|=(<<); //计数器向上
  490.  
  491. TIM4->CCMR2&=; //清除寄存器值
  492. TIM4->CCMR2|=(<<); //设置为PWM1模式
  493. TIM4->CCMR2|=(<<); //设置为输出
  494.  
  495. TIM4->CCER|=(<<); //捕获输出极性高电平有效
  496. TIM4->CCER|=(<<); //使能捕获输出 OC4
  497.  
  498. TIM4->PSC&=0x00; //清除预分频值
  499. TIM4->PSC|=ADC1_PSC; //预分频值
  500.  
  501. TIM4->CCR4&=0X00; //清除比较值
  502. TIM4->CCR4|=ADC1_CCR; //比较值
  503. TIM4->ARR&=0X00; //清除重装初值
  504. TIM4->ARR|=ADC1_ARR; //重装初值
  505.  
  506. TIM4->CR1|=(<<); //启动定时器计数
  507. #endif
  508.  
  509. }
  510. #endif
  511.  
  512. /*###############################下面为ADC3#################################################*/
  513. #if(ADC3_EN==1)
  514. void ADC3_Init(void)
  515. {
  516. RCC->APB2ENR|=(<<)|(<<); //开启ADC3与复用功能时钟
  517. RCC->CFGR&=(~(<<)); //清除ADC3分频的值
  518. RCC->CFGR|=(ADC_CLK_PRE<<); //让ADC的预分频为6,得到72/6=12M的ADC时钟
  519.  
  520. ADC3->SQR1&=~(0XF<<); //设置转换通道个数为1
  521. ADC3->SQR1|=((ADC3_Lenth-)<<); //设置转换通道个数位ADC3_Lenth
  522.  
  523. #if(ADC3_Lenth==1)
  524. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  525. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  526. /** 下面为设置各个通道周期 **/
  527. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  528. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  529. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  530. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  531. /**下面为设置转换规则通道**/
  532. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  533. ADC3->SQR3|=(<<); //规则序号
  534. #endif
  535.  
  536. #if(ADC3_Lenth==2)
  537. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  538. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  539. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  540. /** 下面为设置各个通道周期 **/
  541. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  542. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  543. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  544. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  545. /**下面为设置转换规则通道**/
  546. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  547. ADC3->SQR3|=(<<)|(<<); //规则序号
  548. #endif
  549.  
  550. #if(ADC3_Lenth==3)
  551. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  552. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  553. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  554. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  555. /** 下面为设置各个通道周期 **/
  556. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  557. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  558. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  559. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  560. /**下面为设置转换规则通道**/
  561. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  562. ADC3->SQR3|=(<<)|(<<)|(<<); //规则序号
  563. #endif
  564.  
  565. #if(ADC3_Lenth==4)
  566. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  567. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  568. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  569. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  570. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  571. /** 下面为设置各个通道周期 **/
  572. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  573. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  574. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  575. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  576. /**下面为设置转换规则通道**/
  577. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  578. ADC3->SQR3|=(<<)|(<<)|(<<)|(<<); //规则序号
  579. #endif
  580.  
  581. #if(ADC3_Lenth==5)
  582. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  583. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  584. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  585. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  586. GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
  587. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  588. /** 下面为设置各个通道周期 **/
  589. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  590. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  591. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  592. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  593. /**下面为设置转换规则通道**/
  594. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  595. ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  596. #endif
  597.  
  598. #if(ADC3_Lenth==6)
  599. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  600. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  601. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  602. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  603. GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
  604. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
  605. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  606. /** 下面为设置各个通道周期 **/
  607. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  608. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  609. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  610. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  611. /**下面为设置转换规则通道**/
  612. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  613. ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  614. #endif
  615. #if(ADC3_Lenth==7)
  616. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  617. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  618. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  619. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  620. GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
  621. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
  622. GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
  623. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  624. /** 下面为设置各个通道周期 **/
  625. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  626. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  627. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  628. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  629. /**下面为设置转换规则通道**/
  630. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  631. ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  632. ADC3->SQR2|=(<<);
  633.  
  634. #endif
  635.  
  636. #if(ADC3_Lenth==8)
  637. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  638. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  639. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  640. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  641. GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
  642. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
  643. GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
  644. GPIOF->CRH&=0XFFFFFF0F;GPIOF->CRH|=0X00000000; //GPIOF9设置为模拟输入
  645. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  646. /** 下面为设置各个通道周期 **/
  647. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  648. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  649. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  650. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  651. /**下面为设置转换规则通道**/
  652. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  653. ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  654. ADC3->SQR2|=(<<)|(<<);
  655. #endif
  656.  
  657. #if(ADC3_Lenth==9)
  658. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  659. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  660. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  661. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  662. GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
  663. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
  664. GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
  665. GPIOF->CRH&=0XFFFFFF0F;GPIOF->CRH|=0X00000000; //GPIOF9设置为模拟输入
  666. GPIOF->CRH&=0XFFFFF0FF;GPIOF->CRH|=0X00000000; //GPIOF10设置为模拟输入
  667. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  668. /** 下面为设置各个通道周期 **/
  669. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  670. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  671. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  672. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  673. /**下面为设置转换规则通道**/
  674. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  675. ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  676. ADC3->SQR2|=(<<)|(<<)|(<<);
  677. #endif
  678.  
  679. #if(ADC3_Lenth==10)
  680. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  681. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  682. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  683. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  684. GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
  685. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
  686. GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
  687. GPIOF->CRH&=0XFFFFFF0F;GPIOF->CRH|=0X00000000; //GPIOF9设置为模拟输入
  688. GPIOF->CRH&=0XFFFFF0FF;GPIOF->CRH|=0X00000000; //GPIOF10设置为模拟输入
  689. GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
  690. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  691. /** 下面为设置各个通道周期 **/
  692. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  693. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  694. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  695. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  696. /**下面为设置转换规则通道**/
  697. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  698. ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  699. ADC3->SQR2|=(<<)|(<<)|(<<)|(<<);
  700. #endif
  701.  
  702. #if(ADC3_Lenth==11)
  703. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  704. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  705. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  706. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  707. GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
  708. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
  709. GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
  710. GPIOF->CRH&=0XFFFFFF0F;GPIOF->CRH|=0X00000000; //GPIOF9设置为模拟输入
  711. GPIOF->CRH&=0XFFFFF0FF;GPIOF->CRH|=0X00000000; //GPIOF10设置为模拟输入
  712. GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
  713. GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
  714. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  715. /** 下面为设置各个通道周期 **/
  716. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  717. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  718. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  719. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  720. /**下面为设置转换规则通道**/
  721. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  722. ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  723. ADC3->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<);
  724. #endif
  725.  
  726. #if(ADC3_Lenth==12)
  727. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  728. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  729. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  730. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  731. GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
  732. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
  733. GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
  734. GPIOF->CRH&=0XFFFFFF0F;GPIOF->CRH|=0X00000000; //GPIOF9设置为模拟输入
  735. GPIOF->CRH&=0XFFFFF0FF;GPIOF->CRH|=0X00000000; //GPIOF10设置为模拟输入
  736. GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
  737. GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
  738. GPIOC->CRL&=0XFFFFF0FF;GPIOC->CRL|=0X00000000; //GPIOC2设置为模拟输入
  739. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  740. /** 下面为设置各个通道周期 **/
  741. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  742. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  743. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  744. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  745. /**下面为设置转换规则通道**/
  746. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  747. ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  748. ADC3->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
  749. #endif
  750.  
  751. #if(ADC3_Lenth==13)
  752. GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=0X00000000; //GPIOA0设置为模拟输入
  753. GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=0X00000000; //GPIOA1设置为模拟输入
  754. GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=0X00000000; //GPIOA2设置为模拟输入
  755. GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=0X00000000; //GPIOA3设置为模拟输入
  756. GPIOF->CRL&=0XF0FFFFFF;GPIOF->CRL|=0X00000000; //GPIOF6设置为模拟输入
  757. GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=0X00000000; //GPIOF7设置为模拟输入
  758. GPIOF->CRH&=0XFFFFFFF0;GPIOF->CRH|=0X00000000; //GPIOF8设置为模拟输入
  759. GPIOF->CRH&=0XFFFFFF0F;GPIOF->CRH|=0X00000000; //GPIOF9设置为模拟输入
  760. GPIOF->CRH&=0XFFFFF0FF;GPIOF->CRH|=0X00000000; //GPIOF10设置为模拟输入
  761. GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000000; //GPIOC0设置为模拟输入
  762. GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=0X00000000; //GPIOC1设置为模拟输入
  763. GPIOC->CRL&=0XFFFFF0FF;GPIOC->CRL|=0X00000000; //GPIOC2设置为模拟输入
  764. GPIOC->CRL&=0XFFFF0FFF;GPIOC->CRL|=0X00000000; //GPIOC3设置为模拟输入
  765. ADC3->SMPR1&=0X00;ADC3->SMPR2&=0X00; //清除寄存器之前的值
  766. /** 下面为设置各个通道周期 **/
  767. ADC3->SMPR2|=(ADC3_CH0_SMPR<<)|(ADC3_CH1_SMPR<<)|(ADC3_CH2_SMPR<<);
  768. ADC3->SMPR2|=(ADC3_CH3_SMPR<<)|(ADC3_CH4_SMPR<<)|(ADC3_CH5_SMPR<<);
  769. ADC3->SMPR2|=(ADC3_CH6_SMPR<<)|(ADC3_CH7_SMPR<<)|(ADC3_CH8_SMPR<<);
  770. ADC3->SMPR1|=(ADC3_CH10_SMPR<<)|(ADC3_CH11_SMPR<<)|(ADC3_CH12_SMPR<<)|(ADC3_CH13_SMPR<<);
  771. /**下面为设置转换规则通道**/
  772. ADC3->SQR3&=0X00;ADC3->SQR2&=0X00;ADC3->SQR1&=0X00;
  773. ADC3->SQR3|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<); //规则序号
  774. ADC3->SQR2|=(<<)|(<<)|(<<)|(<<)|(<<)|(<<);
  775. ADC3->SQR1|=(<<);
  776. #endif
  777.  
  778. ADC3->CR1&=0X00; //清除CR1位
  779. ADC3->CR1|=(<<); //使用扫描模式
  780. ADC3->CR2&=0X00; //清除CR2位
  781.  
  782. #if(ADC3_TRR==1)
  783. ADC3->CR2|=(<<); //选择定时器1事件3触发
  784. #endif
  785.  
  786. #if(ADC3_TRR==2)
  787. ADC3->CR2|=(<<); //选择定时器2事件3触发
  788. #endif
  789.  
  790. #if(ADC3_TRR==3)
  791. ADC3->CR2|=(<<); //选择定时器3事件1触发
  792. #endif
  793.  
  794. ADC3->CR2|=(<<)|(<<); //1<<20非常重要,必须使用外部事件启动转换
  795.  
  796. ADC3->CR2|=(<<); //使用DMA
  797. ADC3->CR2|=(<<); //单次转换模式
  798. ADC3->CR2|=<<; //复位校准(初始化校准)
  799. while(ADC3->CR2&(<<)); //等待校准初始化完成
  800.  
  801. ADC3->CR2|=<<; //开始校准
  802. while(ADC3->CR2&(<<)); //等待校准完成
  803. ADC3->CR2|=<<; //开始转换规则通道
  804.  
  805. /**********************下面位DMA设置*****************************/
  806. RCC->AHBENR|=0x02; //开启DMA时钟
  807. DMA2_Channel5->CCR&=;
  808. DMA2_Channel5->CCR|=(<<); //非存储器到存储器
  809. DMA2_Channel5->CCR|=(<<); //优先级最高
  810. DMA2_Channel5->CCR|=(<<); //缓存区数据宽度32位 说明:地址长度为32,所以设置32位宽度
  811. DMA2_Channel5->CCR|=(<<); //外设数据宽度32位
  812. DMA2_Channel5->CCR|=(<<); //执行存储区地址增量
  813. DMA2_Channel5->CCR|=(<<); //不执行外设地址增量
  814. DMA2_Channel5->CCR|=(<<); //循环模式
  815. DMA2_Channel5->CCR|=(<<); //传输方向:从外设读
  816.  
  817. DMA2_Channel5->CNDTR|=ADC3_Lenth; //定义传输数量
  818. DMA2_Channel5->CMAR|=(unsigned long)(ADC3_BUFF); //定义传输外设地址
  819. DMA2_Channel5->CPAR|=(unsigned long)(&ADC3->DR); //定义传输目标地址,即存储区地址
  820. DMA2_Channel5->CCR|=(<<); //启动DMA传输
  821. /******************************************************************/
  822.  
  823. /********************下面为TIM触发设置****************************/
  824. #if(ADC3_TRR==1) //如果选择TIM1
  825. RCC->APB2ENR|=(<<); //开启TIM1时钟
  826. TIM1->CR1&=; //清除寄存器值
  827. TIM1->CR1|=(<<); //不使用分频设置,即72MHz
  828. TIM1->CR1|=(<<); //使能自动重装
  829. TIM1->CR1|=(<<); //计数器向上或者向下
  830. TIM1->CR1|=(<<); //计数器向上
  831.  
  832. TIM1->CCMR2&=; //清除寄存器值
  833. TIM1->CCMR2|=(<<); //设置为PWM1模式
  834. TIM1->CCMR2|=(<<); //设置为输出 即OC3
  835.  
  836. TIM1->CCER|=(<<); //捕获输出极性高电平有效
  837. TIM1->CCER|=(<<); //使能捕获输出1 即OC3
  838.  
  839. TIM1->PSC&=0x00; //清除预分频值
  840. TIM1->PSC|=ADC3_PSC; //预分频值
  841.  
  842. TIM1->CCR3&=0X00; //清除比较值
  843. TIM1->CCR3|=ADC3_CCR; //比较值
  844. TIM1->ARR&=0X00; //清除重装初值
  845. TIM1->ARR|=ADC3_ARR; //重装初值
  846.  
  847. TIM1->BDTR|=(<<); //开启事件输出使能
  848. TIM1->CR1|=(<<); //启动定时器计数
  849. #endif
  850.  
  851. #if(ADC3_TRR==2) //如果选择TIM2
  852. RCC->APB1ENR|=(<<); //开启TIM2时钟
  853. TIM2->CR1&=; //清除寄存器值
  854. TIM2->CR1|=(<<); //不使用分频设置,即72MHz
  855. TIM2->CR1|=(<<); //使能自动重装
  856. TIM2->CR1|=(<<); //计数器向上或者向下
  857. TIM2->CR1|=(<<); //计数器向上
  858.  
  859. TIM2->CCMR2&=; //清除寄存器值
  860. TIM2->CCMR2|=(<<); //设置为PWM1模式
  861. TIM2->CCMR2|=(<<); //设置为输出
  862.  
  863. TIM2->CCER|=(<<); //捕获输出极性高电平有效
  864. TIM2->CCER|=(<<); //使能捕获输出 OC3
  865.  
  866. TIM2->PSC&=0x00; //清除预分频值
  867. TIM2->PSC|=ADC3_PSC; //预分频值
  868.  
  869. TIM2->CCR3&=0X00; //清除比较值
  870. TIM2->CCR3|=ADC3_CCR; //比较值
  871. TIM2->ARR&=0X00; //清除重装初值
  872. TIM2->ARR|=ADC3_ARR; //重装初值
  873.  
  874. TIM2->CR1|=(<<); //启动定时器计数
  875. #endif
  876.  
  877. #if(ADC3_TRR==3) //如果选择TIM3
  878. RCC->APB1ENR|=(<<); //开启TIM3时钟
  879. TIM3->CR1&=; //清除寄存器值
  880. TIM3->CR1|=(<<); //不使用分频设置,即72MHz
  881. TIM3->CR1|=(<<); //使能自动重装
  882. TIM3->CR1|=(<<); //计数器向上或者向下
  883. TIM3->CR1|=(<<); //计数器向上
  884.  
  885. TIM3->CCMR1&=; //清除寄存器值
  886. TIM3->CCMR1|=(<<); //设置为PWM1模式
  887. TIM3->CCMR1|=(<<); //设置为输出
  888.  
  889. TIM3->CCER|=(<<); //捕获输出极性高电平有效
  890. TIM3->CCER|=(<<); //使能捕获输出 OC1
  891.  
  892. TIM3->PSC&=0x00; //清除预分频值
  893. TIM3->PSC|=ADC3_PSC; //预分频值
  894.  
  895. TIM3->CCR1&=0X00; //清除比较值
  896. TIM3->CCR1|=ADC3_CCR; //比较值
  897. TIM3->ARR&=0X00; //清除重装初值
  898. TIM3->ARR|=ADC3_ARR; //重装初值
  899.  
  900. TIM3->CR1|=(<<); //启动定时器计数
  901. #endif
  902.  
  903. }
  904.  
  905. #endif
  906.  
  907. //FILE END

ADC_DMA_TIM的更多相关文章

随机推荐

  1. flask接收post提交的json数据并保存至数据库

    定义数据模型 # 定义数据模型class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(d ...

  2. Python对象迭代与反迭代相关问题与解决技巧

      1.如何实现可迭代对象和迭代器对象(1)¶ In [1]: # 列表和字符串都是可迭代对象 l = [1,2,3,4] In [2]: s = 'abcde' In [3]: for x in l ...

  3. yii2 模板twig中使用GridView::widget

    yii框架twig模板中使用GridView::widget 需要这样写: {{ grid_view_widget({ 'dataProvider': provider, 'columns': [ ' ...

  4. Crane (POJ 2991)

    //线段树 延迟标签 // #include <bits/stdc++.h> using namespace std; const int maxn=1e4+5; double x[max ...

  5. python字符串处理内置方法一览表

    python字符串处理内置方法一览表   序号 方法及描述 1 capitalize()将字符串的第一个字符转换为大写 2 center(width, fillchar) 返回一个指定的宽度 widt ...

  6. vue学习笔记(nvm安装)

    https://github.com/creationix/nvm https://github.com/coreybutler/nvm-windows 慕课网:https://www.imooc.c ...

  7. 一篇教你看懂spring bean工厂和aop

    这篇文章为spring回顾总结的第二篇,本篇主要分为两个部分,分别是spring的bean工厂的实现.spring的aop实现原理,这两部分也是面试当中问的比较多的. spring的bean工厂的实现 ...

  8. vba判断文件是否存在的两种方法(转)

    方法1. 用VBA自带的dir()判断,代码如下: 在 Microsoft Windows 中, Dir 支持多字符 (*)和单字符 (?) 的通配符来指定多重文件 Function IsFileEx ...

  9. sqoop mysql导入hive 数值类型变成null的问题分析

    问题描述:mysql通过sqoop导入到hive表中,发现有个别数据类型为int或tinyint的列导入后数据为null.设置各种行分隔符,列分隔符都没有效果. 问题分析:hive中单独将有问题的那几 ...

  10. docker--centos镜像安装tomcat jdk1.8 mysql部署java web项目

    一.下载centos7标准镜像及安装mysql5.7 在centos安装mysql5.7 二.安装jdk 1.查询可用jdk版本 yum search java|grep jdk 2.根据搜索到的jd ...