这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【CH582M】通用GPIO的中断处理

共1条 1/1 1 跳转至

【CH582M】通用GPIO的中断处理

专家
2026-08-11 22:20:02     打赏

本帖学习GPIO口中断功能。设置GPIO中断有效,以PA5为例,需要执行以下代码

    GPIOA_ModeCfg(GPIO_Pin_5, GPIO_ModeIN_Floating);     // 浮空。上拉也可以,但外部仍需要加上拉电阻。

    GPIOA_ITModeCfg(GPIO_Pin_5, GPIO_ITMode_FallEdge);   // 下降沿唤醒,按钮按下时起作用。

    GPIOA_ITModeCfg(GPIO_Pin_5, GPIO_ITMode_RiseEdge);   // 上升沿唤醒,按钮抬起时起作用。

    PFIC_EnableIRQ(GPIO_A_IRQn);            // 启用A口中断

另外就是书写中断处理代码,形如:

// GPIOA_IRQHandler

__INTERRUPT

__HIGH_CODE

void GPIOA_IRQHandler(void)

{

    // 中断处理代码,如LED翻转、建立标志等

 

    // 清除中断标志

    GPIOA_ClearITFlagBit(GPIO_Pin_5);

}

为了使GPIO口中断能用,在电路上,GPIO口外围电路必须加上上拉电阻。

image.png 

本来想着继续使用RESET(PB23)做实验,结果没成功。PB22和PB23的处理上稍微复杂些,设计中断端口共享问题程序代码如下:

#include "CH58x_common.h"

 

// 假设 LED 接在 PB4(开发板常见位置,若实际接法不同请修改)

#define LED_PIN     GPIO_Pin_4

 

int main(void)

{

    // 1. 设置系统时钟为 60MHz(必须)

    SetSysClock(CLK_SOURCE_PLL_60MHz);

 

    // 2. 初始化 GPIO

    // 先置高电平(LED 灭,假设低电平点亮),再配置为推挽输出

    GPIOB_SetBits(LED_PIN);

    GPIOB_ModeCfg(LED_PIN, GPIO_ModeOut_PP_5mA);

 

     /* 配置唤醒源为 GPIO - PA5 */

    GPIOA_ModeCfg(GPIO_Pin_5, GPIO_ModeIN_Floating);

    //GPIOA_ITModeCfg(GPIO_Pin_5, GPIO_ITMode_FallEdge); // 下降沿唤醒,按钮按下时起作用

    GPIOA_ITModeCfg(GPIO_Pin_5, GPIO_ITMode_RiseEdge);   // 上升沿唤醒,按钮抬起时起作用

    PFIC_EnableIRQ(GPIO_A_IRQn);  

 

    while(1)

    {

    }

}

 

// GPIOA_IRQHandler

__INTERRUPT

__HIGH_CODE

void GPIOA_IRQHandler(void)

{

    // 翻转LED

    GPIOB_InverseBits(LED_PIN);

    // 清除中断标志

    GPIOA_ClearITFlagBit(GPIO_Pin_5);

}

 编译后下载程序到开发板,运行。

如果选择的是下降沿中断,则按钮按下瞬间,蓝色LED翻转。

如果选择的是上升沿中断,则按钮抬起瞬间,蓝色LED翻转。





关键词: CH582M     GPIO     中断    

共1条 1/1 1 跳转至

回复

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