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

STM32 CubeIDE Как обращаться нагенерированным кодом

7 часов назад, EdgeAligned сказал:

За 10 лет сию брошюру прочтёте? Или тоже скажете, типа нафик жизнь тратить. 

Думаете, Raspberry сделал один человек? А ведь кто-то к ней написал и HAL, и кто-то адаптировал образ Линукса под неё. Иль наверно думаете, что это появилось само по себе, родилось уже готовым? Наивные... 

А давайте мы насчет вас тоже пофантазируем?

 

Вы наверное уверены, что земля плоская? А нет, представляете, она сплюснутый шар.

Вы наверное думаете, что она на слонах стоит? А нет, там все сложнее!

 

 

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


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

On 2/26/2024 at 4:05 PM, Quasar said:

Зато они змейку на собственноручно собранном спектруме запускали!!! Эти ваши Кубы тогда еще не родились!

"Змейку" запускали и на "Микро-80", из ж.Радио, за годы до РК86 и Спектрума.

И это была в основном именно "железячники", но ведь кто-то из них ее написал...

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


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

У меня вопрос по генератору кода в cube ide: инициализирую например usart1 код генерируется для инициализации usart1, но код для инициализация портов не генерируется хотя во вкладке pinout видно что данные порты задействованы для usart1.  В чем может быть дело?

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


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

On 1/10/2025 at 9:12 PM, sidy said:

У меня вопрос по генератору кода в cube ide: инициализирую например usart1 код генерируется для инициализации usart1, но код для инициализация портов не генерируется хотя во вкладке pinout видно что данные порты задействованы для usart1.  В чем может быть дело?

Всё прекрасно генерится.

image.thumb.png.5b7a6420038a602d784dbb2d93a34515.png

image.thumb.png.73e03ce299b973887c131fa8cb7d44b8.png

image.thumb.png.450dfe7150d454b30c3e3f3e1e4d3ed0.png

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


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

15 hours ago, x893 said:

Всё прекрасно генерится.

Не совсем понятно где вызывается функция HAL_UART_MspInit?

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


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

2 часа назад, sidy сказал:

Не совсем понятно где вызывается функция HAL_UART_MspInit?

Советую вначале пройти отладчиком по коду пошагово и всё найдется

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


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

7 hours ago, sidy said:

Не совсем понятно где вызывается функция HAL_UART_MspInit?

Как всегда из HAL_UART_Init.
Нажать CTRL+H ввести HAL_UART_MspInit и посмотреть.

Но есть способ лучше ! См. пост выше

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


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

Может, в этой теме быстрее получу ответ на свой вопрос из другой темы: 

Чего не хватает прерываниям таймера?! 

 

 

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


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

5 minutes ago, ARV said:

Может, в этой теме быстрее получу ответ на свой вопрос из другой темы: 

Чего не хватает прерываниям таймера?! 

 

 

Разрешить прерывания в NVIC

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


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

Само сбой, прерывания разрешены, не поленился и проследил в отладчике - стоит битик. 

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


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

Ничего не понимаю.

По пунктам из журнала "мурзилка для начинающих":

1. Убедитесь, что прерывание TIM6 зарегистрировано в контроллере прерываний (NVIC)  - убедился, зарегистрировано (в отладчике смотрел бит).

2. Значение PSC (предделитель) правильно рассчитано для достижения нужной частоты - как-то рассчитано.

3. Значение ARR (автоматическая перезагрузка) также правильно рассчитано - как-то рассчитано.

4. Таймер запущен (TIMx->CR1 |= TIM_CR1_CEN) - запущен (в отладчике смотрел).

5. Убедитесь, что бит прерывания в регистре TIMx->DIER установлен - убедился, стоит (в отладчике смотрел).

6.  Убедитесь, что приоритет прерывания TIM6 установлен корректно и не ниже приоритета других активных прерываний - установка есть, приоритет 0 (по умолчанию), пробовал ставить 2 - результат тот же.

