我把SD卡试验中的主函数代码做了部分更改后,发现了奇怪的现象
u8 buf[512];//SD卡数据缓存区
int main(void)
{
u32 sd_size;
u8 flag=0;
u8 t;
u8 len;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LCD_Init(); //初始化液晶
LED_Init(); //LED初始化
  OINT_COLOR=RED;//设置字体为红色
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,70,"SD Card TEST");
LCD_ShowString(60,90,"ATOM@ALIENTEK");
LCD_ShowString(60,110,"2011/1/1");
while(SD_Initialize()!=0)//检测不到SD卡
{
LCD_ShowString(60,130,"SD Card Failed!");
delay_ms(500);
LCD_ShowString(60,130,"Please Check! ");
delay_ms(500);
LED0=!LED0;//DS0闪烁
}
//检测SD卡成功
LCD_ShowString(60,130,"SD Card Checked OK ");
LCD_ShowString(60,150,"SD Card Size: Mb");
sd_size=SD_GetSectorCount();//得到扇区数
LCD_ShowNum(164,150,sd_size>>11,5,16);//显示SD卡容量
while(1)
{
if(SD_WriteDisk(buf,0,1)==0)//写MBR扇区
{
if(USART_RX_STA&0x80)
{
len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
for(t=0;t<len;t++)
{
buf[sd_size]=USART_RX_BUF[t];
sd_size++;
}
USART_RX_STA=0;
flag=1;
}
}
while(flag)
{
if(SD_ReadDisk(buf,0,1)==0)//读取MBR扇区
{
LCD_ShowString(60,170,"USART1 Sending Data...");
printf("SECTOR 0 DATA:\n");
for(sd_size=0;sd_size<len;sd_size++)
{
USART1->DR=buf[sd_size];
while((USART1->SR&0X40)==0);//等待发送结束
}
printf("\nDATA ENDED\n");
LCD_ShowString(60,170,"USART1 Send Data Over!");
flag=0;
}
}
delay_ms(200);
}
我下载程序后,打开串口助手,很奇怪,写了123进去,读出来的却是这样的,如图1。
随后我屏蔽了while(flag)的语句,让代码只写SD卡 ,不发。但是怪现象出现了,竟然还是在发,且和未屏蔽时候一样,我下载其他实验的代码就正常,不知道这个SD卡代码出现这种现象是什么问题。求解释!如图2
图1
图2
|