STM32F103 DMA问题
请问一个很奇怪的问题,我用的是STM32F103的板,在初始化DMA的,怎么弄都不能用,我调试的时候发现DMA的寄存器的怎么设置都是0,都没有设置成功这个是什么原因呢?有没有什么别的初始化没弄。大家帮帮忙,看一下。下面是代码DMA_InitTypeDef tDMAProperty;
NVIC_InitTypeDef tNVICProperty;
RCC_APB2PeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_Cmd(DMA1_Channel4, DISABLE);
/* 配置DMA通道 */
DMA_DeInit(DMA1_Channel4);
/* 初始化中断 */
memset(&tNVICProperty, 0x00, sizeof(NVIC_InitTypeDef));
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
tNVICProperty.NVIC_IRQChannel = 0;
tNVICProperty.NVIC_IRQChannelPreemptionPriority = 0;
tNVICProperty.NVIC_IRQChannelSubPriority = 1;
tNVICProperty.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&tNVICProperty);
memset(&tDMAProperty, 0x00, sizeof(DMA_InitTypeDef));
tDMAProperty.DMA_PeripheralBaseAddr = (INT32U)(&USART1->DR); // 外设地址
tDMAProperty.DMA_MemoryBaseAddr = (INT32U)gs_aucUsart1SndDMABuf; // 内存地址
tDMAProperty.DMA_DIR = DMA_DIR_PeripheralDST; // dma传输方向单向
tDMAProperty.DMA_BufferSize = USART_SEND_DMA_SIZE; // 设置DMA在传输时缓冲区的长度
tDMAProperty.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 设置DMA的外设递增模式,一个外设
tDMAProperty.DMA_MemoryInc = DMA_MemoryInc_Enable; // 设置DMA的内存递增模式
tDMAProperty.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; // 外设数据字长
tDMAProperty.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; // 内存数据字长
tDMAProperty.DMA_Mode = DMA_Mode_Circular; // 设置DMA的传输模式
tDMAProperty.DMA_Priority = DMA_Priority_High; // 设置DMA的优先级别
tDMAProperty.DMA_M2M = DMA_M2M_Disable; // DMA_M2M_Disable
DMA_Init(DMA1_Channel4, &tDMAProperty);
DMA_ITConfig(DMA1_Channel4, DMA_IT_TC, ENABLE);
DMA_ITConfig(DMA1_Channel4, DMA_IT_TE, ENABLE);
// DMA_Cmd(DMA1_Channel4, ENABLE);
// DMA_Cmd(DMA1_Channel4, DISABLE);
USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
RE:STM32F103 DMA问题
参考如下DMA配置代码:void DMA_Configuration()
{
DMA_InitTypeDefDMA_InitStructure;
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = 0x4001244C; //ADC1的DR地址
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADC_ConvertedValue; 不加&应该也可以 数组名 代表地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//外设向内存传数据
DMA_InitStructure.DMA_BufferSize = N; //DMA缓存大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //目标内存地址自动后移
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//DMA传送数据尺寸16位
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//常用循环缓存模式
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//禁止内存到内存模式
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
/* Enable DMA1 channel 1 */
DMA_Cmd(DMA1_Channel1, ENABLE);
}
RE:STM32F103 DMA问题
你的DMA应该用的是AHB时钟源吧??RCC_APB2PeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
应该是RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);:P
页:
[1]