新手上路
- 积分
- 30
- 金钱
- 30
- 注册时间
- 2016-12-15
- 在线时间
- 3 小时
|
发表于 2016-12-16 11:30:02
|
显示全部楼层
这是DMA配置代码,调试时发现,只要每次重新配置后,EN位才能变回1.。
void DMA_Config(USER_DMASTRUCTURE* MyDMA_Structure)
{
DMA_InitTypeDef DMA_InitStructure;
if (MyDMA_Structure->DMAy_Streamx < DMA2_Stream0)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); //DMA时钟使能
else
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
DMA_DeInit(MyDMA_Structure->DMAy_Streamx); //将DMA的通道寄存器重设为缺省值
while (DMA_GetCmdStatus(MyDMA_Structure->DMAy_Streamx) != DISABLE){}
DMA_InitStructure.DMA_Channel = MyDMA_Structure->DMAChannel; //通道设置
DMA_InitStructure.DMA_PeripheralBaseAddr= MyDMA_Structure->PerBaseAddr; //外设基地址
DMA_InitStructure.DMA_Memory0BaseAddr = MyDMA_Structure->MemBaseAddr; //存储器基地址
DMA_InitStructure.DMA_DIR = MyDMA_Structure->DIR; //数据传输方向
DMA_InitStructure.DMA_BufferSize = MyDMA_Structure->BufSize; //DMA缓存大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址寄存器不变
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址寄存器递增
DMA_InitStructure.DMA_PeripheralDataSize= DMA_PeripheralDataSize_Byte; //数据宽度为8位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //数据宽度为8位
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;//DMA_Mode_Normal; //工作在正常模式
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA数据流x拥有中优先级
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; //FIFO模式关闭
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
DMA_Init(MyDMA_Structure->DMAy_Streamx, &DMA_InitStructure); //初始化DMA配置
} |
|