1206|7

1万

帖子

16

TA的资源

版主

楼主
 

【极海APM32F407】5,跑一下内部温度传感器例子 [复制链接]

 

极海的这款芯片,在ADC1也有温度传感器。

而且例程中使能了DMA功能:

void DMA_Init(uint32_t* Buf)
{
    /* DMA Configure */
    DMA_Config_T dmaConfig;

    /* Enable DMA clock */
    RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_DMA2);

    /* size of buffer*/
    dmaConfig.bufferSize = 1;
    /* set memory Data Size*/
    dmaConfig.memoryDataSize = DMA_MEMORY_DATA_SIZE_HALFWORD;
    /* Set peripheral Data Size*/
    dmaConfig.peripheralDataSize = DMA_PERIPHERAL_DATA_SIZE_HALFWORD;
    /* Enable Memory Address increase*/
    dmaConfig.memoryInc = DMA_MEMORY_INC_DISABLE;
    /* Disable Peripheral Address increase*/
    dmaConfig.peripheralInc = DMA_PERIPHERAL_INC_DISABLE;
    /* Reset Circular Mode*/
    dmaConfig.loopMode = DMA_MODE_CIRCULAR;
    /* set priority*/
    dmaConfig.priority = DMA_PRIORITY_HIGH;
    /* read from peripheral*/
    dmaConfig.dir = DMA_DIR_PERIPHERALTOMEMORY;
    /* Set memory Address*/
    dmaConfig.memoryBaseAddr = (uint32_t)Buf;
    /* Set Peripheral Address*/
    dmaConfig.peripheralBaseAddr = (uint32_t)&ADC1->REGDATA;

    dmaConfig.channel = DMA_CHANNEL_0;
    dmaConfig.fifoMode = DMA_FIFOMODE_DISABLE;
    dmaConfig.fifoThreshold = DMA_FIFOTHRESHOLD_FULL;
    dmaConfig.peripheralBurst = DMA_PERIPHERALBURST_SINGLE;
    dmaConfig.memoryBurst = DMA_MEMORYBURST_SINGLE;

    DMA_Config(DMA2_Stream0, &dmaConfig);
    /* Clear DMA TF flag*/
    DMA_ClearIntFlag(DMA2_Stream0, DMA_INT_TCIFLG0);
    /* Enable DMA Interrupt*/
    DMA_EnableInterrupt(DMA2_Stream0, DMA_INT_TCIFLG);
    DMA_Enable(DMA2_Stream0);
}

那么在主循环中就判断DMA有没有数据就行了,有就执行串口打印功能:

while (1)
    {
        if (DMA_ReadStatusFlag(DMA2_Stream0, DMA_FLAG_TCIFLG0))
        {
            DataBuf = DMA_ConvertedValue;
            VSensorValue = (float)DataBuf/4095*3.3;

            /*!
             * According to actual test data of multiple bathes of chips, 
             * V28 is adopted instead of V25 for this example. And 0.7782v is the voltage for 28¡æ
             */
            TSensorValue = (VSensorValue - 0.7782f)/0.0024f + 28;

            printf("\r\n");
            printf("ADC REGDATA = 0x%04X \r\n", DataBuf);
            printf("Volatage    = %f V \r\n", VSensorValue);
            printf("Temperature    = %f ¡æ \r\n", TSensorValue);

            Delay(0xFFFFFF);
            DMA_ClearStatusFlag(DMA2_Stream0, DMA_FLAG_TCIFLG0);
        }
    }
}

以下是运行结果,由于没有串口线引出,只有打断点来观察。

最新回复

多谢版主大大解答,非常感谢!   详情 回复 发表于 2023-6-1 22:26
点赞 关注
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复
举报

7244

帖子

2

TA的资源

版主

沙发
 

内部温度传感器应该还算精准吧?

点评

还行,刚上电10来度,跑一跑20来度  详情 回复 发表于 2023-5-31 09:26
 
 
 

回复

1万

帖子

16

TA的资源

版主

板凳
 
wangerxian 发表于 2023-5-31 09:11 内部温度传感器应该还算精准吧?

还行,刚上电10来度,跑一跑20来度

点评

上电才十来度?这检测不等于环境温度?  详情 回复 发表于 2023-5-31 09:51
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 
 

回复

7244

帖子

2

TA的资源

版主

4
 
ddllxxrr 发表于 2023-5-31 09:26 还行,刚上电10来度,跑一跑20来度

上电才十来度?这检测不等于环境温度?

点评

等晚上再好好看看,应该是芯片温度  详情 回复 发表于 2023-5-31 12:46
 
 
 

回复

1万

帖子

16

TA的资源

版主

5
 
wangerxian 发表于 2023-5-31 09:51 上电才十来度?这检测不等于环境温度?

等晚上再好好看看,应该是芯片温度

个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 
 

回复

7048

帖子

11

TA的资源

版主

6
 
对比环境温度差距大不大,可以做日常的温度使用吗?

点评

好似不可以,测外界温度用NTC就是热敏电阻十分容易,片上温度只能测机箱内温度  详情 回复 发表于 2023-6-1 20:29
 
 
 

回复

1万

帖子

16

TA的资源

版主

7
 
lugl4313820 发表于 2023-6-1 07:49 对比环境温度差距大不大,可以做日常的温度使用吗?

好似不可以,测外界温度用NTC就是热敏电阻十分容易,片上温度只能测机箱内温度

点评

多谢版主大大解答,非常感谢!  详情 回复 发表于 2023-6-1 22:26
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 
 

回复

7048

帖子

11

TA的资源

版主

8
 
ddllxxrr 发表于 2023-6-1 20:29 好似不可以,测外界温度用NTC就是热敏电阻十分容易,片上温度只能测机箱内温度

多谢版主大大解答,非常感谢!

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表