Реорганизация примера кода STM32 в новом проекте замедляет код - PullRequest
1 голос
/ 10 июля 2020

Я создал проект на основе кода примера, найденного в STM32Cube_FW_L4_V1.15.0\Projects\NUCLEO-L432KC\Examples\TIM\TIM_PWMInput. Я использую плату Nucleo NUCLEO-L432K C, и я программирую ее с помощью STM32CubeIDE 1.3.0.

По мере роста проекта я пытался лучше организовать код в новом проекте. с заголовочными и исходными файлами, потому что почти все было в main.c, за исключением обычных файлов, найденных в проекте STM HAL. В конце концов я получил код, работающий с новым и реорганизованным проектом, созданным как проект STM32 в STMCubeIDE. Однако он работает очень медленно по сравнению с проектом с большей частью кода в main.c, что странно, поскольку он в основном определяет, инициалы и тому подобное. В main.c у меня бесконечные l oop и HAL_TIM_IC_CaptureCallback(). L oop выглядит так:

  while (1)
  {
      if (TIM15_DutyCycle > 50 && TIM2_DutyCycle < 50)
      {
          BSP_LED_Off(LED3);
          DWT_Delay_us(200);
      }else
      {
          BSP_LED_On(LED3);
          DWT_Delay_us(200);
      }
  }
}

Он генерирует сигнал, частоту которого я считываю с помощью другого таймера. Теперь проблема в том, что этот код работает из примера проекта, но не из нового проекта. С помощью осциллографа я вижу, что сигнал все еще генерируется, поэтому код выполняется, но синхронизация полностью отключена и очень медленная. Думаю, мой вопрос в том, что могло вызвать это? Может ли организация кода в нескольких файлах вызвать слишком частое переключение контекста и замедлить выполнение? Или это может быть какая-то настройка проекта в STM32CubeIDE, которая вызывает это? Пока не нашел разницы. Настройки часов и c должны быть одинаковыми, но я мог что-то пропустить, хотя в основном это копипаст из другого проекта, только реорганизованный. Ни в одном из проектов не выдается ошибок или предупреждений компилятора.

Я понимаю, что это довольно общие вопросы, но поскольку мой код имеет ожидаемое поведение в исходном проекте, я подумал, что показ всего кода может не понадобиться. Может быть, кто-то уже сталкивался с чем-то подобным?

1 Ответ

0 голосов
/ 10 июля 2020

Может ли организация кода в нескольких файлах вызвать слишком много переключения контекста и замедлить выполнение? . Вы изменили SystemClock_Config ()?

Включите вывод Master Clock Output (MCO), а затем с помощью осциллографа проверьте, что часы работают на ожидаемой частоте (80 МГц?). Добавьте эту строку после вызова SystemClock_Config (), чтобы включить MCO. Это предполагает, что вы используете ФАПЧ, как в примере.

SystemClock_Config();
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_PLLCLK, RCC_MCODIV_1);

Мое второе предположение состоит в том, что у вас есть ошибка в вашем коде, и он ведет себя не так, как вы ожидаете. Вам нужно будет показать больше кода, чтобы получить помощь. Например, покажите конфигурации таймера и покажите DWT_Delay_us().

...