max31865C语言程序,max31865温度传感器通信驱动代码「建议收藏」

max31865C语言程序,max31865温度传感器通信驱动代码「建议收藏」最近研究maximmax31865温度传感器,贴出通信驱动代码和大牛门一起学习,指点我一二max31865是专门用来测量电阻类温度传感器的,ad分辨率为15位,可以做PT100高精度测量,通信接口为SPI。通过评估板CN7的PC10,PC11,PC12(SPI3)连接芯片模块,PD2做片选。下面贴上驱动代码:1.///////////////////////////////////////…

大家好,又见面了,我是你们的朋友全栈君。

最近研究maxim max31865温度传感器,贴出通信驱动代码和大牛门一起学习,指点我一二

max31865是专门用来测量电阻类温度传感器的,ad分辨率为15位,可以做PT100高精度测量,通信接口为SPI。

通过评估板CN7的PC10,PC11,PC12 (SPI3)连接芯片模块,PD2做片选。

下面贴上驱动代码:

1.  //

2.  //

3.

4.  SPI_HandleTypeDef SPI3_Handler;

5.

6.  void SPI3_Init(void)

7.  {

8.      SPI3_Handler.Instance=SPI3;                         //SP3

9.      SPI3_Handler.Init.Mode=SPI_MODE_MASTER;             //设置SPI工作模式,设置为主模式

10.    SPI3_Handler.Init.Direction=SPI_DIRECTION_2LINES;   //设置SPI单向或者双向的数据模式:SPI设置为双线模式

11.    SPI3_Handler.Init.DataSize=SPI_DATASIZE_8BIT;       //设置SPI的数据大小:SPI发送接收8位帧结构

12.    SPI3_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH;    //串行同步时钟的空闲状态为高电平

13.    SPI3_Handler.Init.CLKPhase=SPI_PHASE_2EDGE;         //串行同步时钟的第二个跳变沿(上升或下降)数据被采样

14.    SPI3_Handler.Init.NSS=SPI_NSS_SOFT;                 //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制

15.    SPI3_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;//定义波特率预分频的值:波特率预分频值为256

16.    SPI3_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB;        //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始

17.    SPI3_Handler.Init.TIMode=SPI_TIMODE_DISABLE;        //关闭TI模式

18.    SPI3_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;//关闭硬件CRC校验

19.    SPI3_Handler.Init.CRCPolynomial=7;                  //CRC值计算的多项式

20.    HAL_SPI_Init(&SPI3_Handler);//初始化

21.

22.    __HAL_SPI_ENABLE(&SPI3_Handler);                    //使能SPI3

23.

24.    SPI3_ReadWriteByte(0Xff);                           //启动传输

25.}

26.

27.void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)

28.{

29.    GPIO_InitTypeDef GPIO_InitStruct;

30.    /* USER CODE BEGIN SPI3_MspInit 0 */

31.

32.    /* USER CODE END SPI3_MspInit 0 */

33.    /* Peripheral clock enable */

34.    __HAL_RCC_SPI3_CLK_ENABLE();

35.

36.    /**SPI3 GPIO Configuration

37.    PC10     ——> SPI3_SCK

38.    PC11     ——> SPI3_MISO

39.    PC12     ——> SPI3_MOSI

40.    */

41.    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;

42.    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

43.    GPIO_InitStruct.Pull = GPIO_NOPULL;

44.    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;

45.    GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;

46.    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

47.}

48.

49.void SPI3_SetSpeed(u8 SPI_BaudRatePrescaler)

50.{

51.    assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));//判断有效性

52.    __HAL_SPI_DISABLE(&SPI3_Handler);            //关闭SPI

53.    SPI3_Handler.Instance->CR1&=0XFFC7;          //位3-5清零,用来设置波特率

54.    SPI3_Handler.Instance->CR1|=SPI_BaudRatePrescaler;//设置SPI速度

55.    __HAL_SPI_ENABLE(&SPI3_Handler);             //使能SPI

56.

57.}

58.

59.u8 SPI3_ReadWriteByte(u8 TxData)

60.{

61.    u8 Rxdata;

62.    HAL_SPI_TransmitReceive(&SPI3_Handler,&TxData,&Rxdata,1, 1000);

63.        return Rxdata;                              //返回收到的数据

64.}

65.

66.

67.#define MAX31865_CFG               0x00

68.#define MAX31865_RTD_MSB           0x01

69.#define MAX31865_RTD_LSB           0x02

70.#define MAX31865_HIGH_MSB          0x03

71.#define MAX31865_HIGH_LSB          0x04

72.#define MAX31865_LOW_MSB           0x05

73.#define MAX31865_LOW_LSB           0x06

74.#define MAX31865_FAULT             0x07

75.

76.//

77.// 模块特征

78.// 连续转换大约每次转换大约21ms

79.// 单次转换每次大约52ms(60HZ滤波) 62ms(50HZ滤波)

80.//

81.

82.#define SpiRw(x)       SPI3_ReadWriteByte(x)

83.

84.#define max31865_enable()       PT_SS=0

85.#define max31865_disable()      PT_SS=1

86.

87./*****************************************************************************//*!

88.* @brief           max38165 data read.

89.*

90.* @param   none

91.*

92.* @return  none

93.*

94.* @ Pass/ Fail criteria: none

95.*****************************************************************************/

96.uint8_t max31865_read(uint8_t addr){

97.

98.    uint8_t Src[2];

99.    uint8_t Des[2];

100.

101.      max31865_disable();

102.      NOP20();

103.      max31865_enable();

104.      NOP20();

105.

106.      Src[0] = addr;

107.      Src[1] = 0xFF;

108.

109.      Des[0] = SpiRw(Src[0]);

110.      Des[1] = SpiRw(Src[1]);

111.

112.      max31865_disable();

113.

114.      return Des[1];

115.  }

