Страница 1 из 12
Таймер не работает
Добавлено: Чт дек 05, 2019 16:31:49
TEPEM
На F427 работает. Сделал платку на f103c8t6, без внешних кварцов, все работает, а таймера нет, в обработчик прерывания не входит, как так, подскажите люди добрые
Код: Выделить всё
#include "stm32f1xx.h"
int main()
{
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // Разрешить тактирование PORTC
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //Разрешить тактирование TIM
GPIOC->CRH |= GPIO_CRH_MODE15; // Вывод светодиодана выход.
GPIOC->CRH &=~GPIO_CRH_CNF15; // Двухтактный выход
//GPIOC->ODR |= 32768;
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
TIM2->PSC = 80 - 1; // Настраиваем делитель что таймер тикал 1000 раз в секунду
TIM2->ARR = 1000 ; // Чтоб прерывание случалось раз в секунду
TIM2->DIER |= TIM_DIER_UIE; //разрешаем прерывание от таймера
TIM2->CR1 |= TIM_CR1_CEN; // Начать отсчёт!
NVIC_EnableIRQ(TIM2_IRQn); //Разрешение TIM2_IRQn прерывания
while (1)
{
}
}
void TIM2_IRQHandler(void)
{
TIM2->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
GPIOC->ODR |= 32768; // зажечь светодиод
}
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 17:59:16
Z_h_e
TEPEM писал(а): в обработчик прерывания не входит
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 18:17:13
TEPEM
Пробовал,без толку. Перед тем как сюда писать я всю ночь перебирал варианты.
Чтобы вы понимали, даже камень поменял на всякий
Не может же быть причина в отсутствии кварца, там же автоматом работает внутренний ген.
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 18:42:37
Z_h_e
TEPEM писал(а):Пробовал,без толку.
Потом убрали разрешение прерываний? Не стоит
В startup поройтесь, точно от внур. кварца?
Пошаговая отладка работает?
Может в HardFault висите?
Включите светодиод сразу при входе в майн.
Помигайте светодиодом в тупом цикле.
Как узнали что таймер не работает?
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 18:47:44
TEPEM
Начнем с того что я не много нуб.
Делаю в ИАР через китайский клон ст-линк,что там работает я не знаю если четно. До этого использовал отладочные платы.
Светодиод отдельно работает, мигал пустым циклом.
Остальное пойду гуглить
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 18:51:02
Z_h_e
Поставьте точку останова на входе в майн и в обработчике прерываний. Пошагайте и поглядите что в регистрах реально. Если в никакую точку останова не попадаете, нажмите паузу и поглядите где-находитесь.
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 19:00:57
TEPEM

Я пытаюсь разобраться с отлалчиком, но либо смотрю не туда либо нужное окно не открыто(
CNT содержит некое число, значит он инкриминируется? Чего тоды может быть люди добрые
Если два раз паузу и плей нажать - падает в хард фаулт(
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 19:43:40
Z_h_e
В документе PM0056Programming manual есть описание регистров по которым можно вычислить причину исключения. Но мне кажется не стоит так глубоко пока копать.
TEPEM писал(а):Светодиод отдельно работает, мигал пустым циклом.
У меня есть смутные сомнения что это работало, а запуск таймера привел к исключению. Сделайте опять этот проект. Пускай мигает, если будет.
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 19:51:22
TEPEM
Все работает, мигает
Код: Выделить всё
#include "stm32f1xx.h"
int i,j;
int main()
{
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // Разрешить тактирование PORTC
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //Разрешить тактирование TIM
GPIOC->CRH |= GPIO_CRH_MODE15; // Вывод светодиодана выход.
GPIOC->CRH &=~GPIO_CRH_CNF15; // Двухтактный выход
//GPIOC->ODR |= 32768;
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
TIM2->PSC = 80 - 1; // Настраиваем делитель что таймер тикал 1000 раз в секунду
TIM2->ARR = 1000 ; // Чтоб прерывание случалось раз в секунду
TIM2->DIER |= TIM_DIER_UIE; //разрешаем прерывание от таймера
TIM2->CR1 |= TIM_CR1_CEN; // Начать отсчёт!
__enable_irq ();
//NVIC_EnableIRQ(TIM2_IRQn); //Разрешение TIM2_IRQn прерывания
while (1)
{
for(j = 0 ; j < 100000; j++) __NOP();
if (i==0)
{
i=1;
GPIOC->ODR |= 32768;
}
else
{
i=0;
GPIOC->ODR &= ~32768;
}
}
}
/*void TIM2_IRQHandler(void)
{
GPIOC->ODR |= 32768;
TIM2->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
}*/
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 19:52:18
VladislavS
попробуй.
И это, startup то положил в проект? Судя по картинке - нет.
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 19:53:19
Z_h_e
del
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 19:54:47
BlackKilkennyCat
но это мигание не по таймеру
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 19:57:53
TEPEM
Мигает где то 0.75 сек, что такое стартап простите? Если вернуть строку с разрешением прерывания - не мигает, падает.
Вот эта строка - NVIC_EnableIRQ(TIM2_IRQn);
Даже без обработчика
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 20:00:08
Z_h_e
VladislavS писал(а):И это, startup то положил в проект?
Мне кажется что он положен, но по умолчанию на кварц настроен. Опять же вроде светодиод мигает...
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 20:01:38
TEPEM
[uquote="VladislavS",url="/forum/viewtopic.php?p=3749909#p3749909"]
попробуй.
И это, startup то положил в проект? Судя по картинке - нет.[/uquote]
Ошибки не вызвало но все равно падает
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 20:04:14
VladislavS
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3749921#p3749921"]Мне кажется что он положен,[/uquote]Положен говоришь? А картинку посмотреть? А это вот?
[uquote="TEPEM",url="/forum/viewtopic.php?p=3749919#p3749919"]что такое стартап простите?[/uquote]
TEPEM, добавь этот файл в проект.
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 20:08:38
TEPEM
Спасибо братцы! Будте так добры, подскажите бедному нубу, что это за стартап и почему в F4х все без него работает????
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 20:11:28
a797945
здесь как минимум :
|= 32768;
...
&= ~32768;
а в первом только " |= 32768;"
что такое "Двухтактный выход" пока не знаю.
на это камень в сети миллион инитов TIM на все вкусы, зачем тащить с другого семейства?
а если тащишь - каждую сточку сверяй с RM целевого камня
ПС
"TIM2->PSC = 80 - 1;" - 1мс ?
какая по твоему частота на APB1
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 20:14:46
TEPEM
а в первом только " |= 32768;"
Дык это еденичку в порт пишет, побитное сложение, а второй вычитание, типа стирает ее, нога светодиода. На f103 по другому как то делают?
Реально есть инициализация обходящая проблему с файлом этим? я вроде все перепробовал кроме тех где есть левые библиотеки
П.С.
Я уменьшил значения чтобы повысить шансы на вызов обработки, мало ли, через час бы вылезла, не считал
Re: Таймер не работает
Добавлено: Чт дек 05, 2019 20:15:09
Z_h_e
VladislavS писал(а):Положен говоришь? А картинку посмотреть?
Откуда диззасеблер знает такие метки как HardFault? Они разве не из стартапа?