【Follow me第二季第3期】入门任务:2、按键控制LED测试
<p><strong>1、测试介绍</strong></p><p>上次测试搭建入门任务VsCode、FSP Smart Configurator、CMAKE、GNU 开发环境搭建成功后,本次测试使用按键控制LED的开关。测试实现GPIO的中断输入。</p>
<p><strong>2、设置过程</strong></p>
<p>首先,使用FSP Smart Configurator创建项目FSP_BUT_LED。</p>
<p> 完成后使用,Stacks->New Stack增加IRQ设置</p>
<p> 关键参数:Name g_external_irq9,Channel 9,Callback user_irq_callback,三个关键设置。</p>
<p> 因为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(&g_external_irq9_ctrl,&g_external_irq9_cfg);
if(FSP_SUCCESS != err)
{
APP_ERR_TRAP();
}
err = R_ICU_ExternalIrqEnable(&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->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> 程序中断</p>
<p> LED关闭</p>
<div>项目文件</div>
<p> </p>
<p> </p>
<p> </p>
谢谢分享
页:
[1]