STM32F429接MAX6675讀取熱電偶溫度

第一次編寫STM32程序,有很多問題請教,我想把MAX6675的SO的數據讀出來轉換成實際溫度,用串口工具讀出來。
是不是還有哪些沒配置好?小弟剛開始弄這個,着急用,在此感謝了!
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"

  4. #define SPI1_CS_Pin GPIO_PIN_4

  5. void Delay(__IO uint32_t nCount);

  6. void Delay(__IO uint32_t nCount)
  7. {
  8. while(nCount--){}
  9. }

  10. int main(void)
  11. {
  12.     uint16_t GetData=0;
  13.     uint16_t Temperature = 0;
  14.     uint16_t T = 0;



  15.     GPIO_InitTypeDef GPIO_A;        //定義一個GPIO_InitTypeDef的結構體GPIO_A
  16.     SPI_HandleTypeDef hspi1;        //SPI句柄


  17.     HAL_Init(); //初始化HAL庫 
  18.     Stm32_Clock_Init(360,25,2,8); uart_init(115200); //初始化USART

  19.     __HAL_RCC_SPI1_CLK_ENABLE();        //開啓SP1時鐘
  20.     __HAL_RCC_USART1_CLK_ENABLE();
  21.     __HAL_RCC_GPIOA_CLK_ENABLE(); //開啓GPIOA時鐘

  22.     GPIO_A.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
  23.     GPIO_A.Mode = GPIO_MODE_AF_PP;        //複用推輓輸出
  24.     GPIO_A.Pull=GPIO_PULLUP; //上拉
  25.     GPIO_A.Speed = GPIO_SPEED_LOW; //2MHz
  26.     GPIO_A.Alternate = GPIO_AF5_SPI1;
  27.     HAL_GPIO_Init(GPIOA,&GPIO_A);        //上面爲配置參數,此處啓動初始化

  28.     GPIO_A.Pin=SPI1_CS_Pin; //配置PA4(CS片選信號)
  29.     GPIO_A.Mode=GPIO_MODE_OUTPUT_PP; //推輓輸出
  30.     GPIO_A.Speed = GPIO_SPEED_LOW; //2MHz
  31.     HAL_GPIO_Init(GPIOA,&GPIO_A);        //上面爲配置參數,此處啓動初始化
  32.     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4,GPIO_PIN_SET);        // 先把片選拉高,真正用的時候再拉低

  33.     hspi1.Instance = SPI1;
  34.     hspi1.Init.Mode = SPI_MODE_MASTER;        //主模式
  35.     hspi1.Init.Direction = SPI_DIRECTION_2LINES_RXONLY;//SPI設置爲單線接受
  36.     hspi1.Init.DataSize = SPI_DATASIZE_16BIT;//SPI發送接收數據爲16位幀格式
  37.     hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;//同步時鐘空閒狀態爲 高電平
  38.     hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;        //同步時鐘第二個跳變沿數據被採集        
  39.     hspi1.Init.NSS = SPI_NSS_SOFT;        //NSS信號由軟件控制
  40.     hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; //波特率預分頻值爲256;
  41.     hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;        //數據傳輸從MSB位開始
  42.     hspi1.Init.TIMode = SPI_TIMODE_DISABLE;        //關閉TI模式
  43.     hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;        //關閉CRC
  44.     hspi1.Init.CRCPolynomial = 7;        //CRC值計算的多項式
  45.     HAL_SPI_Init(&hspi1);        //初始化
  46.     __HAL_SPI_ENABLE(&hspi1);        //使能SPI1

  47.     #define SPI1_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);//片選信號拉低爲SPI_L
  48.     #define SPI1_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);        //片選信號拉高爲SPI_H
  49.     SPI1_H;        //拉高片選,爲後面開啓片選做準備


  50.     while(1)
  51.     {
  52.         SPI1_L;        //開啓片選
  53.         HAL_SPI_Receive(&hspi1, (uint8_t*)&GetData, 1, 1000);
  54.         Temperature = (GetData>>3)&0x0fff;
  55.         SPI1_H;        
  56.         HAL_Delay(1000);

  57.         T = Temperature*1024/4095;
  58.         printf ("Temperature:%d\n",T);
  59.     }
複製代碼
發佈了3 篇原創文章 · 獲贊 31 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章