打印
[技术问答]

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

[复制链接]
2686|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我想要用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)

使用特权

评论回复
板凳
Intelligence|  楼主 | 2020-11-19 09:21 | 只看该作者

使用特权

评论回复
地板
Intelligence|  楼主 | 2020-11-19 13:45 | 只看该作者

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

使用特权

评论回复
评论
宝挖小子 2022-8-15 14:40 回复TA
怎么样,这个内置传感器好用吗?有bug没? 
5
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函数自己写一个。

使用特权

评论回复
6
海滨消消| | 2022-8-16 10:08 | 只看该作者
感谢大侠分享,我也需要一份

使用特权

评论回复
7
redone| | 2022-9-2 20:40 | 只看该作者
adc吧,就是

使用特权

评论回复
8
littlelida| | 2022-9-8 21:10 | 只看该作者
这个就是adc的特殊应用

使用特权

评论回复
9
chenjun89| | 2022-9-8 21:50 | 只看该作者
官方例程里面没有吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

20

帖子

0

粉丝