7. Убедитесь, что в файле stm32xxxx_it.c есть правильный обработчик прерывания для TIM6 - есть, куб сгенерировал, туда и не попадаю!

8. Убедитесь, что TIM6 правильно подключено к тактовой шине - куб генерировал, в регистре RCC->APB1ENR установлен RCC_APB1ENR_TIM6EN (смотрел в отладчике)

9. Если вы используете HAL-библиотеку, убедитесь, что вы правильно инициализируете TIM6 через функцию HAL_TIM_Base_Init() - ну, само собой, использую, и все эти вызовы делает куб.

10. Убедитесь, что флаг прерывания (TIMx->SR) правильно установлен - установлен, отладчик подтвердил.

11. Проверьте приоритеты всех прерываний - ну, куб все делал по умолчанию, может. оно и не правильно, но я пока не могу понять, что не так, если не так. приоритет - см. выше, делал и 0 и 2, безрезультатно.

И какого, извините, корнеплода, этому прерыванию не хватает?!

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


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

Корнеплод в форме NVIC_EnableIRQ()

И во-вторых, возможна ошибкав написании имени функции обработчика прерывания. Нужно свериться с тем, что написано в стартаповом файле

В-третиьх, важно чтобы расположение таблицы векторов соответствовало заданному в регистре VTOR положению

И еще одна фича - глобальный запрет прерываний ассемблерной командой.

В и пятых, и если там запущена FreeRTOS, то это еще одна особенность

и она заключается в настройке самой РТОС

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


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

В общем, помогли в другом месте.

Оказалось, не смотря на "галочный" стиль инициализации периферии, между

HAL_TIM_Base_Start_IT(&htim6);

и

HAL_TIM_Base_Start(&htim6);

большая разница! Которую я, ествественно, не учитывал.

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


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

 

И эта "большая" разница - всего лишь в строчке разрешения генерации прерываний таймером

Спойлер
HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)
{
  uint32_t tmpsmcr;

  /* Check the parameters */
  assert_param(IS_TIM_INSTANCE(htim->Instance));

  /* Check the TIM state */
  if (htim->State != HAL_TIM_STATE_READY)
  {
    return HAL_ERROR;
  }

  /* Set the TIM state */
  htim->State = HAL_TIM_STATE_BUSY;

  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  {
    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
    {
      __HAL_TIM_ENABLE(htim);
    }
  }
  else
  {
    __HAL_TIM_ENABLE(htim);
  }

  /* Return function status */
  return HAL_OK;
}
Спойлер
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
{
  uint32_t tmpsmcr;

  /* Check the parameters */
  assert_param(IS_TIM_INSTANCE(htim->Instance));

  /* Check the TIM state */
  if (htim->State != HAL_TIM_STATE_READY)
  {
    return HAL_ERROR;
  }

  /* Set the TIM state */
  htim->State = HAL_TIM_STATE_BUSY;

  /* Enable the TIM Update interrupt */
  __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);

  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  {
    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
    {
      __HAL_TIM_ENABLE(htim);
    }
  }
  else
  {
    __HAL_TIM_ENABLE(htim);
  }

  /* Return function status */
  return HAL_OK;
}

/* Enable the TIM Update interrupt */
  __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);
которая представляет собой макрос
 #define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__)    ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__))

Элементарно жеж!

Если до этого не работало, значит, где-то чето недосмотрели, или смотрели не тот бит. Он назыается UIE в регистре TIM6->DIER. Не путать с UIF

Изменено пользователем EdgeAligned

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


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

Так я ж использовал HAL_TIM_Base_Start(&htim6), будучи уверен, что раз в кубе галочкой прерывание отметил, то оно и будет включено при вызове этой функции!

Какой-то этот куб странный: 99% всего делается мышкой, но 1% где-то хитро спрятан и его надо делать руками... 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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