这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【let'sdo|2026年第3期】01开发板的应用-任务一

共1条 1/1 1 跳转至页

【let'sdo|2026年第3期】01开发板的应用-任务一

高工
2026-10-27 09:51:20     打赏

        我们本次使用的主要对象是ST的开发板,这次我们是以STM32H533为例来进行本次活动的开发,注意也支持采用新系列的开发板(C562和C542)进行开发,其开发流程会有些许的差异。

        STM32H533属于ST的H5的一款单片机,本人还是非常喜欢的一款,大家也可能有不少人接触过,这次我将通过这款单片机的官方开发板实现本次活动的基本任务。

        我们使用STM32CubeMX进行初始化代码的配置,第一个任务主要是对这个开发板的开发基础配置和基本的使用,主要实现的功能是蜂鸣器模块和LED的控制,并通过串口打印基本信息,这里我们在加入按键的控制。

        对于官方开发板来说,有stm32h5xx_nucleo,我们不需要太特殊的配置,板载的LED、按键、串口的使用都需要我们配置:0ea818b4-251d-4034-8034-9eb77dfa7f73.png

        直接使用官方正对开发板bsp就可以,蜂鸣器的控制我们加入了一个引脚就可以

        我们先看一下本次使用的蜂鸣器,我们推荐了一款有源蜂鸣器作为本次活动的声音指示,Grove - 蜂鸣器模块的主要组件是一个压电蜂鸣器。压电蜂鸣器可以连接到数字输出,当输出为高电平时会发出音调。或者,它可以连接到模拟脉宽调制输出以生成各种音调和效果。其主要控制信号是高低电平,我们配置一个一个引脚进行控制:

2b4b449e-0543-45b0-864d-5dba67180482.png

        加了一个定时器进行非阻塞相关的控制:

871b11bb-51d1-4fa2-a0a3-75adbdb0efe1.png

        其他就是工程相关的配置了,时钟直接拉满,本次使用Cmake+VScode进行开发:

163503f9-dc4d-4644-8292-f22757d764c1.png

        新工程来到后再VScode的STM32CubeIDE打开,首先需要配置一下,不然没法调试:

7b16f853-e406-4f18-965a-2e443423c000.png

        接下来就是代码调试,我们主要实现的功能,按键控制LED的运行状态,并通过蜂鸣器提示按键按下,串口打印LED状态,主要都是在中断中实现,主要涉及的是定时器中断和按键外部中断,代码如下:

oid App_ToggleLedBlink(void)
{
  ledBlinkEnabled = !ledBlinkEnabled;

  if (ledBlinkEnabled)
  {
    ledToggleTick  = 0U;
    BSP_LED_On(LED_GREEN);
    printf("[KEY] USER button pressed -> LED blink ON (period=%u ms)\r\n",
           (unsigned)LED_BLINK_PERIOD_MS);
  }
  else
  {
    BSP_LED_Off(LED_GREEN);
    printf("[KEY] USER button pressed -> LED blink OFF\r\n");
  }

  /* Always sound the buzzer on a valid press (high level drives the buzzer) */
  HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET);
  buzzerActive = true;
  buzzerTick   = 0U;
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if (htim->Instance != TIM12)
  {
    return;
  }
  if (ledBlinkEnabled)
  {
    if (++ledToggleTick >= LED_BLINK_PERIOD_MS)
    {
      ledToggleTick = 0U;
      BSP_LED_Toggle(LED_GREEN);
    }
  }
  if (buzzerActive)
  {
    if (++buzzerTick >= BUZZER_DURATION_MS)
    {
      buzzerActive = false;
      buzzerTick   = 0U;
      HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
    }
  }
  if (!keyReady)
  {
    if (++keyDebounceTick >= KEY_DEBOUNCE_MS)
    {
      keyDebounceTick = 0U;
      keyReady        = true;
    }
  }
}

void BSP_PB_Callback(Button_TypeDef Button)
{
  if (Button != BUTTON_USER)
  {
    return;
  }

  /* Reject bounce / double-trigger until the debounce window has elapsed */
  if (!keyReady)
  {
    return;
  }
  keyReady        = false;
  keyDebounceTick = 0U;

  App_ToggleLedBlink();
}

        整体的硬件连接如下:

71eff6b8-334a-495e-9745-65751ae7cd26.png

        可以看到串口有如下的打印:

d795f5a8-0b6b-4598-a15e-b3ab536bdd62.png






关键词: 开发     任务    

共1条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]