Дмитрий_ 0 17 сентября, 2023 Опубликовано 17 сентября, 2023 (изменено) · Жалоба Написал код для таймера с прерыванием в IAR, но по какой-то причине не происходит прерывание и не запускается таймер. Данный код проверил в Keil, но с другим startup, всё работало исправно. Изменено 17 сентября, 2023 пользователем Дмитрий_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 17 сентября, 2023 Опубликовано 17 сентября, 2023 · Жалоба 24 минуты назад, Дмитрий_ сказал: Написал код для таймера с прерыванием в IAR, но по какой-то причине не происходит прерывание. Данный код проверил в Keil, но с другим startup, всё работало исправно. А почему решили что прерывание не работает? Может оно просто трёт стек не там где вы думаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Дмитрий_ 0 17 сентября, 2023 Опубликовано 17 сентября, 2023 (изменено) · Жалоба 44 минуты назад, jcxz сказал: А почему решили что прерывание не работает? Может оно просто трёт стек не там где вы думаете? Не переходит на метку timer_prer. Кроме того, забыл отметить, что таймер не запускается в принципе, т.е. нет никакого счёта. Изменено 17 сентября, 2023 пользователем Дмитрий_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 17 сентября, 2023 Опубликовано 17 сентября, 2023 · Жалоба Делаете в кубе пустой проект под IAR, запускаете и проверяете. Или например здесь смотрите https://github.com/STMicroelectronics/STM32CubeH7/tree/dd1b1d7144e6c61f995a368bbbeaad1936d60cd1/Projects/STM32H7B3I-EVAL/Examples/CRC/CRC_Example Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Дмитрий_ 0 17 сентября, 2023 Опубликовано 17 сентября, 2023 (изменено) · Жалоба 37 минут назад, x893 сказал: Делаете в кубе пустой проект под IAR, запускаете и проверяете. Или например здесь смотрите https://github.com/STMicroelectronics/STM32CubeH7/tree/dd1b1d7144e6c61f995a368bbbeaad1936d60cd1/Projects/STM32H7B3I-EVAL/Examples/CRC/CRC_Example Что вы имеете в виду под пустым проектом и что я должеy посмотреть на github? Не могли бы вы ответить более развёрнуто? Изменено 17 сентября, 2023 пользователем Дмитрий_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 17 сентября, 2023 Опубликовано 17 сентября, 2023 · Жалоба 1. Пустой проект int main() { HAL_Init(); /* Configure the system clock to 280 MHz */ SystemClock_Config(); /* Infinite loop */ while (1) { } } 2. C github скачать пример и запустить, убедиться, ччто systick работает и найти ошибки в своём коде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 86 17 сентября, 2023 Опубликовано 17 сентября, 2023 · Жалоба Топикстартер написал, что с другим сиартапом работает. Вообще, нежелательно изменять имена обработчиков прерываний, когда нет достаточного опыта. Так же, не изменяйте имена и содержание готовых функций, по тем же причинам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 17 сентября, 2023 Опубликовано 17 сентября, 2023 · Жалоба 13 minutes ago, EdgeAligned said: Топикстартер написал, что с другим сиартапом работает. Вообще, нежелательно изменять имена обработчиков прерываний, когда нет достаточного опыта. Так же, не изменяйте имена и содержание готовых функций, по тем же причинам. ТС надо сначала на кошках примерах от ST потренироваться, а потом уже делать и получать HardFault И про NVIC тоже помнить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 17 сентября, 2023 Опубликовано 17 сентября, 2023 · Жалоба А таймер то разрешен, тактовая на него подается ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 86 17 сентября, 2023 Опубликовано 17 сентября, 2023 (изменено) · Жалоба SysTick, на него всегда подается тактовая. Это таймер ядра Кортекс. И процесс его запуска идентичен для всех Кортексов. Я ж говорю - не нужно переписывать прилагающуюся функцию и не нужно изменять имена обработчиков прерываний, да и вообще переделывать стартап, не имея должного опыта. Мы раньше тренировались на простеньком STM32F100, а нынче берут сразу с размахом STM32H723 и удивляются, почему что-то не получается... Да, я знавал одного чела, начавшего изучение микроконтроллеров с STM32H750, причем на ассемблере! То есть так же, как и здесь. Не нужно такие мощные микроконтроллеры пытаться прогать на ассемблере. Это можно было делать со старыми PIC16F628 или ATTiny24. А здесь - не нужно. То, что написано в int_timer - это что-то непонятное, не имеющее отношения к делу. Возьмите готовую реализацию готовой функции: /** \brief System Tick Configuration \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. Counter is in free running mode to generate periodic interrupts. \param [in] ticks Number of ticks between two interrupts. \return 0 Function succeeded. \return 1 Function failed. \note When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b> must contain a vendor-specific implementation of this function. */ __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) { if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); /* Reload value impossible */ } SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0UL); /* Function successful */ } и всё, ничего выдумывать не надо, она одинакова для всех линеек Кортексов от и до. Изменено 17 сентября, 2023 пользователем EdgeAligned добавил код Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 90 17 сентября, 2023 Опубликовано 17 сентября, 2023 · Жалоба 6 часов назад, Дмитрий_ сказал: Что вы имеете в виду под пустым проектом и что я должеy посмотреть на github? Не могли бы вы ответить более развёрнуто? Самое надежное - взять любой работающий проект на си, в отладчике переключится на asm и пошагово пройти инициализацию контроллера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Дмитрий_ 0 20 сентября, 2023 Опубликовано 20 сентября, 2023 (изменено) · Жалоба В 17.09.2023 в 17:14, x893 сказал: 1. Пустой проект int main() { HAL_Init(); /* Configure the system clock to 280 MHz */ SystemClock_Config(); /* Infinite loop */ while (1) { } } 2. C github скачать пример и запустить, убедиться, ччто systick работает и найти ошибки в своём коде. Не подскажете, есть ли примеры с debugger-simulator, так как платы ещё нет, а если ставить debugger-simulator в проекты с ST-Link и прочими, то происходит зацикливание. Изменено 20 сентября, 2023 пользователем Дмитрий_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 20 сентября, 2023 Опубликовано 20 сентября, 2023 · Жалоба 50 минут назад, Дмитрий_ сказал: Не подскажете, есть ли примеры с debugger-simulator, Симулятор ИАРа не поддерживает никакую периферию. То есть ни одна программа, обращающаяся к периферии, не будет симулироваться правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 20 сентября, 2023 Опубликовано 20 сентября, 2023 · Жалоба 1 час назад, Дмитрий_ сказал: Не подскажете, есть ли примеры с debugger-simulator, так как платы ещё нет, а если ставить debugger-simulator в проекты с ST-Link и прочими, то происходит зацикливание. Если "платы ещё нет", то следует приобрести отладочную плату с желаемым МК. И тренироваться на ней. Симуляторы - это пустая трата времени. Как уже сказали выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 20 сентября, 2023 Опубликовано 20 сентября, 2023 · Жалоба 1 час назад, Сергей Борщ сказал: Симулятор ИАРа не поддерживает никакую периферию. То есть ни одна программа, обращающаяся к периферии, не будет симулироваться правильно. А регистры периферии CPU? Keil вот знает о существовании регистров включения сопроцессора FPU, и без соответствующей команды разрешения генерит HF в низкоуровневой точке входа __main. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться