max31865不响应

max31865不响应,第1张

max31865不响应,MAX31865读取不到寄存器数据的原因

最近项目有使用到max31865铂电阻测温芯片,通讯是SPI通讯,本人第一次使用。

主机采用的是STM32的单片机,库函数是HAL库历慎。前期读取寄销敬存器数据的方式调用了HAL库的函数:

HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size,uint32_t Timeout)

然后采用正点原子定义的一个函数:

u8 SPI2_ReadWriteByte(u8 TxData)

{

u8 Rxdata

HAL_SPI_TransmitReceive(&SPI2_Handler,&TxData,&Rxdata,1,1000)

return Rxdata //返回收到的数据

}

在测试过程中发现单片机SPI能自发自收,而且单片机的SPI配置和代码感觉都是按着从机的数据手册要求来编写,但从机max31865就是不响应,不返回任何数据。SDO全程处于高阻态。

直到采用逻辑分析仪查看,如下图:

和数据手册亏烂慎的波形图对比之后,发现果然是自己代码的问题,数据手册要求如下图所示:

从机发数据也是需要主机提供时钟信号的

简单修改之后,果然收到了从机的数据,如下图:

设置一个定弊拆时器,定时器的定时长度为DA输出枣稿的最小时间间隔,相当于DA更新时间间隔。

假设DA更新周期为T0

锯齿波的周期为T

锯齿波的峰值为Max

根据DA的分辨率,用一个或两个字节对定时器中断进行计数,假设计数值为Value,每次计数+1时,将Value*Max*T0/T输出至DA数字输入端。当Value*Max*T0/T=Max时,Value清零。

如此输出的是单极性的锯齿波,若需要双极性:

输出值变为Value*2Max*T0/T-Max;Max为正负峰值的绝对值,同样是Value*2Max*T0/T-Max=Max时将凳卜孝Value清零。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12493421.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存