代码问题如下:
主要目的是串口随便发个数当做功能开关。
等接受到之后,QSPI将字符串TEXT_BUFFER[]写入FLASH中,然后读取出来打印,并且再通过串口发送一遍。
代码只改动了main函数的部分,如下所示,串口截图在后面,不知道是什么问题,请教一下。
//要写入到W25Q16的字符串数组
const u8 TEXT_Buffer[]={"Apollo STM32H7 QSPI TEST"};
#define SIZE sizeof(TEXT_Buffer)
int main(void)
{
u8 key;
u8 i=0;
u8 datatemp[SIZE];
u32 flash_size;
Cache_Enable(); //打开L1-Cache
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(160,5,2,4); //设置时钟,400Mhz
delay_init(400); //延时初始化
uart_init(115200); //串口初始化
//usmart_dev.init(200); //初始化USMART
LED_Init(); //初始化LED
KEY_Init(); //初始化按键
SDRAM_Init(); //初始化SDRAM
LCD_Init(); //初始化LCD
W25QXX_Init(); //初始化W25QXX
POINT_COLOR=RED;
//LCD_ShowString(30,50,200,16,16,"Apollo STM32H7");
//LCD_ShowString(30,70,200,16,16,"QSPI TEST");
//LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
//LCD_ShowString(30,110,200,16,16,"2016/7/12");
//LCD_ShowString(30,130,200,16,16,"KEY1:Write KEY0:Read"); //显示提示信息
while(W25QXX_ReadID()!=W25Q256) //检测不到W25Q256
{
LCD_ShowString(30,150,200,16,16,"QSPI Check Failed!");
delay_ms(500);
LCD_ShowString(30,150,200,16,16,"Please Check! ");
delay_ms(500);
LED0_Toggle; //DS0闪烁
}
//LCD_ShowString(30,150,200,16,16,"QSPI Ready!");
flash_size=32*1024*1024; //FLASH 大小为32M字节
POINT_COLOR=BLUE; //设置字体为蓝色
while(1)
{
//key=KEY_Scan(0);
if(USART_RX_STA&0x8000)//KEY1按下,写入W25Q128
{
//LCD_Fill(0,170,239,319,WHITE);//清除半屏
//LCD_ShowString(30,170,200,16,16,"Start Write QSPI....");
W25QXX_Write((u8*)TEXT_Buffer,flash_size-100,SIZE); //从倒数第100个地址处开始,写入SIZE长度的数据
//LCD_ShowString(30,170,200,16,16,"QSPI Write Finished!"); //提示传送完成
delay_ms(500);
//LCD_ShowString(30,170,200,16,16,"Start Read QSPI.... ");
W25QXX_Read(datatemp,flash_size-100,SIZE); //从倒数第100个地址处开始,读出SIZE个字节
for(i=0;i<SIZE;i++) printf(" %x ",datatemp);
HAL_UART_Transmit(&UART1_Handler,(u8 *)datatemp,SIZE,1000); //发送接收到的数据
while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET);
USART_RX_STA=0;
//LCD_ShowString(30,170,200,16,16,"The Data Readed Is: "); //提示传送完成
//LCD_ShowString(30,190,200,16,16,datatemp); //显示读到的字符串
}
}
}
|