新手入门
- 积分
- 15
- 金钱
- 15
- 注册时间
- 2019-8-7
- 在线时间
- 3 小时
|
1金钱
我是用串口1,通过串口1输入数据,按下按键wk-up,写入W25Q,按下K0,读出写入的数据,并在串口1显示出来。但是当输入的字数太多时,读出来的数据就会乱码或者只显示一部分。主函数如下:(事先已经定义了串口最大接收字节数为1024),FLASH和串口的初始化都是直接参照正点原子的例程的,按理应该不会出错。一直找不到原因。
int main(void)
{
u8 t;
u8 len;
u16 times=0;
u8 key;
u16 i=0;
u8 datatemp[1024];
u32 FLASH_SIZE;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
uart_init(9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //按键初始化
SPI_Flash_Init(); //SPI FLASH 初始化
printf("\r\nWK_UP:Write KEY0:Read\r\n");
while(SPI_Flash_ReadID()!=W25Q64) //检测不到W25Q64
{
delay_ms(500);
LED0=!LED0;//DS0闪烁
}
FLASH_SIZE=8*1024*1024; //FLASH 大小为8M字节
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
printf("\r\n串口接收完成!\r\n");
printf("\r\n\r\n");//插入换行
USART_RX_STA=0;
}else
{
times++;
if(times%30==0)LED1=!LED1;//闪烁LED,提示系统正在运行.
delay_ms(10);
}
key=KEY_Scan(0);
if(key==WKUP_PRES) //WK_UP 按下,写入W25Q64
{
printf("\r\nWK_UP:Write KEY0:Read\r\n");
SPI_Flash_Write((u8*)USART_RX_BUF,FLASH_SIZE-5000,len); //从倒数第5000个地址处开始,写入SIZE长度的数据
printf("\r\nW25Q64 Write Finished!\r\n");
}
if(key==KEY0_PRES) //KEY0 按下,读取字符串并显示
{
SPI_Flash_Read(datatemp,FLASH_SIZE-5000,len); //从倒数第5000个地址处开始,读出SIZE个字节
printf("\r\nThe Data Readed Is:\r\n");
for(t=0;t<len;t++)
{
USART1->DR=datatemp[t];
while((USART1->SR&0X40)==0);//等待发送结束
}
printf("\r\n\r\n");//插入换行
}
i++;
delay_ms(10);
if(i==20)
{
LED0=!LED0;//提示系统正在运行
i=0;
}
}
}
|
|