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

 
 
> stm32F429 и прерывание от таймера
zorromen
сообщение Jul 22 2015, 17:49
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Здравствуйте, только начал осваивать проц, и столкнулся с непоняткой, уже 3 дня сижу и не могу понять.
Есть Выход
Код
   //Trigger
  /*Configure GPIO pin : PE3 */
  GPIO_InitStruct.Pin = GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

Есть таймер 6, его настройка.
Код
    __TIM6_CLK_ENABLE();
    UV_state = 0;
        HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 1, 0);
        HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
    
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
    TIM6->PSC = 143;
    TIM6->ARR = 62499; //100 mS
    //TIM6->EGR = TIM_EGR_UG;
    TIM6->DIER = TIM_DIER_UIE;
    TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE;

Это прерывание
CODE
void TIM6_DAC_IRQHandler(void)
{
TIM6->CR1 &= ~TIM_CR1_CEN; //Остнавливаем таймер
TIM6->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF

switch (UV_state)
{
case 0:
TIM6->PSC = 0;
TIM6->ARR = 0x707;//1799; //20 uS
TIM6->CNT = 0;
TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE;
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
UV_state = 1;
break;

case 1:
TIM6->PSC = 0x008f;//143
TIM6->ARR = 0xF423;//62499; //Ñðàáîòàòü íà 100 mS
TIM6->CNT = 0;
TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE;
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
UV_state = 0;
break;
}

}

Хочу иметь импульс 20 us через 100 ms, и вроде все логично, но на выходе все перевернуто
Прикрепленное изображение


Ну где тут можно ошибиться?
Заходим по состоянию 0, устанавливаем таймер на 20 us и устанавливаем ногу в 1, чтобы в следующем прерывании ее сбросить и настроить прерывание на 100 ms и потом ее установить в 1 в новом прерывании. Почему на выходе все наоборот?

Сообщение отредактировал IgorKossak - Jul 23 2015, 16:34
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zorromen   stm32F429 и прерывание от таймера   Jul 22 2015, 17:49
- - SSerge   Наводящий вопрос: за что отвечает бит TIM_CR1_ARPE...   Jul 22 2015, 18:15
- - Genadi Zawidowski   Предлагаю ещё посмотреть внимательно даташит на те...   Jul 22 2015, 18:40
- - Golikov A.   и если еще умничать, то это ШИМом делается, а не ч...   Jul 22 2015, 18:54
- - zorromen   Шим не подойдет, т.к. прерывание будет усложнятся ...   Jul 23 2015, 01:16
- - Golikov A.   какие флаги могут быть еще? Да какие угодно, прое...   Jul 23 2015, 05:33
- - zorromen   Можете помочь как нужно написать чтобы работало.   Jul 23 2015, 12:14
- - Golikov A.   ну либо поменяйте местами присвоения, либо присвоя...   Jul 23 2015, 12:28
- - zorromen   Но ведь PSC тоже с буфером, и он вроде не отключае...   Jul 23 2015, 13:15
- - Golikov A.   так для того буфер и сделан, чтобы вы успели все з...   Jul 23 2015, 13:39
- - SSerge   В процессе инициализации полезно "вручную...   Jul 23 2015, 14:29
- - zorromen   А если это делать в прерывании, не вызовет ли это ...   Jul 23 2015, 15:01
- - zorromen   Упорство победило, если хотят играть по своим прав...   Jul 23 2015, 18:41
|- - jcxz   Цитата(zorromen @ Jul 24 2015, 00:41) Оче...   Jul 24 2015, 02:38
- - Golikov A.   надеюсь вы понимаете принципиальную разницу в рабо...   Jul 24 2015, 04:22
- - zorromen   Ну принудительное обновления, я как раз и реализов...   Jul 24 2015, 07:15
- - Golikov A.   ЦитатаНу принудительное обновления, я как раз и ре...   Jul 24 2015, 08:35
- - zorromen   То будет не критично, вообще еще дурной вопрос. Ну...   Jul 24 2015, 10:15
- - Golikov A.   ЦитатаНужно будет ловить импульс ответа, и измерит...   Jul 24 2015, 10:23


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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 18:20
Рейтинг@Mail.ru


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