Перейти к содержанию
    

SysTick (системный таймер) и IAR

Написал код для таймера с прерыванием в IAR, но по какой-то причине не происходит прерывание и не запускается таймер. Данный код проверил в Keil, но с другим startup, всё работало исправно.

 

image.png

image.png

image.png

Изменено пользователем Дмитрий_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 минуты назад, Дмитрий_ сказал:

Написал код для таймера с прерыванием в IAR, но по какой-то причине не происходит прерывание. Данный код проверил в Keil, но с другим startup, всё работало исправно.

А почему решили что прерывание не работает? Может оно просто трёт стек не там где вы думаете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

44 минуты назад, jcxz сказал:

А почему решили что прерывание не работает? Может оно просто трёт стек не там где вы думаете?

Не переходит на метку timer_prer. Кроме того, забыл отметить, что таймер не запускается в принципе, т.е. нет никакого счёта.

Изменено пользователем Дмитрий_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делаете в кубе пустой проект под IAR, запускаете и проверяете.

Или например здесь смотрите

https://github.com/STMicroelectronics/STM32CubeH7/tree/dd1b1d7144e6c61f995a368bbbeaad1936d60cd1/Projects/STM32H7B3I-EVAL/Examples/CRC/CRC_Example

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

37 минут назад, x893 сказал:

Делаете в кубе пустой проект под IAR, запускаете и проверяете.

Или например здесь смотрите

https://github.com/STMicroelectronics/STM32CubeH7/tree/dd1b1d7144e6c61f995a368bbbeaad1936d60cd1/Projects/STM32H7B3I-EVAL/Examples/CRC/CRC_Example

Что вы имеете в виду под пустым проектом и что я должеy посмотреть на github? Не могли бы вы ответить более развёрнуто?

Изменено пользователем Дмитрий_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Пустой проект
int main()
{

  HAL_Init();

  /* Configure the system clock to 280 MHz */
  SystemClock_Config();

  /* Infinite loop */
  while (1)
  {
  }
}

2. C github скачать пример и запустить, убедиться, ччто systick работает и найти ошибки в своём коде.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Топикстартер написал, что с другим сиартапом работает. 

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

 

Так же, не изменяйте имена и содержание готовых функций, по тем же причинам. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 minutes ago, EdgeAligned said:

Топикстартер написал, что с другим сиартапом работает. 

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

 

Так же, не изменяйте имена и содержание готовых функций, по тем же причинам. 

ТС надо сначала на кошках примерах от ST потренироваться, а потом уже делать и получать HardFault
И про NVIC тоже помнить.

image.png.323c7ea2274819033824964700432af1.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 */
}

и всё, ничего выдумывать не надо, она одинакова для всех линеек Кортексов от и до.

Изменено пользователем EdgeAligned
добавил код

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Дмитрий_ сказал:

Что вы имеете в виду под пустым проектом и что я должеy посмотреть на github? Не могли бы вы ответить более развёрнуто?

Самое надежное - взять любой работающий проект на си, в отладчике переключится на asm и пошагово пройти инициализацию контроллера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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 и прочими, то происходит зацикливание. 

Изменено пользователем Дмитрий_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

50 минут назад, Дмитрий_ сказал:

Не подскажете, есть ли примеры с debugger-simulator,

Симулятор ИАРа не поддерживает никакую периферию. То есть ни одна программа, обращающаяся к периферии, не будет симулироваться правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Дмитрий_ сказал:

Не подскажете, есть ли примеры с debugger-simulator, так как платы ещё нет, а если ставить debugger-simulator в проекты с ST-Link и прочими, то происходит зацикливание.

Если "платы ещё нет", то следует приобрести отладочную плату с желаемым МК. И тренироваться на ней. Симуляторы - это пустая трата времени. Как уже сказали выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Сергей Борщ сказал:

Симулятор ИАРа не поддерживает никакую периферию. То есть ни одна программа, обращающаяся к периферии, не будет симулироваться правильно.

А регистры периферии CPU?:smile:

Keil вот знает о существовании регистров включения сопроцессора FPU, и без соответствующей команды разрешения генерит HF в низкоуровневой точке входа __main.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...