日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

max31865C语言程序,max31865温度传感器通信驱动代码

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 max31865C语言程序,max31865温度传感器通信驱动代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近研究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);??//寫入配置

總結

以上是生活随笔為你收集整理的max31865C语言程序,max31865温度传感器通信驱动代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。