首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HAL_GPIO_TogglePin时,STM32 BluePill发光二极管闪光器行为异常

使用HAL_GPIO_TogglePin时,STM32 BluePill发光二极管闪光器行为异常
EN

Stack Overflow用户
提问于 2020-09-15 17:47:21
回答 1查看 96关注 0票数 1

我有两个简单的发光二极管闪光灯编程,闪光间隔为1秒,我的BluePills.One方法使用HAL_GPIO_TogglePin来切换发光二极管状态,另一个使用设置和复位来切换发光二极管状态。设置和复位功能与预期一样,但HAL_GPIO_TogglePin确实在工作,但它在某些时候几乎有脉宽调制效应。我已经在2个不同的Bluepills上尝试了这两种方法,结果都是一样的。

代码语言:javascript
复制
 while (1)
  {  
        if (__HAL_TIM_GET_COUNTER(&htim1) >= 32000)
        {
          HAL_GPIO_TogglePin(User_LED_GPIO_Port, User_LED_Pin);
        }

代码语言:javascript
复制
 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);
        }
EN

回答 1

Stack Overflow用户

发布于 2020-09-15 22:22:23

谢谢Codo,你是100%正确的。我把它修改成

代码语言:javascript
复制
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的例子,它做了同样的事情。

代码语言:javascript
复制
  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无论如何都会工作得更好。谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63899257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档