新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2021-5-9
- 在线时间
- 2 小时
|
1金钱

#include "sys.h"
#include "system_stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
uint8_t a[4096];
void SPI_init (void)
{
GPIO_InitTypeDef GPIO_CHUSHIHUA;
SPI_InitTypeDef SPI_CHUSHIHUA;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_CHUSHIHUA.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_CHUSHIHUA.GPIO_Pin=GPIO_Pin_13;
GPIO_CHUSHIHUA.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_CHUSHIHUA);
GPIO_CHUSHIHUA.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_CHUSHIHUA.GPIO_Pin=GPIO_Pin_14;
GPIO_Init(GPIOB,&GPIO_CHUSHIHUA);
GPIO_CHUSHIHUA.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_CHUSHIHUA.GPIO_Pin=GPIO_Pin_15;
GPIO_Init(GPIOB,&GPIO_CHUSHIHUA);
GPIO_CHUSHIHUA.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_CHUSHIHUA.GPIO_Pin=GPIO_Pin_12;
GPIO_Init(GPIOB,&GPIO_CHUSHIHUA);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
SPI_CHUSHIHUA.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_2;
SPI_CHUSHIHUA.SPI_CPHA=SPI_CPHA_1Edge;
SPI_CHUSHIHUA.SPI_CPOL=SPI_CPOL_Low;
SPI_CHUSHIHUA.SPI_CRCPolynomial=7;
SPI_CHUSHIHUA.SPI_DataSize=SPI_DataSize_8b;
SPI_CHUSHIHUA.SPI_FirstBit=SPI_FirstBit_MSB;
SPI_CHUSHIHUA.SPI_Mode=SPI_Mode_Master;
SPI_CHUSHIHUA.SPI_NSS=SPI_NSS_Soft;
SPI_CHUSHIHUA.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
SPI_Init(SPI2,&SPI_CHUSHIHUA);
SPI_Cmd(SPI2,ENABLE);
}
void write_enable()
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_I2S_SendData(SPI2,0X06);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
}
u8 zhuangtai()
{
u8 zhuang;
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_I2S_SendData(SPI2,0X05);
do
{
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_I2S_SendData(SPI2,0X00);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_RXNE);
zhuang=SPI_I2S_ReceiveData(SPI2);
zhuang=zhuang&0x01;
}
while(zhuang==1);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
return zhuang;
}
void erase_flash(u32 addr)
{
write_enable();
zhuangtai();
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_I2S_SendData(SPI2,0X20);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_I2S_SendData(SPI2,(addr>>16)&0xff);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_I2S_SendData(SPI2,(addr>>8)&0xff);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_I2S_SendData(SPI2,(addr)&0xff);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
zhuangtai();
}
void read_flash(uint32_t addr,uint8_t *buffer,uint32_t num)
{
int i=0;
erase_flash(addr);
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_I2S_SendData(SPI2,0x03);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_I2S_SendData(SPI2,(addr>>16)&0xff);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_I2S_SendData(SPI2,(addr>>8)&0xff);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_I2S_SendData(SPI2,(addr)&0xff);
while(i<num)
{
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_I2S_SendData(SPI2,0Xff);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_RXNE);
*buffer=SPI_I2S_ReceiveData(SPI2);
buffer++;
i++;
}
GPIO_SetBits(GPIOB,GPIO_Pin_12);
}
int main()
{
SystemInit();
delay_init();
uart_init(115200);
LED_Init();
SPI_init();
read_flash(0,a,4096);
while(1);
}
void USART1_IRQHandler(void) //′®¿ú1ÖD¶Ï·tÎñ3ìDò
{ int i;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //½óêÕÖD¶Ï(½óêÕμ½μÄêy¾Y±ØDëêÇ0x0d 0x0a½áÎ2)
{
LED0=!LED0;
for (i=0;i<4096;i++)
{
if(i%10==0)
printf("0x%x\n",a);
else
printf("0x%x",a);
}
}
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
|
|