OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9346|回复: 5

SD卡 串口实验 怪异现象

[复制链接]

27

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2012-7-17
在线时间
0 小时
发表于 2012-9-4 09:18:32 | 显示全部楼层 |阅读模式

我把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 




 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-9-4 11:12:12 | 显示全部楼层
你的SD卡还没挂么?放电脑看看SD卡能用不先。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

27

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2012-7-17
在线时间
0 小时
 楼主| 发表于 2012-9-5 09:15:33 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
还没用电脑看 现在手里没读卡器  只是重新下了一下您的SD实验代码
出现这样的 



回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-9-5 09:34:04 | 显示全部楼层
回复【3楼】Stevenqs:
---------------------------------
这个数据不正常。
可能你的卡要挂了。找个读卡器试试,或者用我们开发板自带的读卡器程序试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

27

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2012-7-17
在线时间
0 小时
 楼主| 发表于 2012-9-5 09:56:51 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
想问师兄  我自己写的代码关于写MBR扇区 是否正确 因为我发现只要给buf[sd_size]赋值  程序就会卡死 可能是您说的SD卡原因  同时也想确认 这种写MBR扇区的代码 是正确否?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-9-5 14:40:02 | 显示全部楼层
你这个已经不正确了,结束符肯定是0XAA55才对的,现在变成FFFFF了。已经是非法的 了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-20 22:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表