我想用SPI驱动W25QFLASH可是读取的FLASHid怎么都是错的,FLASH硬件接线没有问题,检查过很多边,所有的宏都打开了,第一个宏
/*#define HAL_SDRAM_MODULE_ENABLED */
/*#define HAL_SMARTCARD_MODULE_ENABLED */
#define HAL_SPI_MODULE_ENABLED
/*#define HAL_SRAM_MODULE_ENABLED */
/*#define HAL_TIM_MODULE_ENABLED */
#define HAL_UART_MODULE_ENABLED
/*#define HAL_USART_MODULE_ENABLED */
第二个宏
#define RT_USING_PIN
#define RT_USING_SPI
第三个宏
#define BSP_USING_UART
#define BSP_USING_UART1
#define BSP_USING_SPI
#define BSP_USING_SPI1
代码如下
#define W25Q_SPI_DEVICE_NAME "spi10"
#define W25Q_SPI_BUS_NAME "spi1"
static void spientry(void*parameter)
{
rt_kprintf("spi thread run here!\n");
rt_uint8_t id[5] = {0};
rt_uint8_t w25x_read_id =0X9F;
rt_uint8_t test[5] = {0};
struct rt_spi_configuration cfg;
struct rt_spi_device *spi_dev_w25q;
rt_kprintf("spi attach run here!\n");
if (RT_EOK != rt_hw_spi_device_attach(W25Q_SPI_BUS_NAME, W25Q_SPI_DEVICE_NAME,GET_PIN(A, 4) ))
{
rt_kprintf("spi fault!\n");
}
rt_kprintf("spi attach complete!\n");
spi_dev_w25q = (struct rt_spi_device *)rt_device_find(W25Q_SPI_DEVICE_NAME);
if(spi_dev_w25q!=RT_NULL)
{
rt_kprintf("spi device has find!\n");
}
cfg.data_width = 8;
cfg.mode = RT_SPI_MASTER | RT_SPI_MODE_3 | RT_SPI_MSB ;
cfg.max_hz = 1000000;
if(rt_spi_configure(spi_dev_w25q, &cfg)==RT_EOK)
{
rt_kprintf("spi config has done!\n");
}
//rt_spi_send_then_recv(spi_dev_w25q, &w25x_read_id, 1, id, 5);
struct rt_spi_message msg1,msg2;
msg1.send_buf=&w25x_read_id;
msg1.recv_buf=RT_NULL;
msg1.length=1;
msg1.cs_take=1;
msg1.cs_release=0;
msg1.next=&msg2;
msg2.send_buf=RT_NULL;
msg2.recv_buf=id;
msg2.length=5;
msg2.cs_take=0;
msg2.cs_release=1;
msg2.next=RT_NULL;
rt_spi_transfer_message(spi_dev_w25q,&msg1);
rt_kprintf("spi ID is:%x%x\n",id[3],id[4]);
}
用的是STM32F1单片机,其中
PA4 ———> SPI1_NSS
PA5 ———> SPI1_SCK
PA6 ———> SPI1_MISO
PA7 ———> SPI1_MOSI
用过list device是可以看到SPI BUS spi 和SPI Device spi10的
调试发现传入查询命令0X9F后得到的ID是错的,并且用Keil的调试看不到GPIOA6,A7引脚的电平变化,CS有变化,不知道本来就是这样还是有问题,求大神们帮帮忙,救救孩子吧
这是msp里面的SPI的初始化,CubemaxSPI1使能是在这吗?不是在这我也不知道Cubemax能在哪里初始化了,大佬指点下
看起来配置没啥问题的
cs引脚可以看引脚高低电平的,clk和mosi miso看电平不行,要看spi寄存器
有条件最好拿示波器或者逻辑分析仪抓一下总线
@徐徐徐徐徐
@徐徐徐徐徐
PA5 6 7是AF,PA4是GPIO OUT模式才对啊