W25Q128驱动测试
本章主要说明并演示stm32f103rct6的spi方式驱动w25q128。手册上的内容我就不细说了,大家自己看
工具: w25q128 stm32f103rct6 蓝牙串口
spi | 引脚 |
---|---|
NSS | PA2 |
MOSI | PA7 |
MISO | PA6 |
CLK | PA5 |
第一步:打开SPI
下面展示一些 打开spi1
。
RCC->APB2ENR | RCC_APB2ENR_SPI1EN;
GPIOA->CRL = (GPIOA->CRL & 000FF0FF) | 0XB4B00300;
SPI1->CR1 = SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR | SPI_CR1_SPE;
第二步:驱动w25q128
下面展示一些 驱动代码
。
uint8_t spi_send_byte(uint8_t data)
{
SPI1->DR = data;
//while ((SPI1->SR & SPI_SR_TXE) == 0);
while ((SPI1->SR & SPI_SR_RXNE) == 0);//接收完毕
return SPI1->DR;
}
void spi_send(uint8_t data[], uint16_t len)
{
uint16_t i;
CS_0;//片选拉低
for (i = 0; i < len; i++)
data[i] = spi_send_byte(data[i]);//发送要发送的数据,并将返回的数据保存
while (SPI1->SR & SPI_SR_BSY);
CS_1;
}
第三步:测试
下面展示一些 内联代码片
。
//发送消息
void W25Q128ReadID(void)
uint8_t data[] = {0x90, 0x00, 0x00, 0x00, 0x00, 0x00};
spi_send(data, sizeof(data));
dump_data(data, sizeof(data));
//打印接收到消息
void dump_data(uint8_t *data, uint16_t len)
{
uint8_t i;
printf("Data:");
for (i = 0; i < len; i++)
printf(" 0x%02x", data[i]);
printf("\n");
}
最后主函数调用 W25Q128_ReadID();
结果
另外文件操作部分我结合手册后续发出,有关spi知识,自行学习。
源工程代码:后续上传