116.

117.

118.  /*****************************************************************************//*!

119.  * @brief           max38165 data wrire.

120.  *

121.  * @param   none

122.  *

123.  * @return  none

124.  *

125.  * @ Pass/ Fail criteria: none

126.  *****************************************************************************/

127.  uint8_t max31865_write(uint8_t addr, uint8_t data){

128.      uint8_t Src[2];

129.      uint8_t Des[2];

130.

131.      max31865_disable();

132.      NOP20();

133.      max31865_enable();

134.      NOP20();

135.

136.      Src[0] = addr;

137.      Src[1] = data;

138.

139.      Des[0] = SpiRw(Src[0]);

140.      Des[1] = SpiRw(Src[1]);

141.

142.      max31865_disable();

143.

144.      return Des[1];

145.  }

146.

147.  /*****************************************************************************//*!

148.  * @brief           max38165 config.

149.  *

150.  * @param   none

151.  *

152.  * @return  none

153.  *

154.  * @ Pass/ Fail criteria: none

155.  *****************************************************************************/

156.  uint8_t max31865_Cfg(uint8_t cfg){

157.      uint8_t cfgR;

158.

159.      for(uint8_t faultCnt = 0;faultCnt<3;faultCnt++){

160.          max31865_write(MAX31865_CFG|0x80, cfg); //写入配置

161.          cfgR = max31865_read(MAX31865_CFG);     //读回配置

162.          if((cfgR & 0xDD) == (cfg & 0xDD)){

163.              cfgR &= 0xDD;

164.              break;

165.          }

166.      }

167.      return cfgR;

168.  }

169.

170.  /*****************************************************************************//*!

171.  * @brief           max38165 rdt read.

172.  *

173.  * @param   none

174.  *

175.  * @return  none

176.  *

177.  * @ Pass/ Fail criteria: none

178.  *****************************************************************************/

179.  uint16_t max31865_rtd_read(void){

180.      uint16_t res;

181.

182.      res = max31865_read(MAX31865_RTD_LSB);

183.      res<<=8;

184.      res |= max31865_read(MAX31865_RTD_MSB);

185.

186.      return (res>>1);

187.  }

188.

189.  /*****************************************************************************//*!

190.  * @brief           max38165 high val set.

191.  *

192.  * @param   none

193.  *

194.  * @return  none

195.  *

196.  * @ Pass/ Fail criteria: none

197.  *****************************************************************************/

198.  uint16_t max31865_high_set(uint16_t val){

199.      uint8_t dr,dw;

200.      uint16_t fault;

201.

202.      fault = val;

203.

204.      dw = val & 0xFF;

205.      for(uint8_t faultCnt = 0;faultCnt<5;faultCnt++){

206.          max31865_write(MAX31865_HIGH_LSB|0x80, dw);  //写入配置

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147659.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 普通索引和唯一索引的区别b+tree_两个字段建立唯一索引

    普通索引和唯一索引的区别b+tree_两个字段建立唯一索引转自:https://blog.csdn.net/u014071328/article/details/78780683唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(logn)。1、普通索引  普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDER…

    2022年9月15日
  • noclassdeffounderror:org/apache_apache server at port 80

    noclassdeffounderror:org/apache_apache server at port 80web新人一个,写在这里的是我犯过的错误,如果有老兄和我一样倒霉可以试试,我的这个方法。说正题吧,我在使用Axis2发布我接口的三个方法时报错1、首先在服务端直接编写了测试类调用接口的方法,结果是完全正确2、然后我又在客户端写了一个测试类调用接口的方法,这次失败了,我通过这个错误报文找了很多博客都没能解决客户端测试类报的错误(这似乎没啥用,不够详细)org.apache.a…

    2022年9月13日
  • telnet远程登录AAA认证

    telnet远程登录AAA认证R1<Huawei>system-view//进入全局配置模式[Huawei]sysnameR1//改名[R1]undoinfo-centerenable//关闭信息告警提示[R1]interfaceg0/0/0//进入g/0/0接口[R1-GigabitEthernet0/0/0]ipaddress192.168.100…

    2022年6月7日
  • cas算法是什么_对算法的认识

    cas算法是什么_对算法的认识应用原子操作类,例如AtomicInteger,AtomicBoolean …适用于并发量较小,多cpu情况下;Java中有许多线程安全类,比如线程安全的集合类。从Java5开始,在java.util.concurrent包下提供了大量支持高效并发访问的集合接口和实现类。如:ConcurrentMap、ConcurrentLinkedQueue等线程安全集合。引入问题那么问题来了,这些线程安全类的底层是怎么保证线程安全的,你可能会想到是不是使用同步代码锁synchronized?引入概念这些线

    2022年8月8日
  • CMD关闭端口命令「建议收藏」

    CMD关闭端口命令「建议收藏」1.查询端口netstat-ano|findstr”123456″TCP127.0.0.1:12340.0.0.0:0LISTENING67892.查询端口名tasklist|findstr”6789″studio64.exe6789Console…

    2022年7月20日
  • 【数据结构】— kmp算法和strstr函数

    【数据结构】— kmp算法和strstr函数kmp算法和strstr函数注:现实生活中,字符串匹配在很多的应用场景里都有着极其重要的作用,包括生物信息学、信息检索、拼写检查、语言翻译、数据压缩、网络入侵检测等等,至此诞生了很多的算法,那么我们今天就来探索这两种经典的算法。一、概念分析首先我们需要了解到什么是kmp算法和strstr函数概念如下:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R….

    2022年6月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号