bigbat 发表于 2024-11-24 14:59

【Follow me第二季第3期】入门任务:2、按键控制LED测试

<p><strong>1、测试介绍</strong></p>

<p>上次测试搭建入门任务VsCode、FSP&nbsp;Smart Configurator、CMAKE、GNU 开发环境搭建成功后,本次测试使用按键控制LED的开关。测试实现GPIO的中断输入。</p>

<p><strong>2、设置过程</strong></p>

<p>首先,使用FSP&nbsp;Smart Configurator创建项目FSP_BUT_LED。</p>

<p>&nbsp; 完成后使用,Stacks-&gt;New Stack增加IRQ设置</p>

<p>&nbsp; 关键参数:Name&nbsp;g_external_irq9,Channel 9,Callback&nbsp;user_irq_callback,三个关键设置。</p>

<p> &nbsp;因为P004使用按键使用IRQ9设置。</p>

<p>完成后生成项目</p>

<p><strong>3、程序代码</strong></p>

<p>只要程序</p>

<pre>
<code class="language-cpp">#defineAPP_ERR_TRAP()__asm("BKPT #0\n")

volatile bool g_sw_press = false;
volatile bool g_led_sw = false;
</code></pre>

<p>设置两个变量用来存储,按键状态和过程控制,在void hal_entry (void)中初始化中断设置。</p>

<pre>
<code class="language-cpp">    fsp_err_t err = FSP_SUCCESS;

    err = R_ICU_ExternalIrqOpen(&amp;g_external_irq9_ctrl,&amp;g_external_irq9_cfg);

    if(FSP_SUCCESS != err)
    {

      APP_ERR_TRAP();
    }

    err = R_ICU_ExternalIrqEnable(&amp;g_external_irq9_ctrl);

    if(FSP_SUCCESS != err)
    {

      APP_ERR_TRAP();
    }</code></pre>

<p>在hal_entry()外增加Callback函数,</p>

<pre>
<code class="language-cpp">void user_irq_callback(external_irq_callback_args_t *p_args)
{

    if(9== p_args-&gt;channel)
    {
      g_sw_press = true;
    }

}
</code></pre>

<p>只要在hal_entry()循环中检测按键可以控制LED</p>

<pre>
<code class="language-cpp">      uint32_t pin0 = leds.p_leds;
      R_BSP_PinWrite((bsp_io_port_pin_t) pin0, pin_level);

      uint32_t pin1 = leds.p_leds;
      R_BSP_PinWrite((bsp_io_port_pin_t) pin1, pin_level);

      

      if(g_sw_press)
      {
            g_led_sw = !g_led_sw;
            uint32_t pin2 = leds.p_leds;
            if(g_led_sw)
            {
                R_BSP_PinWrite((bsp_io_port_pin_t) pin2, BSP_IO_LEVEL_HIGH);
            }
            else
            {
                R_BSP_PinWrite((bsp_io_port_pin_t) pin2, BSP_IO_LEVEL_LOW);

            }
         
            g_sw_press = false;
      }</code></pre>

<p>debug运行项目,通过按键可以控制RED LED的开关。</p>

<p><strong>4、测试过程</strong></p>

<p>&nbsp; 程序中断</p>

<p>&nbsp; LED关闭</p>

<div>项目文件</div>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

CoderX9527 发表于 2024-11-26 09:56

谢谢分享
页: [1]
查看完整版本: 【Follow me第二季第3期】入门任务:2、按键控制LED测试