Изучаем STM32 Cortex M3
05.01.2015, 01:28
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
За такой обработчик прерывания нужно бить долго и жестоко.
|
|
|
|
05.01.2015, 01:33
|
|
|
Гражданин KAZUS.RUN
Регистрация: 03.07.2010
Сообщений: 842
Сказал спасибо: 156
Сказали Спасибо 377 раз(а) в 189 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
в том то и дело, что перековырял кучу ссылок и тоже самое, пробовал и через stm библиотеку и без.
|
|
|
|
05.01.2015, 01:36
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Говнокод никогда работать не будет. Убирайте задержки из обработчика. Лучше вообще убирайте все. Проверка флагов делается в main loop. И вообще прерывание таймера не нужно. Проверяйте значение таймера в main.
|
|
|
|
05.01.2015, 01:44
|
|
|
Гражданин KAZUS.RUN
Регистрация: 03.07.2010
Сообщений: 842
Сказал спасибо: 156
Сказали Спасибо 377 раз(а) в 189 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
ясен пень зачем прерывания таймеру, лишнее это. Таким макаром отсчёт могу и в цикле сделать, но мне нужен независимый отсчёт от main, поэтому таймер, поэтому прерывание по сравнению.
Хорошо, делаем так
|
Код:
|
//------------------------------------------
void Timer2_init(void)
{
/* TIM2 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 20000;
TIM_TimeBaseStructure.TIM_Prescaler = 36000;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
/* TIM2 enable counter */
TIM_Cmd(TIM2, ENABLE);
/* Enable the TIM2 global Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
//---------------------------------------------- |
|
Код:
|
//====================Таймер задержки индикации дуги==================
void TIM2_IRQHandler(void)
{
TIM2-›SR &= ~TIM_SR_UIF; //очистка флага прерывания
} |
получаем тоже самое, счётчик таймера считает как зверь
Последний раз редактировалось С.М.С; 05.01.2015 в 01:51.
|
|
|
|
05.01.2015, 02:02
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Может флаг не сбрасывается?
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
|
|
|
|
05.01.2015, 02:21
|
|
|
Гражданин KAZUS.RUN
Регистрация: 03.07.2010
Сообщений: 842
Сказал спасибо: 156
Сказали Спасибо 377 раз(а) в 189 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
следующее прерывание то происходит и в срок, при достижении счётчиком сравниваемого числа. Только вот слишком быстро счётчик считает, предделитель как будто не делит
для надёжности продублировал без библиотеки, результат тот же
|
Код:
|
//====================Таймер задержки индикации дуги==================
void TIM2_IRQHandler(void)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
TIM2-›SR &= ~TIM_SR_UIF; //очистка флага прерывания
} |
|
|
|
|
05.01.2015, 03:08
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Странно, у меня почему-то работает.
Инит:
|
PHP код:
|
void Timer2_init(void) {
RCC-›APB1ENR |= RCC_APB1ENR_TIM2EN; //Тактирование Timer2
TIM2-›PSC = 23999; //Настройка предделителя таймера
TIM2-›ARR = 300; //Загружаем число миллисекунд в регистр автоперезагрузки
TIM2-›DIER |= TIM_DIER_UIE; //Разрешаем прерывание при переполнении счетчика
TIM2-›CR1 |= TIM_CR1_CEN; //Запускаем счет
NVIC_SetPriority(TIM2_IRQn,1);
NVIC_EnableIRQ (TIM2_IRQn);
}
|
Прерывание:
|
PHP код:
|
void TIM2_IRQHandler(void) //Функция обработчика прерывания от таймера 6
{
TIM2-›SR &= ~TIM_SR_UIF; //очистка флага прерывания
GPIOA-›ODR^=GPIO_ODR_ODR0; //Инверсия выхода
}
|
Камушек F103, тактовая 72МГц, поэтому период инверсии выхода втрое меньше, чем указано.
https://yadi.sk/i/jUXdrCjidnbZU
Сдвиг экрана через SisTick, светодиод в прерывании TMR2.
Последний раз редактировалось omercury; 05.01.2015 в 03:15.
|
|
|
|
05.01.2015, 05:04
|
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
|
За такой обработчик прерывания нужно бить долго и жестоко.
|
Чушь! Типичный результат дефлорации мозга от долгого просиживания на ПЫХ-Отмэль с их недоразвитыми прерываниями. Ничего криминального в этом обработчике нет, там сплошные условия. Если там есть задержки, то да, плохо, но это ещё не факт. Если есть несколько прерываний, юзать приоритеты и программа сравнительно простая, то в майне может быть только настройка периферии и прерываний. Время перехода/возврата из прерывания в прерывание почти в 3 раза меньше входа/выхода в прерывание из майн. Т.е. всё по задаче, с чётким пониманием сути происходящего.
|
|
|
|
05.01.2015, 05:09
|
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
|
Цитата:
|
|
Только вот слишком быстро счётчик считает, предделитель как будто не делит
|
Здесь "ромашка" неуместна. Поставьте бряк в прерывании, гляньте реальные настройки. Заюзайте пару тест-пинов, с выводом на ЛА или осциллограф. Работайте с реальными цифрами и результатом, а не с догадками.
|
|
|
|
Сказали "Спасибо" STM32F0
|
|
|
06.01.2015, 01:22
|
|
|
Гражданин KAZUS.RUN
Регистрация: 03.07.2010
Сообщений: 842
Сказал спасибо: 156
Сказали Спасибо 377 раз(а) в 189 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от STM32F0
|
|
Здесь "ромашка" неуместна. Поставьте бряк в прерывании, гляньте реальные настройки. Заюзайте пару тест-пинов, с выводом на ЛА или осциллограф. Работайте с реальными цифрами и результатом, а не с догадками.
|
Вон оно что, теперь понятно, БЛАГОДАРЮ!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:01.
|
|