Я создал проект на основе кода примера, найденного в 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 должны быть одинаковыми, но я мог что-то пропустить, хотя в основном это копипаст из другого проекта, только реорганизованный. Ни в одном из проектов не выдается ошибок или предупреждений компилятора.
Я понимаю, что это довольно общие вопросы, но поскольку мой код имеет ожидаемое поведение в исходном проекте, я подумал, что показ всего кода может не понадобиться. Может быть, кто-то уже сталкивался с чем-то подобным?