[技术问答] 求个华大单片机的内置温度传感器配置和使用例程

[复制链接]
3653|9
 楼主| 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 | 显示全部楼层
HC32L110_SDK.rar (16.62 MB, 下载次数: 9)
00.jpg
 楼主| Intelligence 发表于 2020-11-19 09:21 | 显示全部楼层
 楼主| Intelligence 发表于 2020-11-19 13:45 | 显示全部楼层

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

评论

怎么样,这个内置传感器好用吗?有bug没?  发表于 2022-8-15 14:40
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 来自手机 | 显示全部楼层
官方例程里面没有吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

20

帖子

0

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