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

 
 
> 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
 
Start new topic
Ответов
Golikov A.
сообщение Jul 24 2015, 10:23
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Нужно будет ловить импульс ответа, и измерить его длину, тут особых проблем не обнаружил, но реализация несколько смущает.

иногда таймеры сами умеют это делать, запускаются по переднему фронту, капчат по заднему, дергуют вас только чтобы сказать ответ, но как вы сделали тоже можно...

почему порт возвращал всегда ноль не понятно, наверное не настроено что-то было

Цитата
То будет не критично,

не факт что будет съезжать, зависит от того как реализовано обновлением, докручиванием счетчика таймера до конца, или просто обновлением без изменения счетчика...
в "штатном" или "все наоборот" режиме точно не будет съезжать как бы ни было реализовано... и джитер входа в прерывание не будет влиять, а тут хз...
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


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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 08:05
Рейтинг@Mail.ru


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