【原文】https://makerinchina.cn/article_12434df0dc1e.html
title: STM32G0开发笔记-Platformio+libopencm3-按键和外部中断
tags:
- STM32
- MCU
- STM32G070
- libopencm3
- MonkeyPi
- exti
categories:- STM32
date: 2022-9-8 09:33:05
- STM32
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。
1 新建项目
- 在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
- 新建完成后在src目录新建主程序文件main.c;
- 然后更改项目文件platformio.ini的烧写和调试方式:
upload_protocol = cmsis-dap
debug_tool = cmsis-dap
2 轮询方式使用按键
- 设置GPIO为输入模式
//set gpio input button
gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
- 获取按键输入状态
while (1)
{
if(gpio_get(GPIOC,GPIO11)){
gpio_toggle(GPIOC,GPIO12);
}
}
使用gpio_get获取按键的状态;
3 外部中断方式使用按键
- 设置GPIO外部中断
void button_setup(void)
{
rcc_periph_clock_enable(RCC_GPIOC);
nvic_enable_irq(NVIC_EXTI4_15_IRQ);
gpio_mode_setup(GPIOC,
GPIO_MODE_INPUT,
GPIO_PUPD_NONE,
GPIO11);
exti_select_source(EXTI11, GPIOC);
exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);
exti_enable_request(EXTI11);
}
设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;
- 中断函数
/**
* @brief EXTI4-15 Interrupt service routine.
*/
void exti4_15_isr(void)
{
exti_reset_request(EXTI11);
gpio_toggle(GPIOC, GPIO12);
}
外部中断4-15共用中断函数exti4_15_isr;