Я разрабатываю приложение для университетского проекта на своей плате STM32L1DISCO с микроконтроллером STM32L152RC.
Я настроил контакты и сгенерировал код инициализации через STM32CubeMX. Я использую Atollic TrueSTUDIO в качестве IDE.
Проблема в том, что сгенерированный код инициализации не может работать на моем MCU. Потратив много времени на отладку, я обнаружил, что проблема в коде заключается в этой одной строке, использующей библиотеку HAL gpio:
HAL_GPIO_Init(IDD_CNT_EN_GPIO_Port, &GPIO_InitStruct);
Несмотря на то, что предыдущий код правильный,
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(IDD_CNT_EN_GPIO_Port, IDD_CNT_EN_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin : IDD_CNT_EN_Pin */
GPIO_InitStruct.Pin = IDD_CNT_EN_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
После построчного просмотра кода во время отладки я обнаружил, что функция инициализации HAL GPIO не выполняется и вместо этого выдает ошибку времени выполнения: «Цель не отвечает, повторная попытка…».
Когда я комментирую строку инициализации HAL GPIO, программа выполняется без проблем.
STM32CubeMX включает в код библиотеку HAL. Сверху есть,
Итак, я не уверен, что вызывает проблему, которую я вижу. Я был бы очень признателен за вашу помощь в этом, так как я не знаю, что делать дальше.
Спасибо.
IDD_CNT_EN
подключен к бортовой схеме измерения мощности. При неправильном использовании это временно нарушит подачу питания V DD , перезагрузив MCU.
Посмотрите схемы в руководстве пользователя
Установка IDD_CNT_EN
низкого уровня на выходе запускает внешний таймер U3. После задержки в 150 мс Q13
на U3
входе становится высокий уровень, FET 1 in U20
отключается, а шунтирующий резистор 1 кОм R22
теперь подключается последовательно с V DD для повышения точности измерения мощности. MCU должен перейти в режим LOWPOWER, STOP или STANDBY, в котором потребление значительно ниже 1 мА, в течение 150 мс после установки на IDD_CNT_EN
низкий уровень, и установить его обратно в высокий менее чем через 150 мс после поступления сигнала пробуждения на PA0.
Мишель Кейзерс
Ришаб Кумар
Мишель Кейзерс
яский