freeelectron 发表于 2022-3-16 14:23

【BLE 5.3无线MCU CH582】7、按键——GPIO外部中断

<p>系列文章:</p>

<p><a href="https://bbs.eeworld.com.cn/thread-1195192-1-1.html" target="_blank">【BLE 5.3无线MCU CH582】1、初识CH582开发板(开箱)</a></p>

<p><a href="https://bbs.eeworld.com.cn/thread-1195464-1-1.html" target="_blank">【BLE 5.3无线MCU CH582】2、MounRiver IDE初体验</a></p>

<p><a href="https://bbs.eeworld.com.cn/thread-1196099-1-1.html#pid3126477" target="_blank">【BLE 5.3无线MCU CH582】3、非阻塞方式点灯</a></p>

<p><a href="https://bbs.eeworld.com.cn/thread-1196188-1-1.html" target="_blank">【BLE 5.3无线MCU CH582】4、串口不定长数据接收</a></p>

<p><a href="https://bbs.eeworld.com.cn/thread-1196777-1-1.html" target="_blank">【BLE 5.3无线MCU CH582】5、硬件I2C驱动0.96吋OLED</a></p>

<p><a href="https://bbs.eeworld.com.cn/thread-1196846-1-1.html" target="_blank">【BLE 5.3无线MCU CH582】6、pwm呼吸灯</a></p>

<p>&nbsp;</p>

<p><span style="font-size:24px;">1、硬件连接</span></p>

<p> &nbsp;可以看出,PB4接按键,按键按下时下拉到GND,因此可以通过判断<strong>下降沿</strong>,判断按键是否按下。</p>

<p><span style="font-size:24px;">2、代码实现</span></p>

<pre>
<code>static uint8_t KeyState=0;

void KeyInit(void)
{
    GPIOB_ModeCfg( GPIO_Pin_4, GPIO_ModeIN_PU);
    GPIOB_ITModeCfg( GPIO_Pin_4, GPIO_ITMode_FallEdge );

    PFIC_EnableIRQ( GPIO_B_IRQn ); //使能gpiob中断
}


void KeyPolling(void)
{
    if(KeyState)
    {
      KeyState=0;
      printf("key press\r\n");
    }
}

__INTERRUPT
__HIGH_CODE
void GPIOB_IRQHandler(void)
{
    if(GPIOB_ReadITFlagBit(GPIO_Pin_4)) //判断pb4有中断发生
    {
      GPIOB_ClearITFlagBit(GPIO_Pin_4);//清除中断位
      KeyState=1;
    }
}</code></pre>

<p><span style="font-size:26px;">3、测试</span></p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

freebsder 发表于 2022-3-16 18:43

<p>谢谢分享,期待后续</p>
页: [1]
查看完整版本: 【BLE 5.3无线MCU CH582】7、按键——GPIO外部中断