新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32 的內部溫度傳感器

        STM32 的內部溫度傳感器

        作者: 時間:2016-11-11 來源:網絡 收藏
        STM32有一個內部的溫度傳感器,可以用來測量CPU及周圍的溫度(TA)。該溫度傳感器在內部和ADCx_IN16輸入通道相連接,此通道把傳感器輸出的電壓轉換成數字值。溫度傳感器模擬輸入推薦采樣時間是17.1μs。STM32的內部溫度傳感器支持的溫度范圍為:-40~125度。精度比較差,為±1.5℃左右。

        器的使用很簡單,只要設置一下內部ADC,并激活其內部通道就差不多了。

        本文引用地址:http://www.104case.com/article/201611/317046.htm

        STM32內部溫度傳感器使用的步驟了,如下:

        1)設置ADC,開啟內部溫度傳感器。

        ADC_TempSensorVrefintCmd(ENABLE);//開啟內部溫度傳感器功能:

        2)讀取通道16的AD值,計算結果。

        在設置完之后,我們就可以讀取溫度傳感器的電壓值了

        1. //初始化ADC
        2. //這里我們僅以規則通道為例
        3. //我們默認將開啟通道0~3
        4. voidT_Adc_Init(void)//ADC通道初始化
        5. {
        6. ADC_InitTypeDef ADC_InitStructure;
        7. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);//使能GPIOA,ADC1通道時鐘
        8. RCC_ADCCLKConfig(RCC_PCLK2_Div6);//分頻因子6時鐘為72M/6=12MHz
        9. ADC_DeInit(ADC1);//將外設 ADC1 的全部寄存器重設為缺省值
        10. ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//ADC工作模式:ADC1和ADC2工作在獨立模式
        11. ADC_InitStructure.ADC_ScanConvMode=DISABLE;//模數轉換工作在單通道模式
        12. ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;//模數轉換工作在單次轉換模式
        13. ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//轉換由軟件而不是外部觸發啟動
        14. ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//ADC數據右對齊
        15. ADC_InitStructure.ADC_NbrOfChannel=1;//順序進行規則轉換的ADC通道的數目
        16. ADC_Init(ADC1,&ADC_InitStructure);//根據ADC_InitStruct中指定的參數初始化外設ADCx的寄存器
        17. ADC_TempSensorVrefintCmd(ENABLE);//開啟內部溫度傳感器
        18. ADC_Cmd(ADC1,ENABLE);//使能指定的ADC1
        19. ADC_ResetCalibration(ADC1);//重置指定的ADC1的復位寄存器
        20. while(ADC_GetResetCalibrationStatus(ADC1));//獲取ADC1重置校準寄存器的狀態,設置狀態則等待
        21. ADC_StartCalibration(ADC1);//
        22. while(ADC_GetCalibrationStatus(ADC1));//獲取指定ADC1的校準程序,設置狀態則等待
        23. }
        24. u16 T_Get_Adc(u8 ch)
        25. {
        26. ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);//ADC1,ADC通道3,第一個轉換,采樣時間為239.5周期
        27. ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能指定的ADC1的軟件轉換啟動功能
        28. while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//等待轉換結束
        29. returnADC_GetConversionValue(ADC1);//返回最近一次ADC1規則組的轉換結果
        30. }
        31. //得到ADC采樣內部溫度傳感器的值
        32. //取10次,然后平均
        33. u16 T_Get_Temp(void)
        34. {
        35. u16 temp_val=0;
        36. u8 t;
        37. for(t=0;t<10;t++)
        38. {
        39. temp_val+=T_Get_Adc(ADC_Channel_16);//TampSensor
        40. delay_ms(5);
        41. }
        42. returntemp_val/10;
        43. }
        44. //獲取通道ch的轉換值
        45. //取times次,然后平均
        46. u16 T_Get_Adc_Average(u8 ch,u8 times)
        47. {
        48. u32 temp_val=0;
        49. u8 t;
        50. for(t=0;t
        51. {
        52. temp_val+=T_Get_Adc(ch);
        53. delay_ms(5);
        54. }
        55. returntemp_val/times;
        56. }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 金堂县| 富宁县| 孝昌县| 合肥市| 武汉市| 洮南市| 沙雅县| 福清市| 威信县| 临猗县| 大余县| 沂水县| 张掖市| 额尔古纳市| 县级市| 沙田区| 连南| 文安县| 桓仁| 墨玉县| 蕉岭县| 巢湖市| 寿光市| 河东区| 武强县| 民勤县| 紫金县| 甘南县| 柏乡县| 泸定县| 承德市| 固始县| 伊宁县| 射阳县| 黄陵县| 昌江| 张家口市| 开封市| 泰安市| 贞丰县| 治多县|