
#include "stm32f10x.h" #include "my_usart.h" #define SPI_CS_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_4)//CS #define SPI_CS_Set() GPIO_SetBits(GPIOA,GPIO_Pin_4) #define SPI_SCLK_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_5)//SCL #define SPI_SCLK_Set() GPIO_SetBits(GPIOA,GPIO_Pin_5) #define SPI_Read() GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6)//MISO #define SPI_SDOUT_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_7)//MOSI #define SPI_SDOUT_Set() GPIO_SetBits(GPIOA,GPIO_Pin_7) void delay(u8 i) { while(i > 0) { i--; } } /* PA4 片选 PA5 SCLK PA6 MISO PA7 MOSI */ //引脚初始化 void MY_SPI_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOD1,5,15 // GPIO_SetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOD1,5,15 } //读写 u8 MY_SPI_WR_OneByte(u8 byte) { u8 i, temp = 0; for(i = 0; i < 8; i++) { SPI_SCLK_Clr(); if(byte & 0x80) SPI_SDOUT_Set(); else SPI_SDOUT_Clr(); byte <<= 1; SPI_SCLK_Set();//拉高时钟线(上升沿传输) temp <<= 1; if(SPI_Read()) temp++; SPI_SCLK_Clr(); //下降沿读取数据 } return temp; } int main(void) { MY_SPI_Init(); YJM_Usart_Init(USART1, 115200, 0, 0); SPI_CS_Clr(); //拉低片选(使能芯片) printf("flashid = %x %x %x %x ", MY_SPI_WR_OneByte(0x9f), MY_SPI_WR_OneByte(0xff), MY_SPI_WR_OneByte(0xff), MY_SPI_WR_OneByte(0xff)); SPI_CS_Set(); while(1); } SPI芯片是W25Q16 串口打印出来的数据如下: [15:33:45.176]收←◆flashid = 0 0 0 0 [15:33:45.837]收←◆flashid = 9f ff ff ff [15:33:46.196]收←◆flashid = 9f ff ff ff [15:33:46.586]收←◆flashid = ff ff ff ff [15:33:46.906]收←◆flashid = df ff ff ff [15:33:47.286]收←◆flashid = 9f ff ff ff [15:33:47.796]收←◆flashid = ff ff ff ff [15:33:48.236]收←◆flashid = ff ff ff ff [15:33:48.586]收←◆flashid = ff ff ff ff [15:33:48.891]收←◆flashid = 9f ff ff ff [15:33:49.186]收←◆flashid = 9f ff ff ff [15:33:49.506]收←◆flashid = ff ff ff ff [15:33:50.036]收←◆flashid = ff ff ff ff [15:33:50.316]收←◆flashid = ff ff ff ff [15:33:50.566]收←◆flashid = ff ff ff ff [15:33:50.816]收←◆flashid = 9f ff ff ff [15:33:51.386]收←◆flashid = ff ff ff ff [15:33:51.666]收←◆flashid = 9f ff ff ff [15:33:51.946]收←◆flashid = df ff ff ff 请问要怎么修改程序才能正确读出FLASH_ID |
程序卡死在vPortFree函数中
STM8AF6213 LIN通讯问题
STM32H7B0 CAN发送异常
STM32H750如何搭配88E6320來使用?
硬件的spi单线传输怎么读写寄存器。
STM8AF6266 LIN通讯实例
STM32L4R9最大支持SD卡的容量是?支持SDXC 64G卡吗?
有使用过芯讯通的A7680C这个4G模块吗?
ST60系列可以使用OFDM调制进行发射接收吗?
STM32F103的LIN Break问题
{
uint16 Temp = 0;
SPI1_CS.ClrVal();
SPI1_ReadWriteByte(0x9F);//发送读取ID命令
SPI1_ReadWriteByte(0x00);
// SPI1_ReadWriteByte(0x00);
// SPI1_ReadWriteByte(0x00);
Temp|=SPI1_ReadWriteByte(0xFF)<<8;
Temp|=SPI1_ReadWriteByte(0xFF);
SPI1_CS.SetVal();
return Temp;
}
按照这个格式读