最近在学习fatfs,往SD卡里面创建了txt文档,写入数据并且用串口读出数据,但是出现了以下的奇怪现象:
上面是我创建的文档,我想把数据发送并写入到上面这个文档里但是写入的都是0,并且这个文档打开后里面没有东西,下面是我使用的程序:
1.//USART1用DMA方式接收数据
void USART_Receive_DMA(void)
{
u16 i=0;
i=sizeof(ReceiveBuffer);
if(i!=0){ //清空ReceiveBuffer
for(;i>0;i--)
ReceiveBuffer=0;
}
MYDMA_Config(DMA1_Channel5,(u32)&USART1->DR,(u32)ReceiveBuffer,512);//DMA1通道5,外设为串口1,存储器为ReceiveBuffer,长度512.
USART1->CR3=1<<6; //使能串口1的DMA接收
MYDMA_Enable(DMA1_Channel5);//开始一次DMA接收
//等待DMA接收完成,此时我们来做另外一些事,点灯
//实际应用中,传输数据期间,可以执行另外的任务
while(1){
if(DMA1->ISR&(1<<17))
{
//等待通道5传输完成
DMA1->IFCR|=1<<17;//清除通道5传输完成标志
break;
}
}
}
2.DMA的配置:
u16 DMA1_MEM_LEN;//保存DMA每次数据传送的长度
//DMA1的各通道配置
//这里的传输形式是固定的,这点要根据不同的情况来修改
//从存储器->外设模式/8位数据宽度/存储器增量模式
//DMA_CHx MA通道CHx
//cpar:外设地址
//cmar:存储器地址
//cndtr:数据传输量
void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
RCC->AHBENR|=1<<0;//开启DMA1时钟
__nop();
__nop();
__nop();
DMA_CHx->CPAR=(u32)cpar; //DMA1 外设地址
DMA_CHx->CMAR=(u32)cmar; //DMA1,存储器地址
DMA1_MEM_LEN=cndtr; //保存DMA传输数据量
DMA_CHx->CNDTR=cndtr; //DMA1,传输数据量
DMA_CHx->CCR=0X00000000;//复位
DMA_CHx->CCR|=1<<4; //从存储器读
DMA_CHx->CCR|=0<<5; //普通模式
DMA_CHx->CCR|=0<<6; //外设地址非增量模式
DMA_CHx->CCR|=1<<7; //存储器增量模式
DMA_CHx->CCR|=0<<8; //外设数据宽度为8位
DMA_CHx->CCR|=0<<10; //存储器数据宽度8位
DMA_CHx->CCR|=1<<12; //中等优先级
DMA_CHx->CCR|=0<<14; //非存储器到存储器模式
}
//开启一次DMA传输
void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
DMA_CHx->CCR&=~(1<<0); //关闭DMA传输
DMA_CHx->CNDTR=DMA1_MEM_LEN; //DMA1,传输数据量
DMA_CHx->CCR|=1<<0; //开启DMA传输
}
不大清楚上面的程序问题出在哪了……
|