MAX6675读取程序
IO定义
//PA5 SO
//PA6 CS
//PA7 SCK
#define MAX6675_SO_PORT GPIOA
#define MAX6675_SO_PIN GPIO_Pin_0
#define MAX6675_CS_PORT GPIOA
#define MAX6675_CS_PIN GPIO_Pin_11
#define MAX6675_SCK_PORT GPIOA
#define MAX6675_SCK_PIN GPIO_Pin_12
#define SCK PAout(12)
#define CS PAout(11)
#define MISO PAin(0)
1
2
3
4
5
6
7
8
9
10
11
12
由于这里采用的是stm32f103rct6主控的正点原子mini板,为了保证不和其他IC冲突,使用A0(连接的wk_up)、A11(usb)、A12(usb)引脚。
IO初始化
void max6675_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟
GPIO_InitStructure.GPIO_Pin = MAX6675_CS_PIN |MAX6675_SCK_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,MAX6675_CS_PIN|MAX6675_SCK_PIN);
GPIO_InitStructure.GPIO_Pin = MAX6675_SO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
其中用到的宏已经在上面引脚定义处给出。
串行数据读写程序
/**
* @brief max6675模块读写一个字节的数据
* @param txData:要发送的数据
* @retval 接收到的数据
*/
uint8_t max6675_readWriteByte(uint8_t txData)
{
unsigned char temp=0;
unsigned char dat=0;
for(temp=0x80; temp!=0; temp>>=1)
{
SCK=0;
SPI_delay(); //让SCK稳定
SCK=1;
SPI_delay(); //让SCK稳定
if(MISO==1)
{
dat|=temp;
}
else
{
dat&=~temp;
}
}
return dat;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
根据IC时序图,可以编写串行数据读取程序,注意因为是上升沿后读取数据,所以SCK先拉低再拉高,其中的SPI_delay调用的系统延时,用于使时钟线稳定,也保证采样时数据稳定,同时由于MAX6675允许的最快速率为4MHz,所以需要必要的延时。
————————————————
版权声明:本文为CSDN博主「小盼你最萌哒」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27508477/article/details/83117005
|