STM32G0 GPIO中断代码
时间: 2024-08-14 14:00:25 浏览: 55
STM32G0系列微控制器的GPIO中断通常涉及设置中断配置、初始化GPIO引脚并配置中断处理程序。这里是一个简单的示例,假设我们要使用GPIO Pin PA0的上升沿触发中断:
```c
#include "stm32g0xx.h"
// 定义中断处理函数
void EXTI0_IRQHandler(void) {
// 恢复中断允许状态,防止干扰其他中断
EXTI_ClearITPendingBit(EXTI_Line0);
if (EXTI_GetITStatus(EXTI_Line0, ENABLE)) { // 判断PA0是否有中断发生
// 当PA0的电平从低变高时(即上升沿),执行这里的代码
// 这里仅作示例,实际应用中应填充你的业务逻辑
printf("PA0 Rising Edge Interrupt\n");
}
}
int main(void) {
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // 启动GPIOA时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 初始化PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 输入浮空模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置速度等级
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIOA的PA0
// 配置中断
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line0; // EXTI线选择为PA0
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Rising; // 边沿触发,上升沿
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; // 触发方式
EXTI_InitStructure.EXTI_IntEdge = EXTI_IntEdge_Rising; // 中断在上升沿
EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 开启中断
EXTI_Init(&EXTI_InitStructure); // 初始化EXTI
// 注册中断服务函数
NVIC_SetVector(EXTI0_IRQn, (uint32_t)&EXTI0_IRQHandler); // 设置中断向量
NVIC_EnableIRQ(EXTI0_IRQn); // 开启EXTI0中断
while (1) {
// 循环主程序...
}
}
```