реклама на сайте
подробности

 
 
> Вопрос по связке таймера и DMA (STM32F103), По сравнению таймера вызвать передачу изипамяти в память
AnV22
сообщение Sep 21 2011, 04:00
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 18-06-07
Из: Челябинск
Пользователь №: 28 529



Здравствуйте. Подскажите по такой проблеме в мк STM32F103.
Мне нужно, чтобы по сравнению таймера (использую канал 2 таймера 2) посредством DMA было передан 1 байт из памяти в память. С настройками DMA проблем нет - выбираю DMA1 канал 7 (он настроен на TIM2 Channel2), данные копируются из памяти в память. Вопрос - какие настройки таймера произвести.

Делаю так: в регистре TIM2_DIER выставляю CC2DE бит и в регистре TIMx_CR2 выставляю CCDS бит. Однако по сравнению таймера 2 канала 2 не происходит запрос DMA. Подскажите, что делаю не так?


--------------------
- Своя программа жизни -
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
topkin
сообщение Sep 21 2011, 05:14
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476



Код в студию. Вы тактирование DMA разрешили перед его инициализацией? Да и вообще все что угодно может быть

Сообщение отредактировал IgorKossak - Sep 21 2011, 06:51
Go to the top of the page
 
+Quote Post
AnV22
сообщение Sep 21 2011, 05:27
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 18-06-07
Из: Челябинск
Пользователь №: 28 529



Инициализация 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);


--------------------
- Своя программа жизни -
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01346 секунд с 7
ELECTRONIX ©2004-2016