问答

汇集网友智慧,解决技术难题

21ic问答首页 - 求个华大单片机的内置温度传感器配置和使用例程

单片机 温度传感器 LED led灯 HC

求个华大单片机的内置温度传感器配置和使用例程

Intelligence2020-11-18
我想要用HC32L110C6PA内置的温度传感器来检测周围温度,具体应该怎么配置,
ADC是开启的,单通道P2.6,希望有大侠可以发个HC32L110C6PA的ADC温度检测例程吗?新人求助呀,现在俺就卡在这里了,用的是华大HC32L110C6PA芯片,我想用内置的温度传感器来控制LED灯亮灭,比如当环境温度检测到30℃时3个LED灯亮,检测到20℃时2个LED灯亮,以此类推,我应该怎么配置和使用呀,我也没有找到任何官方关于温度传感器如何配置和使用的例程,最好是有参考例程,求各位英雄好汉,路见不平,拔刀相助呀!!!
回答 +关注 16
2645人浏览 8人回答问题 分享 举报
8 个回答
  • 官方例程里面没有吗?
  • 这个就是adc的特殊应用
  • adc吧,就是
  • 感谢大侠分享,我也需要一份
  • 本帖最后由 wubangmi 于 2020-11-27 20:17 编辑

    ///< ADC 内部温度模块初始化
    void HC32_TempAdcInit(void)
    {
        ///< 开启ADC/BGR外设时钟
        M0P_CLOCK->PERI_CLKEN_f.ADC = 1; ///< 使能ADCBGR模块时钟
        M0P_BGR->CR_f.BGR_EN   = 1;      ///< 使能BGR
        M0P_BGR->CR_f.TS_EN    = 1;      ///< 使能内部温度传感器
        M0P_ADC->CR0_f.ADCEN   = 1;     ///< ADC模块使能
        delay1us(20);                   ///< 延时20uS

        ///< ADC 初始化配置
        M0P_ADC->CR1_f.CT       = 0;   ///< 单次转换模式
        M0P_ADC->CR0_f.SREF     = 0;   ///< 使用内部1.5V参考电压
        M0P_ADC->CR0_f.SAM      = 3;   ///< 12个转换周期
        M0P_ADC->CR0_f.CLKSEL   = 3;   ///< PLCK/8
        M0P_ADC->CR0_f.SEL      = 0x0A;///< 选择待转换的通道10为温度传感器
        M0P_ADC->CR0_f.BUFEN    = 1;   ///< 信号放大器使能
        M0P_ADC->CR0_f.ADCEN    = 0;   ///< ADC模块关闭
        M0P_BGR->CR_f.BGR_EN    = 0;   ///< 关闭BGR  
    }
    ///<  ADC通道10      温度ADC采样值获取
    uint16_t app_TempAdcAvgCodeGet(void)
    {   
        int16_t pu16AdcRestult = 0;
        uint16_t i;
        float Index;
        M0P_CLOCK->PERI_CLKEN_f.ADC = 1; ///< 使能ADCBGR模块时钟
        M0P_BGR->CR_f.BGR_EN   = 1;      ///< 使能BGR
        M0P_BGR->CR_f.TS_EN    = 1;       ///< 使能内部温度传感器
        delay1us(20);                               ///< 延时20uS
        M0P_ADC->CR0_f.ADCEN   = 1;     ///< ADC模块使能
        M0P_ADC->CR0_f.START   = 1;      ///< 启动ADC单次转换
        while(TRUE == M0P_ADC->CR0_f.START){;}    ///< 等待ADC转换完成
        pu16AdcRestult         = M0P_ADC->RESULT;
        M0P_ADC->CR0_f.ADCEN   = 0;     ///< ADC模块关闭
        M0P_BGR->CR_f.BGR_EN   = 0;     ///< 关闭BGR   
        i = *(uint16_t *)0x00100C34;
        pu16AdcRestult = pu16AdcRestult - i;
        Index = 25.0 + 0.0839*1.5*(float)pu16AdcRestult;
        return (uint16_t)(Index*100);
    }
    以上代码里的额delay函数自己写一个。

  • 里面也没有关于配置内置温度传感器的例程呢
    宝挖小子 2022-8-15 14:40 回复TA
    怎么样,这个内置传感器好用吗?有bug没? 
  • HC32L110_SDK.rar (16.62 MB)


您需要登录后才可以回复 登录 | 注册