Я начал изучать stm32. Пытаюсь моргнуть светодиодом PC13 на плате stm32f103c6t6. Я мог включить светодиод, но когда я попытался его выключить, это не сработало. Фрагмент кода ниже.
/* USER CODE BEGIN WHILE */
while (1)
{
GPIOC->ODR &= ~GPIO_ODR_ODR13;//turn PC_13 ON
HAL_Delay(500);
GPIOC->ODR &= GPIO_ODR_ODR13;//turn PC_13 OFF
HAL_Delay(500);
/* USER CODE END WHILE */
}
Также я пробовал другой способ, но он вообще не сработал. Светодиод погас. Фрагмент кода ниже.
/* USER CODE BEGIN WHILE */
while (1)
{
GPIOC->BSRR &=~ GPIO_BSRR_BS13;//turn PC_13 ON
HAL_Delay(500);
GPIOC->BSRR &=~ GPIO_BSRR_BS13;//turn PC_13 OFF
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
Также я пробовал только функции HAL (WritePin, TogglePin...), но LED также не почувствовал, что они отключаются.
while (1)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
HAL_Delay(500);
}
Возможно, из-за того, что светодиод перевернут, он не выключается случайно.
Да, я сделал это в CUbeMx.
Чтобы установить бит, вам нужно ИЛИ
GPIOC->ODR |= GPIO_ODR_ODR13;//turn PC_13 OFF
Должен быть назначен BSRR, а не RMW.
GPIOC->BSRR = GPIO_BSRR_BR13;//turn PC_13 ON
GPIOC->BSRR = GPIO_BSRR_BS13;//turn PC_13 OFF
вы настроили контакт как выход? Потому что если вы этого не сделали, никакая настройка состояния ничего не даст. Также посмотрите этот вопрос, он уже задавался. вам нужно установить 0 с помощью
&
и установить 1 с помощью|