最近在学习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的时候,求高手挑错解答
|