You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
3.7 KiB

4 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
3 years ago
4 years ago
  1. #include "adc.h"
  2. // uint16_t meanvalue;
  3. static void prv_adc_pa2_init() {
  4. ADC_InitStruType x;
  5. GPIO_InitSettingType y;
  6. y.Signal = GPIO_Pin_Signal_Analog; //�
  7. y.Dir = GPIO_Direction_Input; //����
  8. y.Func = GPIO_Reuse_Func0;
  9. // x.CHS����adc�ɼ���ͨ��ÿ�����Ŷ�Ӧһ��ͨ��
  10. GPIO_Init(GPIO_Pin_A2, &y);
  11. //������Ƶ�Ժ�Tadclk=1/(PCLK/4)Լ����0.083us
  12. x.CLKS = ADC_CLKS_PCLK;
  13. x.CLKDIV = ADC_CLKDIV_1_32; /* ADCʱ��ԴԤ��Ƶ */
  14. //�ɼ�����ģ����*3.3/4096=���ڵĵ�ѹ
  15. x.VREF_SEL = ADC_VREF_SEL_0; /* �ڲ��ο���ѹ2.048v,�������ڲ��ο���ѹΪ���� */
  16. x.VREFP = ADC_VREFP_VDD; /* ѡ��оƬ�Ĺ�����ѹVDD������������adc������Ҫ�ĸ���ѹ�����ο�adc�IJο���ѹΪ���� */
  17. x.VREFN = ADC_VREFN_VSS; /* �����ο���ѹѡ�� */
  18. x.CHS = ADC_CHS_AIN8;
  19. x.SMPS = ADC_SMPS_SOFT; /* AD����ģʽΪ�������� */
  20. //����ʱ��st*2+1(��Tadclk)=1.743us
  21. x.ST = 10; /* ADӲ������ʱ��ѡ�� */
  22. x.BITSEL = ADC_BITSEL_12; /* AD�ֱ���12λ */
  23. ADC_Init(&x);
  24. prv_adc_get_value();
  25. }
  26. static void prv_adc_pb8_init() {
  27. ADC_InitStruType x;
  28. GPIO_InitSettingType y;
  29. y.Signal = GPIO_Pin_Signal_Analog; //�
  30. y.Dir = GPIO_Direction_Input; //����
  31. y.Func = GPIO_Reuse_Func0;
  32. // x.CHS����adc�ɼ���ͨ��ÿ�����Ŷ�Ӧһ��ͨ��
  33. GPIO_Init(GPIO_Pin_B8, &y);
  34. //������Ƶ�Ժ�Tadclk=1/(PCLK/4)Լ����0.083us
  35. x.CLKS = ADC_CLKS_PCLK;
  36. x.CLKDIV = ADC_CLKDIV_1_32; /* ADCʱ��ԴԤ��Ƶ */
  37. //�ɼ�����ģ����*3.3/4096=���ڵĵ�ѹ
  38. x.VREF_SEL = ADC_VREF_SEL_0; /* �ڲ��ο���ѹ2.048v,�������ڲ��ο���ѹΪ���� */
  39. x.VREFP = ADC_VREFP_VDD; /* ѡ��оƬ�Ĺ�����ѹVDD������������adc������Ҫ�ĸ���ѹ�����ο�adc�IJο���ѹΪ���� */
  40. x.VREFN = ADC_VREFN_VSS; /* �����ο���ѹѡ�� */
  41. x.CHS = ADC_CHS_AIN3;
  42. x.SMPS = ADC_SMPS_SOFT; /* AD����ģʽΪ�������� */
  43. //����ʱ��st*2+1(��Tadclk)=1.743us
  44. x.ST = 10; /* ADӲ������ʱ��ѡ�� */
  45. x.BITSEL = ADC_BITSEL_12; /* AD�ֱ���12λ */
  46. ADC_Init(&x);
  47. prv_adc_get_value();
  48. }
  49. static void prv_adc_pb9_init() {
  50. ADC_InitStruType x;
  51. GPIO_InitSettingType y;
  52. y.Signal = GPIO_Pin_Signal_Analog; //�
  53. y.Dir = GPIO_Direction_Input; //����
  54. y.Func = GPIO_Reuse_Func0;
  55. // x.CHS����adc�ɼ���ͨ��ÿ�����Ŷ�Ӧһ��ͨ��
  56. GPIO_Init(GPIO_Pin_B9, &y);
  57. //������Ƶ�Ժ�Tadclk=1/(PCLK/32)
  58. x.CLKS = ADC_CLKS_PCLK;
  59. x.CLKDIV = ADC_CLKDIV_1_32; /* ADCʱ��ԴԤ��Ƶ */
  60. //�ɼ�����ģ����*3.3/4096=���ڵĵ�ѹ
  61. x.VREF_SEL = ADC_VREF_SEL_0; /* �ڲ��ο���ѹ2.048v,�������ڲ��ο���ѹΪ���� */
  62. x.VREFP = ADC_VREFP_VDD; /* ѡ��оƬ�Ĺ�����ѹVDD������������adc������Ҫ�ĸ���ѹ�����ο�adc�IJο���ѹΪ���� */
  63. x.VREFN = ADC_VREFN_VSS; /* �����ο���ѹѡ�� */
  64. x.CHS = ADC_CHS_AIN4;
  65. // x.CHS = ADC_CHS_AIN8;
  66. x.SMPS = ADC_SMPS_SOFT; /* AD����ģʽΪ�������� */
  67. //����ʱ��st*2+1(��Tadclk)=1.743us
  68. x.ST = 10; /* ADӲ������ʱ��ѡ�� */
  69. x.BITSEL = ADC_BITSEL_12; /* AD�ֱ���12λ */
  70. ADC_Init(&x);
  71. prv_adc_get_value();
  72. }
  73. static float prv_adc_get_value() {
  74. ADC_SoftStart();
  75. while (ADC_GetConvStatus() != RESET)
  76. ;
  77. uint16_t adcv = ADC_GetConvValue();
  78. ADC_SoftStop();
  79. printf("%d\r\n", adcv);
  80. return adcv * 3.3 / 4096;
  81. }
  82. static float prv_adc_get_value_average(int average) {
  83. if (average == 0) {
  84. average = 1;
  85. }
  86. float value = 0;
  87. for (size_t i = 0; i < average; i++) {
  88. value += prv_adc_get_value();
  89. }
  90. return value / average;
  91. }
  92. float adc_get_value_pa2(void) {
  93. prv_adc_pa2_init();
  94. return prv_adc_get_value_average(AVERAGE_TABLE_SIZE);
  95. }
  96. float adc_get_value_pb8(void) {
  97. prv_adc_pb8_init();
  98. return prv_adc_get_value_average(AVERAGE_TABLE_SIZE);
  99. }
  100. float adc_get_value_pb9(void) {
  101. prv_adc_pb9_init();
  102. return prv_adc_get_value_average(AVERAGE_TABLE_SIZE);
  103. }