完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
来源 灵动MM32 1、内部温度传感器配置 MM32L0系列产品包含10 路外部输入通道、 内部温度传感器通道和内部 1.2V 参考电压通道。每个外部输入通道都有独立的使能位,可通过设置 ADCHS 寄存器的对应位来设置。 MM32L0系列产品的内部温度传感器可以用来测量 CPU 的温度,该温度传感器在内部和ADCx_IN10输入通道相连接,此通道把传感器输出的电压转换成数字值,内部温度传感器支持的温度范围为:-40~105度,精度为±1.5度左右。 计算公式如下: Temp= 27.0+(Vadc –Vbase) / Slope; 上式中: Vbase表示在 27 度时的基准数值,这个值在芯片出厂时会已经固定,该值存放在MCU的系统存储区中,存放地址是0x1fff f7f4。 Slope 表示温度与Vbase 曲线的平均斜率(单位为 mv/℃或 uv/℃)(典型值为4.8mv/℃),12位的ADC,有4096个值,MCU的AVDDA的供电电压是3.3v=3300mv,Slope=(4096/3300)*4.8= 5.957818181818182。 Vadc表示温度传感器通道采集转换后的值。 利用以上公式,我们就可以方便的计算出当前温度传感器的温度了。 ADC模块基础配置: voidADC1_SingleChannel(uint8_t ADC_Channel_x) { ADC_InitTypeDef ADC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//使能ADC时钟 ADC_InitStructure.ADC_PRESCARE= ADC_PCLK2_PRESCARE_16;//ADC分频 ADC_InitStructure.ADC_Mode= ADC_Mode_Continuous_Scan;//连续扫描模式 ADC_InitStructure.ADC_ContinuousConvMode= ENABLE;//连续扫描使能 ADC_InitStructure.ADC_DataAlign= ADC_DataAlign_Right;//右对齐 ADC_InitStructure.ADC_Resolution= ADC_Resolution_12b;//12位ADC ADC_Init(ADC1,&ADC_InitStructure); ADC_RegularChannelConfig(ADC1,ADC_Channel_x,0,ADC_SampleTime_13_5Cycles);//设置13.5个采样周期 ADC_TempSensorCmd(ENABLE);//使能内部温度传感器功能 ADC_Cmd(ADC1,ENABLE);//使能ADC1 } 获取ADC的转换结果数据: u16ADC1_SingleChannel_Get(uint8_t ADC_Channel_x) { u16 puiADData; ADC_SoftwareStartConvCmd(ADC1,ENABLE); //启动ADC1的软件转换功能 while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==0);//等待转换结束 ADC_ClearFlag(ADC1,ADC_FLAG_EOC);//置位转换结束位 puiADData=ADC_GetConversionValue(ADC1);//获取转换结果数据 return puiADData; } 获取平均值: u16Get_Adc_Average(uint8_t ADC_Channel_x,uint8_t times)//获取平均值 { u32 temp_val=0; u8 t; u8 delay; for(t=0;t { temp_val+=ADC1_SingleChannel_Get(ADC_Channel_x); //读取通ADC_Channel_x道值 for(delay=0;delay<100;delay++); } returntemp_val/times;//去times次均值 } 主函数: int main(void) { u16 ADCVAL,ADCVAL1; float Temp; delay_init(); uart_initwBaudRate(115200); ADC1_SingleChannel(ADC_Channel_10); while(1) { ADCVAL1 =(*(u32*)0x1ffff7f4);// 获取27 度时的基准数值 ADCVAL=Get_Adc_Average(ADC_Channel_10,5); Temp= 27.0+(ADCVAL -ADCVAL1)/5.96;//内部温度计算公式 printf("内部温度=%。2f rn",Temp); delay_ms(1000); } } 实验结果: (实验室空调温度为30摄氏度的实验环境) 2、高温时钟校准模块配置 MM32L0系列产品工作温度范围是-40~105度,面对一些复杂的环境下MCU在HSI 下高温时钟校准模块能够确保时钟系统正常运行。 HSI 时钟信号由内部 48MHz 的振荡器产生,可直接作为系统时钟或作为 PLL 输入。 HSI 振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比 HSE 晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。 制造工艺决定了不同芯片的振荡器频率会不同,这就是为什么每个芯片的 HSI 时钟频率在出厂前已经被校准到 1%(在 25度)的原因。系统复位时,工厂校准值被装载到时钟控制寄存器的相应的 HSICAL 位。 时钟控制寄存器中的 HSIRDY 位用来指示 HSI 振荡器是否稳定。在时钟启动过程中,直到这一位被硬件置‘1’, HSI 振荡器输出时钟才被释放。 HSI 振荡器可由时钟控制寄存器中的 HSION位来启动和关闭。 针对高温的恶劣环境下的一些应用环境,MM32L0系列产品有高温时钟校准模块,能够确保在高温环境下HSI的精度。 高温时钟校准模块的配置主要分为两个部分:ADC配置和RCC配置。 1、A/D 配置寄存器(ADC_ADCFG): |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
2252个成员聚集在这个小组
加入小组灵动微电子MM32全系列MCU产品应用手册,库函数和例程和选型表
11816 浏览 3 评论
【MM32 eMiniBoard试用连载】+基于OLED12864的GUI---U8G2
5972 浏览 1 评论
【MM32 eMiniBoard试用连载】移植RT-Thread至MM32L373PS
11114 浏览 0 评论
【MM32 eMiniBoard测评报告】+ 开箱 + 初探
4593 浏览 1 评论
灵动微课堂(第106讲) | MM32 USB功能学习笔记 —— WinUSB设备
4325 浏览 1 评论
[MM32软件] MM32F002使用内部flash存储数据怎么操作?
1265浏览 1评论
844浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 18:09 , Processed in 0.585900 second(s), Total 50, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号