以下为dma的配置
hdma_tim1_up.Instance = DMA1_Stream0;
hdma_tim1_up.Init.Request = DMA_REQUEST_TIM1_UP;
hdma_tim1_up.Init.Direction = DMA_MEMORY_TO_MEMORY;
hdma_tim1_up.Init.PeriphInc = DMA_PINC_ENABLE;
hdma_tim1_up.Init.MemInc = DMA_MINC_ENABLE;
hdma_tim1_up.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_tim1_up.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_tim1_up.Init.Mode = DMA_CIRCULAR;
hdma_tim1_up.Init.Priority = DMA_PRIORITY_VERY_HIGH;
hdma_tim1_up.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
定义一个中断服务函数
void TIM1_UP_IRQHandler(void)
{
t1cnt++;
for(uint16_t i=0;i<500;i++)
dmasrc[i] ++;//对dma源地址不断写入数据以方便观察
HAL_TIM_IRQHandler(&htim1);
}
使能中断和dma
HAL_NVIC_EnableIRQ(TIM1_UP_IRQn);
HAL_DMA_Start (&hdma_tim1_up,(uint32_t)&dmasrc[0],(uint32_t)&dmastd[0],500);
HAL_TIM_Base_Start_IT(&htim1);
编译后进调试可以观察到每一秒源地址每一秒左右刷新数据并向目的地址传输