最近项目有使用到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清零。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)