STM32驱动ADS1220读取内部温度
最进使用ads1220做热电偶的实验,在读取芯片内部温度实验的时候卡了一天,明明看起来很简单却读不到自己想要的数据,后来认真读了一遍手册才找到原因,特此写下来记录。
ads1220驱动网上有很多链接,下载下来改改就行,很多都用的IO口模拟的SPI的接口,不过没有影响都可以使用,笔者使用的是stmf103的板子,连线正确即可,改好后往寄存器里写值读值就可以验证spi的时序是否正确。
重点来了,ads1220可以读取内部温度(接近室温),具体要怎么实现呢,将TS位寄存器写1,然后开启连续转换模式,然后定义一个long的参数,读数即可。
hal_ads1220.setCm(ADS1220_CM_CW);
hal_ads1220.setTs(ADS1220_TS_ENABLE);
tempval=hal_ads1220.readData();
printf("%ld ",tempval);
delay_ms(1000);
我在这后面加了一个延时,具体延时多少可以自己测试,一定要将下面的函数放在while循环里,多读几次才可以读出来,这里可能与数据输出速率有关,建议用串口输出,开始笔者使用debug调试,开始都是0XFFFFFF,就在这里卡了很长时间,以为程序有问题,后来用串口输出时,会有数据正常,但也会有数据不正常,具体原因还未找到(应该是数据输出速率的锅,后续程序再优化即可,重点是能读出温度!)输出具体如下:
如图可以看到,抓取了很多数据才有一个正确的数据(861866),具体原因还未知,后续再慢慢找吧,将861866转为16进制然后再将其转化为24左对齐的数据,取高14位,根据手册转化为摄氏度即可,差不多27度左右,还是比较接近的。如果有老哥知道为什么输出会这样的,真心请教!