个时间边沿开始CPHA1
5、传输速率和LSBFIRST帧格式设置:
15
14
13
12
11
BIDIMODEBIDIOECRCENCRCNEXTDFF
7
6
5
4
3
LSBFIRSTSPE
BR20
10RXONLY
2MSTR
9SSM
1CPOL
6、使能SPI设备:
15
14
BIDIMODEBIDIOE
7
6
LSBFIRSTSPE
SPI控制寄存器1SPI_CR1SPI1CR173FsckFcpu256SPI1CR107MSBfirst
13CRCEN
5
12
11
CRCNEXTDFF
4
3
BR20
10RXONLY
2MSTR
9SSM
1CPOL
SPI控制寄存器1SPI_CR1
SPI1CR116
SPI设备使能
8SSI
0CPHA
8SSI
0CPHA
f参考程序:voidSPIx_I
itvoid
RCCAPB2ENR12RCCAPB2ENR112
PORTA时钟使能SPI1时钟使能
这里只针对SPI口初始化
GPIOACRL0X000FFFFFGPIOACRL0XBBB00000PA567复用GPIOAODR0X75PA567上拉
SPI1CR1010全双工模式
SPI1CR119软件
ss管理
SPI1CR118
SPI1CR112SPI主机SPI1CR10118bit数据格式SPI1CR111空闲模式下SCK为1CPOL1SPI1CR110数据采样从第二个时间边沿开始CPHA1SPI1CR173FsckFcpu256SPI1CR107MSBfirstSPI1CR116SPI设备使能SPIx_ReadWriteByte0xff启动传输
SPI读写数据程序(注意全双工同时读写):SPIx读写一个字节
TxData:要写入的字节返回值:读到的字节
u8SPIx_ReadWriteByteu8Txdata
u8temp0
whileSPISR110SPISR11发送缓冲区为空SPISR110(发送缓冲区为空不成立即
发送缓冲区不为空)则一直判断等待发送缓冲区为空(跳出while循环才发送数据
temp
iftemp300
retur
0
若经判断发送缓冲区不为空则返回值“0”
SPIDRTxdata
若发送缓冲区为空则发送数据
temp0
fwhileSPISR100SPISR100(判断接收缓冲区是否为空)若为空则接收数据
tempiftemp300retur
0
retur
SPIDR
f六、DS18B20温度传感器用单片机控制温度传感器DS18B20进行温度采集主要进行一下步骤:(1)复位:首先我们必须对DS18B20芯片进行复位,复位就是由控制器(单片机)给DS18B20
单总线至少480uS的低电平信号。当18B20接到此复位信号后则会在1560uS后回发一个芯片
的存在脉冲。
voidDS18B20_Rstvoid
DS18B20_IO_OUT
讲PA0设置成输出状态
DS18B20_DQ_OUT0拉低DQ(PA0接DQ)
delay_us750拉低750us
DS18B20_DQ_OUT1DQ1释放数据线讲DQ交给1820
delay_us1515US
(2)存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在1560uS后接收存在脉冲,存在脉冲为一个60240uS的低电平信号。至此,通信双方已经达成了基本
的协议,接下来将会是控制器与18B20间的数据通信。如果复位低电平的时间不足或是单总
线的电路断路都不会接到存在脉冲,在设计时要注意意外r