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

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

[复制链接]
STMCU小助手 发布时间:2023-2-23 21:00
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。
+ r$ ]- ~* V% p' ~; B' M
1 新建项目
  • 在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
  • 新建完成后在src目录新建主程序文件main.c;
  • 然后更改项目文件platformio.ini的烧写和调试方式:

    3 P6 q( q" @. L# u) u- a! m8 Q/ A
  1. 1upload_protocol = cmsis-dap
    ' J. f; d8 K- }3 H5 i4 M
  2. 2debug_tool = cmsis-dap
复制代码
2 E- C  L5 [6 p" K& O% B
0 N" W1 q- x) N: ?7 l& Y) j
2 轮询方式使用按键
  • 设置GPIO为输入模式

    4 n& t" M8 J7 X2 e& b: M
  1. 1 //set gpio input button
    % [2 C% _! K- H- L! u
  2. 2 gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
复制代码

( O, m$ _, l$ _4 k  d$ h/ b; M3 F
  • 获取按键输入状态

    ) F( h- m9 R; h3 Z" U3 a
  1. 1while (1)
    $ W! ]( ~1 K, D
  2. 2{
    0 V+ I- o) a% w' L- V8 j! y5 _
  3. 3    if(gpio_get(GPIOC,GPIO11)){0 o* u& l3 y6 x) J: Q
  4. 4        gpio_toggle(GPIOC,GPIO12);1 T- {* ]5 s1 K9 ]
  5. 5    }   
    % Q5 Q  n1 A3 ]4 ?, V: ^8 v; I& t
  6. 6}  
复制代码
! j8 y; i: n* V: m

/ m6 e9 P, M, E
使用gpio_get获取按键的状态;
3 k1 n, l& E& t
3 外部中断方式使用按键
  • 设置GPIO外部中断
    9 X  ?$ }2 L7 m; [0 ^8 f7 K
  1. 1void button_setup(void)) y" k% K$ j  Z1 s% O
  2. 2{
    ( m- l# @5 D( b. r
  3. 3  rcc_periph_clock_enable(RCC_GPIOC);. e9 ^8 J# E2 R
  4. 4
    / G, y2 T9 v# }2 j* w$ H
  5. 5  nvic_enable_irq(NVIC_EXTI4_15_IRQ);
    # x$ e. Q( T  Q+ n) y
  6. 6
    - S! o6 n" d3 o8 t5 B
  7. 7  gpio_mode_setup(GPIOC," G  t6 A. h- D
  8. 8                GPIO_MODE_INPUT,
    3 C& S4 h7 W7 {7 y
  9. 9                GPIO_PUPD_NONE,: ?* Z2 Q, P! P& A* ]# B% A
  10. 10                GPIO11);
    $ G3 O6 ~3 n2 w( s9 y* Z5 f
  11. 11
    + F3 l  B- k# J8 |7 ~  z! p) i2 g
  12. 12  exti_select_source(EXTI11, GPIOC);* [6 o. p- T( b* Z$ G9 x, \% f2 w9 p3 T
  13. 13  exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);
    ! h. B. K$ Q% v/ f3 E7 W0 R9 g
  14. 14  exti_enable_request(EXTI11);8 D) o+ o, ^$ S5 X% t6 h% ?" P
  15. 15}
复制代码
' E1 b  ?9 x1 L3 @; |4 W
; _# D" A" }2 ?
设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;
9 z( p1 v5 y/ R8 i7 P5 B, k
  • 中断函数

    7 L' _, Y9 c) X/ O6 P* |% W- C! {
  1. 1/**
    0 V: m$ K7 k8 D
  2. 2 * @brief EXTI4-15 Interrupt service routine.4 x% A" `' _) ~3 v; I
  3. 3 */' R& {; o$ k2 U+ b+ E- x& p- A* b
  4. 4void exti4_15_isr(void)
    ) m, W) ~5 n' D( N2 j' v0 M2 V4 ^
  5. 5{
    2 k8 n; V6 s4 K: Y( l% u/ }
  6. 6  exti_reset_request(EXTI11);
      L2 J) R$ {% o& |! W/ g5 ^
  7. 7( R" h- I/ W- i/ Q7 ]: V8 L7 y5 m( s
  8. 8  gpio_toggle(GPIOC, GPIO12);, B& L5 t8 Z+ a4 n
  9. 9}
复制代码

2 m! S* J1 ]; `, {0 G
3 x7 G* {, M" W  W
外部中断4-15共用中断函数exti4_15_isr;

7 B2 }. m8 h# Y6 R" q) V
转载自:MakerInChina.cn

4 d* A0 s4 h! W$ [$ P0 ^3 W, \+ O6 r
收藏 评论0 发布时间:2023-2-23 21:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版