void SPI1_SetSpeedu8 SPI_BaudRatePrescaler assert_paramIS_SPI_BAUDRATE_PRESCALERSPI_BaudRatePrescaler; SPI1-CR1&=0XFFC7; SPI1-CR1=SPI_BaudRatePrescaler; ÉèÖÃSPI1ËÙ¶È SPI_CmdSPI1ENABLE; SPIx ¶Áдһ¸ö
void SPI1_SetSpeed(uint32_t SPI_BaudRatePrescaler) { assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler)); LL_SPI_SetBaudRatePrescaler(SPI1, SPI_BaudRatePrescaler); //设置SPI1的速率 LL_SPI_Enable(SPI1); }
//SPIx 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
uint8_t SPI1_ReadWriteByte(uint8_t TxData)
{
uint8_t retry=0;
while (LL_SPI_IsActiveFlag_TXE(SPI1) == 0) //检查指定的SPI标志位是否设置:发送缓存空标志位
{
retry++;
if(retry>200) return 0;
}
LL_SPI_TransmitData8(SPI1, TxData); //通过SPIx发送一个字节的数据
retry=0;
while (LL_SPI_IsActiveFlag_RXNE(SPI1) == 0) //检查指定的SPI标志位是否设置:接收缓存非空标志位
{
retry++;
if(retry>200) return 0;
}
return LL_SPI_ReceiveData8(SPI1); //返回通过SPIx接收到的数据
}
uint8_t Readreg(uint8_t address) { uint8_t reg1; // uint8_t reg2;
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
delay_ms(1);
SPI1_ReadWriteByte(0x40 | address);
delay_ms(1);
SPI1_ReadWriteByte(0x01);
delay_ms(1);
reg1 = SPI1_ReadWriteByte(0x00);
delay_ms(1);
SPI1_ReadWriteByte(0x00);
GPIO_SetBits(GPIOA,GPIO_Pin_4);
return reg1;
}
void Writereg(uint8_t address,uint8_t data) {
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
delay_ms(1);
SPI1_ReadWriteByte(0x80 | address);
delay_ms(1);
SPI1_ReadWriteByte(0x00);
delay_ms(1);
SPI1_ReadWriteByte(data);
delay_ms(1);
GPIO_SetBits(GPIOA,GPIO_Pin_4);
}
void ReadData(uint8_t data[27]) { int i; for(i = 0; i < 27; i++) { data[i] = SPI1_ReadWriteByte(0x00); }
原文地址: https://www.cveoy.top/t/topic/dn95 著作权归作者所有。请勿转载和采集!