Инициализация DMA
Код
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /* Enable DMA1 clock */
DMA_DeInit(DMA1_Channel7);
extern uint32_t tmp;
tmp=0x0080;
DMA_InitStructure.DMA_PeripheralBaseAddr =(uint32_t)&tmp;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)0x40011010; //запись в ячейку памяти по этому адресу
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 1;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;
DMA_Init(DMA1_Channel7, &DMA_InitStructure);
DMA_Cmd(DMA1_Channel7, ENABLE); /* Enable DMA1 channel7 */
Инициализация Таймера
Код
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);// включаем тактирование
TIM_Cmd(TIM2, DISABLE); // останавливаем таймер
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Prescaler = 0x01; /* TIM1CLK = 72 MHz/(1+1) */
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
// TIM_TimeBaseStructure.TIM_Period = _60mks; /* настраиваем на 60 мкс */
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
//настраиваем прерывания
TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE); // прерывание по первому каналу по сравнению
NVIC_InitTypeDef NVIC_InitStructure; /* Enable TIM2 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_SetAutoreload(TIM2,_500mks); //время импульса сброса
TIM_SetCompare2(TIM2,_500mks); //время импульса сброса
TIM_SetCounter(TIM2,0);
TIM_SelectCCDMA(TIM2, ENABLE); //вот здесь настраиваю DMA (привязываю таймер к каналу ДМА)
TIM_DMACmd(TIM2,TIM_DMA_CC2, ENABLE); //вот здесь настраиваю DMA
TIM_Cmd(TIM2, ENABLE);