STM32F429接MAX6675读取热电偶温度

2019-07-20 17:17发布

第一次编写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 ",T);
  59.     }
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
木犀
2019-07-21 01:30
wofei1314 发表于 2016-12-27 17:23
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;  
hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;  
hspi2.Init.B ...

极性Polarity和相位Phase我都配置了:
[mw_shl_code=c,true]hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;//同步时钟空闲状态为 高电平
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;        //同步时钟第二个跳变沿数据被采集        
hspi1.Init.NSS = SPI_NSS_SOFT;        //NSS信号由软件控制
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; //波特率预分频值为256;[/mw_shl_code]

一周热门 更多>