jinglixixi 发表于 2024-12-25 00:46

【MCXA156开发板测评】+按键控制LED

<p>MCXA156开发板为了便于用户体验和测试其功能,配备了相应的接口和外设,见图1所示。</p>

<p> &nbsp;</p>

<p>图1 接口及外设配置</p>

<p >&nbsp;</p>

<p >为此,就从GPIO口的使用来开始它的探索与使用之旅。</p>

<p >GPIO口有两大基本功能,即输入与输出功能。板载的RGB_LED和按键恰为GPIO口的测试提供了便利,其电路见图2所示。</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p>图2 &nbsp;RGB及按键电路</p>

<p >&nbsp;</p>

<p >用按键来控制LED不外乎2种方式,即查询方式和中断方式。</p>

<p >&nbsp;</p>

<ol>
        <li >查询方式</li>
</ol>

<p >以查询方式进行控制的思路为:</p>

<p >将LED和按键所使用的引脚分别配置为输出和输入工作模式,然后通过按键的状态来控制LED进行状态的翻转变化。</p>

<p >以查询方式进行控制的主程序为:</p>

<pre>
<code class="language-cpp">int main(void)
{
    gpio_pin_config_t sw_config = {
      kGPIO_DigitalInput,
      0,
    };
    gpio_pin_config_t led_config = {
      kGPIO_DigitalOutput,
      0,
    };
    BOARD_InitPins();
    BOARD_InitBootClocks();
    BOARD_InitDebugConsole();
    GPIO_PinInit(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, &amp;sw_config);
    GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &amp;led_config);
    while (1)
    {
          if ((GPIO_PinRead(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN))==0)
      {
            GPIO_PortToggle(BOARD_LED_GPIO, 1U &lt;&lt; BOARD_LED_GPIO_PIN);
                  while (((GPIO_PinRead(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN))==0));
      }
    }
}
</code></pre>

<p>2.中断方式</p>

<p >&nbsp;</p>

<p >以中断方式进行控制的思路为:</p>

<p >将LED和按键所使用的引脚分别配置为输出和输入工作模式,并启动中断处理。当按下按键时,触发中断处理以使标志变量等于真,从在主程序中使LED进行状态翻转。</p>

<p >&nbsp;</p>

<p >以中断方式进行控制的主程序为:</p>

<pre>
<code class="language-cpp">int main(void)
{
    gpio_pin_config_t sw_config = {
      kGPIO_DigitalInput,
      0,
    };
    gpio_pin_config_t led_config = {
      kGPIO_DigitalOutput,
      0,
    };
    BOARD_InitPins();
    BOARD_InitBootClocks();
    BOARD_InitDebugConsole();
    GPIO_SetPinInterruptConfig(BOARD_SW_GPIO,BOARD_SW_GPIO_PIN, kGPIO_InterruptFallingEdge);
    EnableIRQ(BOARD_SW_IRQ);
    GPIO_PinInit(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, &amp;sw_config);
    GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &amp;led_config);
    while (1)
    {
      if (g_ButtonPress)
      {
            GPIO_PortToggle(BOARD_LED_GPIO, 1U &lt;&lt; BOARD_LED_GPIO_PIN);
            g_ButtonPress = false;
      }
    }
}
</code></pre>

<p>中断处理的函数为:</p>

<pre>
<code class="language-cpp">void BOARD_SW_IRQ_HANDLER(void)
{
    GPIO_GpioClearInterruptFlags(BOARD_SW_GPIO, 1U &lt;&lt; BOARD_SW_GPIO_PIN);
    g_ButtonPress = true;
    SDK_ISR_EXIT_BARRIER;
}
</code></pre>

<p>这样我们就以2种方式实现了按键控制LED的功能,也为后续的GPIO口使用提供了可靠的支持。</p>

<p>&nbsp;</p>

<p >&nbsp;</p>

Jacktang 发表于 2024-12-25 07:27

<p>查询和中断都是比较常用的按键控制方法</p>

jinglixixi 发表于 2024-12-25 09:11

Jacktang 发表于 2024-12-25 07:27
查询和中断都是比较常用的按键控制方法

<p>没错,因此要打好基础。</p>

秦天qintian0303 发表于 2024-12-25 22:29

<p>板载接口还是挺丰富的,扩展模块要不是买的太贵其实可以整个套件的测评</p>

freebsder 发表于 2024-12-26 15:12

<p>谢谢分享,期待看看特色外设<img height="52" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/pleased.gif" width="48" /></p>

jinglixixi 发表于 2025-1-19 20:45

akaz 发表于 2025-1-19 19:33
官方的板子就可以直接用案例,第三方的都得移植,毕竟硬件都会有所不同。

<p>的确是这种情况</p>
页: [1]
查看完整版本: 【MCXA156开发板测评】+按键控制LED