本文主要是介绍26、江科大stm32视频学习笔记——W25Q64简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、电路图
1、软件模拟的SPI:线可以任意接
2、硬件模拟的SPI:要按以下方式连接
3、本次软件模拟和硬件模拟使用同一个电路图,方便切换
CS(片选):PA4 DO(从机输出):PA6
CLK(时钟):PA5 DI(从机输入):PA7
二、软件SPI读写W25Q64
1、SPI.c(初始化寄存器,实现读取一个字节的功能)
#include "stm32f10x.h" // Device headervoid MySPI_W_SS(uint8_t BitValue)
{GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)BitValue);
}void MySPI_W_SCK(uint8_t BitValue)
{GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)BitValue);
}void MySPI_W_MOSI(uint8_t BitValue)
{GPIO_WriteBit(GPIOA, GPIO_Pin_7, (BitAction)BitValue);
}uint8_t MySPI_R_MISO(void)
{return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6);
}void MySPI_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //上拉输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);MySPI_W_SS(1); //SS默认高电平(下降沿为开始工作,低电平状态为工作中,上升沿为结束工作)MySPI_W_SCK(0); //SCK默认为低电平(上升沿移入数据,下降沿移出数据)
}void MySPI_Start(void)
{MySPI_W_SS(0);
}void MySPI_Stop(void)
{MySPI_W_SS(1);
}uint8_t MySPI_SwapByte(uint8_t ByteSend)
{uint8_t i, ByteReceive = 0x00;for (i = 0; i < 8; i ++){//先SS下降沿,移出数据,SCK上升沿,移入数据,再SCK下降沿,移出数据,下面只管主机,MySPI_W_MOSI(ByteSend & (0x80 >> i)); //将数据移出到MOSI线MySPI_W_SCK(1); //上升沿移入数据if (MySPI_R_MISO() == 1){ByteReceive |= (0x80 >> i);} //将移入的数据读取出来MySPI_W_SCK(0); //下降沿移出数据}return ByteReceive; //读取出来的数据
}
这篇关于26、江科大stm32视频学习笔记——W25Q64简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!