OpenEdv-开源电子网

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

fatfs,大家帮我来挑错谢谢

[复制链接]

15

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2013-2-5
在线时间
0 小时
发表于 2013-2-15 16:03:17 | 显示全部楼层 |阅读模式

最近在学习fatfs,小小的改变了一下论坛里的例程,本意是想通过DMA接受数据写入卡里再读出卡里的数据,现在的程序是能创建文件并且能读出文件里的内容,但是数据接收不了,不懂是什么原因,我写下我的程序:
1.这个是主函数及声明部分内容:
u16 i;
FATFS fs;
FRESULT res;
FILINFO fileInfo;
UINT br,bw;
UINT r=1;
DIR dir;
FIL fsrc;
char buffer[512];
char ReceiveBuffer[512];
char dir_path[25]={" "};
char file_path[25]={" "};
char file_path1[25]={" "};

void convert (char *a,u32 n);
FRESULT scan_files (char* path);
void Write_file(char *dir_path,char *file_path);
void Read_file(char *dir_path,char *file_path);
u8 Create_files (char *dir_path,char *file_path);
void USART_Receive_DMA(void);
int main(void){
 u8 t;
 
    Stm32_Clock_Init(9);//系统时钟设置
 delay_init(72);  //延时初始化
  LCD_Init();
 RTC_Init();
 KEY_Init();
 uart_init(72,9600);
 
 
 

 OINT_COLOR=RED;
 LCD_ShowString(17,30,"MINISTM32 FATFS Test!");                      
 while(1){
  t=KEY_Scan();
  res = f_mount(0, &fs);
  if(t){              
   switch(t){                                  
    case 1: Create_files(dir_path,file_path);
      scan_files(dir_path);
      break;
    case 2: USART_Receive_DMA();
      Write_file(dir_path,file_path);
      break;
    case 3: Read_file(dir_path,file_path);
      break;
   } 
  }
  f_mount(0,NULL);                                                        
 }
}
2.写:
//向文件内写数据
void Write_file(char *dir_path,char *file_path)
{
 res = f_opendir(&dir,(TCHAR*)dir_path);                          //打开文件目录
 res = f_open(&fsrc,(TCHAR *)file_path, FA_OPEN_ALWAYS | FA_WRITE); //打开文件
 f_lseek(&fsrc,fsrc.fsize);                                          //移动指针
 f_write(&fsrc,&ReceiveBuffer,sizeof(ReceiveBuffer),&bw);            //写数据
 f_close(&fsrc);
}
3.DMA:
//USART1用DMA方式接收数据
void USART_Receive_DMA(void)
{    

 MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)ReceiveBuffer,512);//DMA1通道4,外设为串口1,存储器为ReceiveBuffer,长度512.    
    USART1->CR3=1<<7;           //使能串口1的DMA接收      
 MYDMA_Enable(DMA1_Channel4);//开始一次DMA接收  
    //等待DMA接收完成,此时我们来做另外一些事,点灯
    //实际应用中,传输数据期间,可以执行另外的任务
    while(1){
  if(DMA1->ISR&(1<<13))
  {  
      //等待通道4传输完成
   DMA1->IFCR|=1<<13;//清除通道4传输完成标志
   break;
        }
  
    }      
 
}
问题出在Receivebuffer一直接收不了数据,当按下key1的时候,求高手挑错解答


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-2-15 19:13:00 | 显示全部楼层
是不是你的DMA配置有问题?
另外,串口数据接收我一向不用DMA,发送倒是可以用用.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-22 06:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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