这是我第一次使用mikrokontro编程,我正在使用uVison并使用stm32进行编程。
我的针脚上有两个LED指示灯:PIN_4和PIN_5带有一个教程,我知道如何进行一次闪烁(下面的代码),但我不知道如何让它们以不同的延迟闪烁。就像我想让PIN_4导致延迟100ms和PIN:5导致延迟50ms。下面的代码是一个Led灯的代码。
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4); //Toggle the state of pin PC9
HAL_Delay(100); //delay 100ms
}
/* USER CODE END 3 */
}
答案 0 :(得分:1)
您有2个选项。
首先,您可以设置计时器以计算毫秒数。您可以从STMCubeMX生成50ms定时器的代码。然后,在定时器回调函数中,您应该将引脚设置为高或低。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
timer_counter++; //50ms
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
if(timer_counter>=2) //100ms
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);
timer_counter = 0;
}
}
第二个选项是主延迟。
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); //Toggle the state of pin PB5
HAL_Delay(50); //delay 50ms
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4); //Toggle the state of pin PB4
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); //Toggle the state of pin PB5
HAL_Delay(50); // delay 50ms
}
/* USER CODE END 3 */
}