[RISC-V MCU 应用开发] 【RISC-V MCU CH32V103测评】-内置温度传感器读取-shihengrui④

[复制链接]
 楼主| nvjwiciw659 发表于 2020-12-5 01:16 | 显示全部楼层 |阅读模式
本帖最后由 nvjwiciw659 于 2020-12-6 19:22 编辑

今天我们来实现一个采集单片机内部温度
1.查文档  

20201202224713.png

2.偷懒复制例程

  1. /*******************************************************************************
  2.     * Function Name  : ADC_Function_Init
  3.     * Description    : Initializes ADC collection.
  4.     * Input          : None
  5.     * Return         : None
  6.     *******************************************************************************/
  7.     void ADC_Function_Init(void)
  8.     {
  9.             ADC_InitTypeDef ADC_InitStructure;
  10.             GPIO_InitTypeDef GPIO_InitStructure;
  11.    
  12.             RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
  13.       RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );
  14.             RCC_ADCCLKConfig(RCC_PCLK2_Div8);
  15.    
  16.             GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  17.             GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  18.             GPIO_Init(GPIOA, &GPIO_InitStructure);
  19.    
  20.             ADC_DeInit(ADC1);
  21.             ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  22.             ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  23.             ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  24.             ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  25.             ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  26.             ADC_InitStructure.ADC_NbrOfChannel = 1;
  27.             ADC_Init(ADC1, &ADC_InitStructure);
  28.    
  29.       ADC_TempSensorVrefintCmd(ENABLE);
  30.             ADC_Cmd(ADC1, ENABLE);
  31.    
  32.             ADC_ResetCalibration(ADC1);
  33.             while(ADC_GetResetCalibrationStatus(ADC1));
  34.             ADC_StartCalibration(ADC1);
  35.             while(ADC_GetCalibrationStatus(ADC1));
  36.     }
  37.    
  38.     /*******************************************************************************
  39.     * Function Name  : Get_ADC_Val
  40.     * Description    : Returns ADCx conversion result data.
  41.     * Input          : ch: ADC channel.
  42.     *                    ADC_Channel_0: ADC Channel0 selected.
  43.     *                    ADC_Channel_1: ADC Channel1 selected.
  44.     *                    ADC_Channel_2: ADC Channel2 selected.
  45.     *                    ADC_Channel_3: ADC Channel3 selected.
  46.     *                    ADC_Channel_4: ADC Channel4 selected.
  47.     *                    ADC_Channel_5: ADC Channel5 selected.
  48.     *                    ADC_Channel_6: ADC Channel6 selected.
  49.     *                    ADC_Channel_7: ADC Channel7 selected.
  50.     *                    ADC_Channel_8: ADC Channel8 selected.
  51.     *                    ADC_Channel_9: ADC Channel9 selected.
  52.     *                    ADC_Channel_10: ADC Channel10 selected.
  53.     *                    ADC_Channel_11: ADC Channel11 selected.
  54.     *                    ADC_Channel_12: ADC Channel12 selected.
  55.     *                    ADC_Channel_13: ADC Channel13 selected.
  56.     *                    ADC_Channel_14: ADC Channel14 selected.
  57.     *                    ADC_Channel_15: ADC Channel15 selected.
  58.     *                    ADC_Channel_16: ADC Channel16 selected.
  59.     *                    ADC_Channel_17: ADC Channel17 selected.
  60.     * Return         : val: The Data conversion value.
  61.     *******************************************************************************/
  62.     u16 Get_ADC_Val(u8 ch)
  63.     {
  64.       u16 val;
  65.    
  66.             ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
  67.             ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  68.    
  69.             while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
  70.    
  71.             val = ADC_GetConversionValue(ADC1);
  72.    
  73.             return val;
  74.     }
  75.    
  76.     /*******************************************************************************
  77.     * Function Name  : Get_ADC_Average
  78.     * Description    : Returns ADCx conversion result average data.
  79.     * Input          : ch: ADC channel.
  80.     *                    ADC_Channel_0: ADC Channel0 selected.
  81.     *                    ADC_Channel_1: ADC Channel1 selected.
  82.     *                    ADC_Channel_2: ADC Channel2 selected.
  83.     *                    ADC_Channel_3: ADC Channel3 selected.
  84.     *                    ADC_Channel_4: ADC Channel4 selected.
  85.     *                    ADC_Channel_5: ADC Channel5 selected.
  86.     *                    ADC_Channel_6: ADC Channel6 selected.
  87.     *                    ADC_Channel_7: ADC Channel7 selected.
  88.     *                    ADC_Channel_8: ADC Channel8 selected.
  89.     *                    ADC_Channel_9: ADC Channel9 selected.
  90.     *                    ADC_Channel_10: ADC Channel10 selected.
  91.     *                    ADC_Channel_11: ADC Channel11 selected.
  92.     *                    ADC_Channel_12: ADC Channel12 selected.
  93.     *                    ADC_Channel_13: ADC Channel13 selected.
  94.     *                    ADC_Channel_14: ADC Channel14 selected.
  95.     *                    ADC_Channel_15: ADC Channel15 selected.
  96.     *                    ADC_Channel_16: ADC Channel16 selected.
  97.     *                    ADC_Channel_17: ADC Channel17 selected.
  98.     * Return         : val: The Data conversion value.
  99.     *******************************************************************************/
  100.     u16 Get_ADC_Average(u8 ch,u8 times)
  101.     {
  102.             u32 temp_val=0;
  103.             u8 t;
  104.             u16 val;
  105.    
  106.             for(t=0;t<times;t++)
  107.             {
  108.                     temp_val+=Get_ADC_Val(ch);
  109.                     Delay_Ms(5);
  110.             }
  111.    
  112.             val = temp_val/times;
  113.    
  114.             return val;
  115.     }  
3.烧录程序   
20201202225509.png
不过内部温度大家都懂,不是很准确,所以玩玩就行!
下一步我准备调好串口,然后我们把这个温度数据上传到云平台,测试快结束了,大家加油!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

79

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

13

主题

79

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部