FTHR-G0001开发板按键触发中断控制LED亮灭
分享作者:1273156767
评测品牌:灵动微电子
评测型号:FTHR-G0001
发布时间:2025-05-23 17:02:17
0
前言
FTHR-G0001开发板基于灵动微电子MM32G0001芯片(Arm® Cortex-M0内核,主频48MHz,16KB Flash,2KB SRAM),具备丰富外设(如12位ADC、PWM定时器、多路通信接口等),性能优于传统8/16位MCU,同时适配STM32开发习惯,支持Keil环境和标准库函数 。其宽电压设计(2.0-5.5V)和工业级温度范围(-40℃~105℃)使其适用于严苛环境 。传感器采集:内置12位ADC(1MSPS采样率)可搭配温湿度、光敏等传感器,用于环境监测系统 。
开源口碑分享内容

FTHR-G0001按键触发中断点灯

任务:通过按键触发FTHR-G0001下降沿中断,在中断服务函数中控制LED亮灭。硬件原理图如下。

LED原理图

按键原理图

代码详细解:

#include "exti_interrupt.h"

#include "main.h"             //首先调用必要的函数包

void GPIO_init(void)          

{

   GPIO_InitTypeDef GPIO_InitStruct; // 定义GPIO初始化结构体变量,用于存储GPIO配置参数

   RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE); // 使能GPIOA外设的时钟

   GPIO_StructInit(&GPIO_InitStruct); // 用默认值填充GPIO初始化结构体

   GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_11; // 配置GPIO引脚:选择GPIOA的第11号引脚

   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP; // 配置IO口工作模式,推挽输出可以输出高、低电平

   GPIO_Init(GPIOA, &GPIO_InitStruct);//从这里开始,就可以设置PA11输出高低电平了

   GPIO_WriteBit(GPIOA, GPIO_Pin_11, Bit_SET);

}

void EXTI2_Configure()

{

       EXTI_InitTypeDef EXTI_InitStruct;

   GPIO_InitTypeDef GPIO_InitStruct;

   NVIC_InitTypeDef NVIC_InitStruct;

   RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);

   GPIO_StructInit(&GPIO_InitStruct);

   GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_2;

   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;//注意这里官方历程是GPIO_Mode_IPD,默认下拉电阻,导致无法检测按键传来的下降沿

   GPIO_Init(GPIOA, &GPIO_InitStruct);

   SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource2);

   EXTI_StructInit(&EXTI_InitStruct);

   EXTI_InitStruct.EXTI_Line    = EXTI_Line2;

   EXTI_InitStruct.EXTI_Mode    = EXTI_Mode_Interrupt;

   EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;

   EXTI_InitStruct.EXTI_LineCmd = ENABLE;

   EXTI_Init(&EXTI_InitStruct);

       

   NVIC_InitStruct.NVIC_IRQChannel = EXTI2_3_IRQn;

   NVIC_InitStruct.NVIC_IRQChannelPriority = 0x01;

   NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

   NVIC_Init(&NVIC_InitStruct);

}

int main(void)

{

       GPIO_init();

       EXTI2_Configure();

   while (1)

   {

   }

}

/*

中断服务函数

*/

void EXTI2_3_IRQHandler(void)

{

   if (RESET != EXTI_GetITStatus(EXTI_Line2))

   {

       GPIOA->ODR ^= GPIO_Pin_11;  //ODR是GPIO的输出数据寄存器,直接对他改写,就是操控IO口

       EXTI_ClearITPendingBit(EXTI_Line2);

   }

}

全部评论
暂无评论
0/144