请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
STMCU小助手 发布时间:2023-2-23 21:00
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。

5 _; W0 E: H( Y1 p2 ^
1 新建项目
  • 在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
  • 新建完成后在src目录新建主程序文件main.c;
  • 然后更改项目文件platformio.ini的烧写和调试方式:

    9 D6 k) e8 c! m4 Y, m
  1. 1upload_protocol = cmsis-dap
    5 M# e2 e" {5 h6 i0 p2 W0 {
  2. 2debug_tool = cmsis-dap
复制代码
6 D( @9 ]. @! S8 x. ?
( U/ d* T* y, n+ S5 r; K
2 轮询方式使用按键
  • 设置GPIO为输入模式

    6 ?- @" U4 Z! P+ {, j
  1. 1 //set gpio input button' ~3 n/ ]6 H+ v0 @* y
  2. 2 gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
复制代码

  I# Y/ m2 |' v- {; h" f; g% y+ A: V) ]
  • 获取按键输入状态
    5 h# |9 j7 q, \: L0 J
  1. 1while (1)2 G: c  G. y$ \8 _# P4 w
  2. 2{
    2 ~' l  {* [- d
  3. 3    if(gpio_get(GPIOC,GPIO11)){# q( t' W; s2 T7 c3 v, o! T! U
  4. 4        gpio_toggle(GPIOC,GPIO12);, v/ q- p( ?% m
  5. 5    }   
    1 ^. ~9 {0 |- V8 Q/ E3 b' W* l2 S
  6. 6}  
复制代码
& X% ?: T2 s+ r  E
% N" z& M; }, }& N" `
使用gpio_get获取按键的状态;

6 ^7 B4 t' a. F* M  f% V4 P
3 外部中断方式使用按键
  • 设置GPIO外部中断
    " }. B8 z) I- t
  1. 1void button_setup(void)
    3 [. n5 y, W( W9 Y! P3 r
  2. 2{
    $ p/ b) P, \& p0 c" G6 W
  3. 3  rcc_periph_clock_enable(RCC_GPIOC);' R+ n- k; _% l: q- ^3 R+ \5 d8 q' f
  4. 4
    7 Y( p$ m) G! y3 q/ o
  5. 5  nvic_enable_irq(NVIC_EXTI4_15_IRQ);
    + U# s6 L( Z* S* b9 T) ~
  6. 6
    , x; H/ g8 s5 t1 _) G3 I
  7. 7  gpio_mode_setup(GPIOC,; T  C% A/ f  ^! C9 A: T
  8. 8                GPIO_MODE_INPUT,
    ; Z4 x7 s( _& s5 k  U  L
  9. 9                GPIO_PUPD_NONE,
    & K! `8 v& r0 w5 g+ x# O
  10. 10                GPIO11);9 i5 i; v! o8 ]# x
  11. 11$ u2 ?6 m% Z$ b- c6 C7 o
  12. 12  exti_select_source(EXTI11, GPIOC);
    1 S, i6 o" f4 H  w6 l7 G# a
  13. 13  exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);+ \9 y4 D! `9 v5 d$ q( N
  14. 14  exti_enable_request(EXTI11);
    9 }+ O: |( G( ~7 H5 K4 o, E$ F' k
  15. 15}
复制代码
" W( b% |+ b- Y' R& J

# a: i5 {! y. J7 ]1 y3 e
设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;

, f' b8 p& ^3 y# B1 e
  • 中断函数
    # p& y' z2 o' k3 b
  1. 1/**3 O1 c/ a1 ]1 m$ T% X% D3 T- A" G0 \
  2. 2 * @brief EXTI4-15 Interrupt service routine.
    " e" a6 J) a6 c% n# q
  3. 3 */
    4 ^  b& }) H4 d+ B. j" `
  4. 4void exti4_15_isr(void)
    / d$ r2 T4 H7 q! L; Y; j' h9 B5 R
  5. 5{
    7 f0 G3 |2 E* J/ o$ k9 D& f- Y
  6. 6  exti_reset_request(EXTI11);
    6 w2 k# S0 J% ^0 \& N
  7. 7
    5 ~2 R, E% _: ]2 ]9 j( t- o' G  f
  8. 8  gpio_toggle(GPIOC, GPIO12);, r1 P3 F; l, M* ~4 H
  9. 9}
复制代码

: q8 M, u4 \/ E8 [6 ?" ]* j/ i2 j8 X* z. @& z
外部中断4-15共用中断函数exti4_15_isr;

7 K$ S( q5 y/ b; ^' C
转载自:MakerInChina.cn

; B& v8 p# h" P4 N2 q6 d8 A" \
收藏 评论0 发布时间:2023-2-23 21:00

举报

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