adc不用DMA搞了一段时间,发现adc通道和内部一些传感器是连在一起的,之前也听人说过这个事情。今天我就实验了一下。
在网上查了一下这方面的资料,发现都是废话
分为两步
- 获取ADC原始值
- 换算ADC原始值与温度关系
第一步,略。
第二部,查看手册,手册中温度传感器部分说,厂家校准的值存在系统存储器中。可以直接对地址进行读取。
IDE读取方式
我使用IDE连接后直接对地址进行查看,不知道相同型号的片子,内部值是不是相同。
还是要夸ST做的很用心的!点击绿色加号,添加查看地址后得到上图,这个样看不直观,调一下格式,一个字节一个字节的。
鼠标悬浮一会就会出现地址,我们可以从下图看到我们查看的地址值。
代码读取方式
uint16_t tem[10] = {0};
tem[0] = (uint16_t)*(uint32_t*)(0x1FFF75A8);
我们按照官方的地址得到了30℃时TS_CAL1 = 0x0402,110℃时TSCAL2 = 0x0513,于是得到二元一次方程组
TS_CAL1×k + b = 30
TS_CAL2×k + b = 110
解:略
之前我们得到我ADC原始值 -> 实际温度 = ADC原始值 × k + b。
实验和天气预报的温度相差1度,官方手册中明确说:这个是很好的线性关系,看谁头铁当温度传感器用。
STM32L151实战
我们直接查官方的两个手册,RM0038如下图
DS6876如下图
需要注意的几点
- 采样时间要长一些
- 数值计算时浮点数精准一点
附录
官方文档例子