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

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

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

8 \* Z: \) [" e. O5 U- l& q; h
1 新建项目
  • 在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
  • 新建完成后在src目录新建主程序文件main.c;
  • 然后更改项目文件platformio.ini的烧写和调试方式:
      x+ r  R, P' _6 J& p
  1. 1upload_protocol = cmsis-dap4 Z5 q2 ^; E* X4 @0 f: S2 L. Z
  2. 2debug_tool = cmsis-dap
复制代码

) x* F) j  q3 j2 p' g3 X; \, Q2 l% s, _0 I9 q( N2 V0 Z, I
2 轮询方式使用按键
  • 设置GPIO为输入模式

    : P; l; l2 Z, \1 g3 v4 V9 T
  1. 1 //set gpio input button
    * j$ r. T: d( N7 n0 x
  2. 2 gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
复制代码

9 m1 t% p: n7 O/ d4 W' P7 T! l$ ]8 a3 u2 X7 J
  • 获取按键输入状态
    & E, b$ O" [" p1 F
  1. 1while (1)4 a, X: k2 T. U* G; P
  2. 2{
    ! i8 Q- U  h. O4 {- v( A) f! I4 ?
  3. 3    if(gpio_get(GPIOC,GPIO11)){
    * O4 l4 Y3 U6 P' J: }' \
  4. 4        gpio_toggle(GPIOC,GPIO12);0 J$ J  `8 B0 }9 x
  5. 5    }   
    ! K9 m/ o. N7 I+ P- Z- a. s
  6. 6}  
复制代码

$ o6 Q5 x% D. b& ?9 B* }& s
; N  ^# x: y# |7 }. P( U
使用gpio_get获取按键的状态;
" P; }$ i( U2 d1 }8 Y
3 外部中断方式使用按键
  • 设置GPIO外部中断

    2 e# i$ G6 \$ i/ o# t  q
  1. 1void button_setup(void)
    ; l2 a0 V$ V- I6 I
  2. 2{
    % b% s9 s" R, t9 s$ \0 `* D
  3. 3  rcc_periph_clock_enable(RCC_GPIOC);
    & y" _- k6 Q4 k1 S. ~7 u
  4. 4
    , E9 D/ V5 @& T. d, i
  5. 5  nvic_enable_irq(NVIC_EXTI4_15_IRQ);( _3 c( c' D2 P' y( Z
  6. 6
    ; [; T7 R5 Y- H  ]6 j, q
  7. 7  gpio_mode_setup(GPIOC,
    ! W# c9 B- k& K; X
  8. 8                GPIO_MODE_INPUT,2 x) K. j2 ?1 s# ?
  9. 9                GPIO_PUPD_NONE,1 V* l1 @+ X; s6 N" l1 A
  10. 10                GPIO11);0 N/ {8 x- ?0 ~& g$ \' N6 ?
  11. 11
    2 V( |" ]) u5 s9 S$ x2 k
  12. 12  exti_select_source(EXTI11, GPIOC);
    - t$ v* d) |: T  W* j/ B1 o
  13. 13  exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);
      n/ |5 Y0 ?  _
  14. 14  exti_enable_request(EXTI11);
    ) b* E4 U* F% v) x
  15. 15}
复制代码
. |) u2 W: P6 ]0 L

' n  d8 t% b; }/ Z  _4 y2 v7 G5 y
设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;

: G+ u- Q  U; O* F+ z; S
  • 中断函数

    0 e) L! H( E( i) E2 x/ W
  1. 1/**
    6 c0 t  Y) _4 j0 U9 Y4 ^- k
  2. 2 * @brief EXTI4-15 Interrupt service routine.
    2 m6 m  \# r) m! N: k
  3. 3 */# A3 ?6 I- p- m5 B! @" \
  4. 4void exti4_15_isr(void)0 M6 \& _! [8 N0 B
  5. 5{
    ( _# S5 p' x$ N
  6. 6  exti_reset_request(EXTI11);" {8 `& F+ A6 H# ]
  7. 78 T( y5 F% X  w- l. i! `! X
  8. 8  gpio_toggle(GPIOC, GPIO12);
    ! U6 c2 t$ X$ M! v+ F' s$ L
  9. 9}
复制代码

3 v: o; D: o2 K- z" T; h3 w
) X" }! m/ r. u- j
外部中断4-15共用中断函数exti4_15_isr;

9 i$ |  C. O2 _- ]7 M# b9 N3 ~, c
转载自:MakerInChina.cn

0 }& m) g, c% C4 h3 R" o, I
收藏 评论0 发布时间:2023-2-23 21:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版