1

我有两个简单的 LED 闪光灯以 1 秒的间隔为我的 BluePills 编程闪光。一种方法使用 HAL_GPIO_TogglePin 切换 LED 状态,另一种使用 Set 和 Reset 切换 LED 状态。设置和重置按预期运行,但 HAL_GPIO_TogglePin 确实在工作,但它在某些时候几乎具有 PWM 效果。我已经在 2 个不同的 Bluepills 上尝试了这两种方法,结果都相同。

 while (1)
  {  
        if (__HAL_TIM_GET_COUNTER(&htim1) >= 32000)
        {
          HAL_GPIO_TogglePin(User_LED_GPIO_Port, User_LED_Pin);
        }

 while (1)
  {  
        if (__HAL_TIM_GET_COUNTER(&htim1) >= 32000)
        {
              HAL_GPIO_WritePin(User_LED_GPIO_Port, User_LED_Pin, GPIO_PIN_SET);
        }
        else {
              HAL_GPIO_WritePin(User_LED_GPIO_Port, User_LED_Pin, GPIO_PIN_RESET);
        }
4

1 回答 1

0

谢谢科多,你是 100% 正确的。我将其修改为

if ((__HAL_TIM_GET_COUNTER(&htim1) == 32000) || (__HAL_TIM_GET_COUNTER(&htim1)==0))
        {
          HAL_GPIO_TogglePin(User_LED_GPIO_Port, User_LED_Pin);
          timer_val = __HAL_TIM_GET_COUNTER(&htim1);
        }

有趣的是我最初遵循 Digikey 的例子,它做了同样的事情。

  while (1)
  {
    // If enough time has passed (1 second), toggle LED and get new timestamp
    if (__HAL_TIM_GET_COUNTER(&htim16) - timer_val >= 10000)
    {
      HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
      timer_val = __HAL_TIM_GET_COUNTER(&htim16);
    }

哦,好吧,对于我想要的,Set Reset 效果更好。谢谢

于 2020-09-15T14:22:23.237 回答