你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G0-Platformio+libopencm3-按键和外部中断

[复制链接]
STMCU小助手 发布时间:2023-2-23 21:00
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。
# S' a; y$ o- L7 S- Z1 b
1 新建项目
  • 在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
  • 新建完成后在src目录新建主程序文件main.c;
  • 然后更改项目文件platformio.ini的烧写和调试方式:
    3 a/ N- I+ Q4 T+ l, t( ]
  1. 1upload_protocol = cmsis-dap
    ! ~7 s! x4 r: w: r" i  O# V3 Y
  2. 2debug_tool = cmsis-dap
复制代码

. S* i. I' [" r
) P' D3 h- @# |, S
2 轮询方式使用按键
  • 设置GPIO为输入模式
    7 D% C/ m* U6 c( X' F4 r' _
  1. 1 //set gpio input button* w1 K7 @5 E' f
  2. 2 gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
复制代码

9 Z7 M# J' D7 V) O; C: P8 s7 }5 t2 A! I- I# r
  • 获取按键输入状态

    7 i) x/ M% ~) y3 _6 ~
  1. 1while (1)
    ' p) G3 N" [0 J& x5 b
  2. 2{
    5 Q' }" d& L# |5 G5 K( e; l+ c8 M
  3. 3    if(gpio_get(GPIOC,GPIO11)){& ~9 Z% I2 G9 Y: a
  4. 4        gpio_toggle(GPIOC,GPIO12);
    8 m, B8 L8 e1 ?+ V6 l5 a
  5. 5    }    6 q! ?( q4 f; f' e: M! `: F3 b9 |4 u
  6. 6}  
复制代码
* |1 R" `' ]6 v2 `  V

8 Q- c3 D/ [& @* w
使用gpio_get获取按键的状态;
8 ?  H3 d% x' e7 I; N1 h: k
3 外部中断方式使用按键
  • 设置GPIO外部中断
    ( J3 X8 @: U- P; Y3 U8 `4 V2 c
  1. 1void button_setup(void)
    1 ?+ ^; k/ z7 U! R
  2. 2{
    7 C* D/ P' l  K. [6 U. Q
  3. 3  rcc_periph_clock_enable(RCC_GPIOC);
    9 s2 a' l) v1 }/ a% p3 R2 @- U
  4. 4$ N# ?" Y1 g, S0 E, Q
  5. 5  nvic_enable_irq(NVIC_EXTI4_15_IRQ);
    4 m, ]: m) J* Y/ l3 `
  6. 67 F6 e+ ]: |1 `
  7. 7  gpio_mode_setup(GPIOC,0 S- R% v: w) e4 r% A
  8. 8                GPIO_MODE_INPUT,, a# w2 y. K& `' |* e7 E' _
  9. 9                GPIO_PUPD_NONE,% T$ a( }; V! t
  10. 10                GPIO11);
    1 f- M- Z$ r- S3 Q0 W" k
  11. 11
    4 W# E3 A, Q0 G0 x( P. ~
  12. 12  exti_select_source(EXTI11, GPIOC);
    / f: k4 ?3 v7 |8 d0 X/ B
  13. 13  exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);
    ; J1 }' Y: V. v, ~; {+ z  v
  14. 14  exti_enable_request(EXTI11);# t" s! u5 n, L  v
  15. 15}
复制代码
. V9 @6 {/ u! r) L
/ G; `  Q3 W, r# y- i6 h2 f
设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;

3 z* J0 D5 Q+ J8 k+ P
  • 中断函数

    # r& S) X  h2 b
  1. 1/**
    ! I% d0 h6 l* c, T* W9 Y
  2. 2 * @brief EXTI4-15 Interrupt service routine.0 Y+ d5 h* Y8 X) K0 r- z7 b
  3. 3 */' o( ?4 q9 X# U) \% v" u
  4. 4void exti4_15_isr(void)# n* _- f% U: S2 i3 G0 ~9 ?
  5. 5{& ]4 q# R% `/ P7 C$ g' l8 V
  6. 6  exti_reset_request(EXTI11);4 {" h$ Z+ D, ?5 t: h
  7. 7
    5 _. a9 }" Y9 ~' _9 }$ J
  8. 8  gpio_toggle(GPIOC, GPIO12);
    ( I) j4 Z8 {7 C+ t. d! q
  9. 9}
复制代码
" @5 F, s, w% n' ~

3 P8 M7 R9 M. _8 R1 z
外部中断4-15共用中断函数exti4_15_isr;
6 e" W3 I" U$ e1 f
转载自:MakerInChina.cn

! `/ B7 i% |! t1 J
收藏 评论0 发布时间:2023-2-23 21:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版