Intelligence 发表于 2020-11-18 15:28

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

我想要用HC32L110C6PA内置的温度传感器来检测周围温度,具体应该怎么配置,
ADC是开启的,单通道P2.6,希望有大侠可以发个HC32L110C6PA的ADC温度检测例程吗?新人求助呀,现在俺就卡在这里了,用的是华大HC32L110C6PA芯片,我想用内置的温度传感器来控制LED灯亮灭,比如当环境温度检测到30℃时3个LED灯亮,检测到20℃时2个LED灯亮,以此类推,我应该怎么配置和使用呀,我也没有找到任何官方关于温度传感器如何配置和使用的例程,最好是有参考例程,求各位英雄好汉,路见不平,拔刀相助呀!!!

tyw 发表于 2020-11-18 18:04



Intelligence 发表于 2020-11-19 09:21

tyw 发表于 2020-11-18 18:04


谢谢大侠!

Intelligence 发表于 2020-11-19 13:45

Intelligence 发表于 2020-11-19 09:21
谢谢大侠!

里面也没有关于配置内置温度传感器的例程呢

wubangmi 发表于 2020-11-27 18:58

本帖最后由 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-16 10:08

感谢大侠分享,我也需要一份

redone 发表于 2022-9-2 20:40

adc吧,就是

littlelida 发表于 2022-9-8 21:10

这个就是adc的特殊应用

chenjun89 发表于 2022-9-8 21:50

官方例程里面没有吗?
页: [1]
查看完整版本: 求个华大单片机的内置温度传感器配置和使用例程