- Вложения
-
- low_level_init.cpp
- (1.02 КБ) 172 скачивания
Таймер не работает
- Сообщения: 2564
- Зарегистрирован: Вт май 01, 2018 19:44:47
Добавь ещё этот файл в проект. В функцию __low_level_init() перетащи инициализацию железа. Она будет до main вызываться. Сейчас у тебя вместо неё заглушка подставлена, а так вызов с пользой будет происходить.
- Реклама
Не вычитание конечно. Загуглите "магические числа". Это важно, но проблема у Вас в чем то другом, скорее всего в стартапе.TEPEM писал(а):Дык это еденичку в порт пишет, побитное сложение, а второй вычитание,
- Сообщения: 2564
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3749933#p3749933"]
Откуда диззасеблер знает такие метки как HardFault? Они разве не из стартапа?[/uquote]IAR сам подставляет для Cortex-M начало таблицы. Однако, обрати внимание как быстро она заканчивается!VladislavS писал(а):Положен говоришь? А картинку посмотреть?
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3749937#p3749937"]
Да я в курсе про и и или и инверсию, но так проще писать.
Добавлено after 1 minute 59 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3749935#p3749935"]Добавь ещё этот файл в проект. В функцию __low_level_init() перетащи инициализацию железа. Она будет до main вызываться. Сейчас у тебя вместо неё заглушка подставлена, а так вызов с пользой будет происходить.[/uquote]
Заглушка?
Не вычитание конечно. Загуглите "магические числа". Это важно, но проблема у Вас в чем то другом, скорее всего в стартапе.[/uquote]TEPEM писал(а):Дык это еденичку в порт пишет, побитное сложение, а второй вычитание,
Да я в курсе про и и или и инверсию, но так проще писать.
Добавлено after 1 minute 59 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3749935#p3749935"]Добавь ещё этот файл в проект. В функцию __low_level_init() перетащи инициализацию железа. Она будет до main вызываться. Сейчас у тебя вместо неё заглушка подставлена, а так вызов с пользой будет происходить.[/uquote]
Заглушка?
[uquote="TEPEM",url="/forum/viewtopic.php?p=3749932#p3749932"]а второй вычитание, типа стирает ее, нога светодиода.[/uquote]
дык я не знаю как у тебя в первом стирает
дык я не знаю как у тебя в первом стирает
- Реклама
Некий код который выполнится до майна. Он же, например, настроит тактовый генератор и сформирует вектора прерываний. А там, в том числе, кроме вектора сброса, будет данные для инициализация указателя стека. Я не знаю что делает IAR без наличия стартапа и моожет вектор сброса будет указывать на майн, потому мигалка работаетTEPEM писал(а):что это за стартап
Последний раз редактировалось Z_h_e Чт дек 05, 2019 20:33:42, всего редактировалось 2 раза.
- Сообщения: 2564
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="TEPEM",url="/forum/viewtopic.php?p=3749939#p3749939"]Заглушка?[/uquote]Ты такую красивую картинку выложил, сам не подозревая этого. Только читать её надо уметь - там же видно всё 
Кстати, в стартап ещё вот такую строчку добавь где-нибудь в зоне действия extern "C".
Кстати, в стартап ещё вот такую строчку добавь где-нибудь в зоне действия extern "C".
Код: Выделить всё
void exit(){}void TIM2_IRQHandler(void) не работает что то(
extern "C" void TIM2_IRQHandler(void) только так и вызывается два раза сразу, т.е. пауза - вызов, вызов - пауза и т.д.
Добавлено after 2 minutes:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3749945#p3749945"][uquote="TEPEM",url="/forum/viewtopic.php?p=3749939#p3749939"]Заглушка?[/uquote]Ты такую красивую картинку выложил, сам не подозревая этого. Только читать её надо уметь - там же видно всё
Кстати, в стартап ещё вот такую строчку добавь где-нибудь в зоне действия extern "C".[/uquote]
Спасибо Вам большое!
extern "C" void TIM2_IRQHandler(void) только так и вызывается два раза сразу, т.е. пауза - вызов, вызов - пауза и т.д.
Добавлено after 2 minutes:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3749945#p3749945"][uquote="TEPEM",url="/forum/viewtopic.php?p=3749939#p3749939"]Заглушка?[/uquote]Ты такую красивую картинку выложил, сам не подозревая этого. Только читать её надо уметь - там же видно всё
Кстати, в стартап ещё вот такую строчку добавь где-нибудь в зоне действия extern "C".
Код: Выделить всё
void exit(){}Спасибо Вам большое!
Код: Выделить всё
extern "C" void TIM2_IRQHandler(void)
{
if (i<=2)
{
i++;
GPIOC->ODR |= 32768;
//for(j = 0 ; j < 100000; j++) __NOP();
}
else
{
i=0;
GPIOC->ODR &= ~32768;
}
TIM2->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
}///*/
- Сообщения: 2564
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3749944#p3749944"]Я не знаю что делает IAR без наличия стартапа[/uquote]Подлянку он кидает. Вместо того чтобы ругнуться, он подставляет минимальную таблицу с правильно заполненным адресом стека и переходом на штатную точку входа. Без прерываний оно даже и работать будет. Но таблица векторов заканчивается где-то в районе SysTick_Handler, на что ТС и попался. Уж лучше было бы материться, чем тихую подлянку делать.
Добавлено after 3 minutes 14 seconds:
[uquote="TEPEM",url="/forum/viewtopic.php?p=3749951#p3749951"]Так только мигает а то мили вспышки в темноте еле еле[/uquote]Ты прикалываешься?
И да, в прерывании сначала очищаешь флаг, а потом мигаешь диодом. Сделай это привычкой, ещё не раз пригодится.
Добавлено after 3 minutes 14 seconds:
[uquote="TEPEM",url="/forum/viewtopic.php?p=3749951#p3749951"]Так только мигает а то мили вспышки в темноте еле еле[/uquote]Ты прикалываешься?
Код: Выделить всё
if(GPIOC->ODR&(1<<15)) GPIOC->BSRR = 1<<(15+16); else GPIOC->BSRR = 1<<15;
[uquote="VladislavS",url="/forum/viewtopic.php?p=3749953#p3749953"][uquote="Z_h_e",url="/forum/viewtopic.php?p=3749944#p3749944"]Я не знаю что делает IAR без наличия стартапа[/uquote]Подлянку он кидает. Вместо того чтобы ругнуться, он подставляет минимальную таблицу с правильно заполненным адресом стека и переходом на штатную точку входа. Без прерываний оно даже и работать будет. Но таблица векторов заканчивается где-то в районе SysTick_Handler, на что ТС и попался. Уж лучше было бы материться, чем тихую подлянку делать.
Добавлено after 3 minutes 14 seconds:
[uquote="TEPEM",url="/forum/viewtopic.php?p=3749951#p3749951"]Так только мигает а то мили вспышки в темноте еле еле[/uquote]Ты прикалываешься?[/uquote]
Вот тот же эффект, между тиками около 2с, он загорается и тухнет мгновенно, потом уже пауза и по кругу. Только зажигая на два тика он горит столько же времени сколько и пауза
Добавлено after 2 minutes 5 seconds:
Я хочу сказать что прерывание вызывается так
-пауза 2с
-прерывание
-прерывание
-пауза 2с
-прерывание
-прерывание
Добавлено after 3 minutes 14 seconds:
[uquote="TEPEM",url="/forum/viewtopic.php?p=3749951#p3749951"]Так только мигает а то мили вспышки в темноте еле еле[/uquote]Ты прикалываешься?
Код: Выделить всё
if(GPIOC->ODR&(1<<15)) GPIOC->BSRR = 1<<(15+16); else GPIOC->BSRR = 1<<15;
Вот тот же эффект, между тиками около 2с, он загорается и тухнет мгновенно, потом уже пауза и по кругу. Только зажигая на два тика он горит столько же времени сколько и пауза
Добавлено after 2 minutes 5 seconds:
Я хочу сказать что прерывание вызывается так
-пауза 2с
-прерывание
-прерывание
-пауза 2с
-прерывание
-прерывание
- Сообщения: 2564
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="TEPEM",url="/forum/viewtopic.php?p=3749961#p3749961"]Вот тот же эффект[/uquote]Для начала очистку флага в начало обработчика прерывания перенеси. Скорее всего отпустит.
Ура! Теперь все работает, правда прерывание перенес и все наладилось. Спасибо большущее, очень выручили!!!
- Сообщения: 2564
- Зарегистрирован: Вт май 01, 2018 19:44:47
Флаг прерывания, кстати, не так очищается. Но это на самостоятельную проработку RM. Обрати внимание, что биты в SR имеют статус "rc_w0". Флаги можно проще чистить.
Очень серьезная ошибка, которая может будет возникать, а может нет и крайне трудно будет ее найти, когда что-то заглючит.TEPEM писал(а):TIM2->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
Вот так надо флаг сбрасывать.
Код: Выделить всё
TIM2->SR = ~TIM_SR_UIFЯ реально так как-то влетел. Самое интересное, на стадии изучения МК, нормально сбрасывал, потом перемкнуло.VladislavS писал(а):Флаг прерывания, кстати, не так очищается.
- Сообщения: 2564
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="TEPEM",url="/forum/viewtopic.php?p=3749967#p3749967"]правда прерывание перенес и все наладилось.[/uquote]Думаю, стоит пояснить что происходит. В микроконтроллере много разных шин, работающих на разных скоростях. Процессор дал команду на очистку бита в таймере и это потребует несколько тактов на реальную очистку. И если сразу же выйти из прерывания, то можно успеть схватить ещё не очищенный бит снова. Это если на пальцах.
- Сообщения: 2564
- Зарегистрирован: Вт май 01, 2018 19:44:47
[del]
Добавлено after 1 hour 12 minutes 14 seconds:
TEPEM, перекачай файл. Что-то я спросонья не то закинул.
Добавлено after 1 hour 12 minutes 14 seconds:
TEPEM, перекачай файл. Что-то я спросонья не то закинул.
- Вложения
-
- startup_iar_stm32f412zx.c
- (10.43 КБ) 171 скачивание
Проверил код этот на трех разных камнях, f103, f427, f412, моя строчка из интернета работает только на f427 - void TIM2_IRQHandler(void),
а ваша - extern "C" void TIM2_IRQHandler(void) везде, хотя первый вариант указан в подключаемых стандартных библиотеках, в чем шутка юмора?
Добавлено after 27 minutes 46 seconds:
Господа, я посоветоваться у Вас хотел. У меня тут платка с забавным дисплеем stm32f412g disco. Он 240х240, на st7789 подключен через параллельный 16 битный (кажется 8080 как я понимаю) в FSMC камня. Очень охота его запустить без всяких халов и прочей ереси кубовской. Но мои познания сишки скудны, из времен когда диал ап только появился, и мы качали инфу на книжных рынках, да и занимался я только openGL, а как вышла книга опенгл фор делфи - свалил с сишки, там как раз вышел визуал студио 7 на 6 дисках, не реальная цена на тот момент для меня была, а книги были по опен гл на с++ целиком на встроенных мастерах ВСнет. Ну да это лирика. И вот я думаю есть два пути, либо мучать примеры инициализации из сети, но я верно все их перебрал безрезультатно, даже по китайским блогам шастал. Либо стандартный пример из куба отчистить от ереси, я уже почти сделал это но застрял жестко. У меня пока с подвижки только в виде проекта с таймером, настроенными ногами на FSMC, и шим на подсветку. Что бы Вы посоветовали?
а ваша - extern "C" void TIM2_IRQHandler(void) везде, хотя первый вариант указан в подключаемых стандартных библиотеках, в чем шутка юмора?
Добавлено after 27 minutes 46 seconds:
Господа, я посоветоваться у Вас хотел. У меня тут платка с забавным дисплеем stm32f412g disco. Он 240х240, на st7789 подключен через параллельный 16 битный (кажется 8080 как я понимаю) в FSMC камня. Очень охота его запустить без всяких халов и прочей ереси кубовской. Но мои познания сишки скудны, из времен когда диал ап только появился, и мы качали инфу на книжных рынках, да и занимался я только openGL, а как вышла книга опенгл фор делфи - свалил с сишки, там как раз вышел визуал студио 7 на 6 дисках, не реальная цена на тот момент для меня была, а книги были по опен гл на с++ целиком на встроенных мастерах ВСнет. Ну да это лирика. И вот я думаю есть два пути, либо мучать примеры инициализации из сети, но я верно все их перебрал безрезультатно, даже по китайским блогам шастал. Либо стандартный пример из куба отчистить от ереси, я уже почти сделал это но застрял жестко. У меня пока с подвижки только в виде проекта с таймером, настроенными ногами на FSMC, и шим на подсветку. Что бы Вы посоветовали?



