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

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

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

[复制链接]
STMCU小助手 发布时间:2023-2-23 21:00
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。
' h, l0 @) G% \1 N& c) C# ^% _% L0 _
1 新建项目
  • 在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
  • 新建完成后在src目录新建主程序文件main.c;
  • 然后更改项目文件platformio.ini的烧写和调试方式:

    $ E) d, C( y- h% r
  1. 1upload_protocol = cmsis-dap
    4 X4 t. Y0 E" Z) F
  2. 2debug_tool = cmsis-dap
复制代码

9 |) L% e, [% ^6 {. a. e8 J5 t+ z* ^8 [! f7 V' |) s
2 轮询方式使用按键
  • 设置GPIO为输入模式
    ( ]: `. Y; A- [& t* i
  1. 1 //set gpio input button; Q" a9 |" }7 V* E/ R5 p+ J( s
  2. 2 gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
复制代码

% k! W2 K! O4 u( K4 S0 X" |" N
% p$ G* R$ K# \& [
  • 获取按键输入状态
    0 `/ w) a( K( y- f& f" m
  1. 1while (1)
    * k& o$ C% p" F8 g( q
  2. 2{  Y/ M8 P. t3 A
  3. 3    if(gpio_get(GPIOC,GPIO11)){# d+ r% w7 B: E* p1 l- p0 w1 ?# Q
  4. 4        gpio_toggle(GPIOC,GPIO12);
    7 u8 f; m) I8 @* `$ V$ R
  5. 5    }    / D( U, Z0 j0 E
  6. 6}  
复制代码

8 h+ ]6 o8 O! U# `4 H
' F; M, W! b4 N8 `% J! K- n# G
使用gpio_get获取按键的状态;
+ G! f5 m) [) V7 k' r& v
3 外部中断方式使用按键
  • 设置GPIO外部中断

    & a* Y, y( y* v- G& P; T
  1. 1void button_setup(void)
    4 I6 o: v, H9 U5 M" N$ V, r
  2. 2{
    9 ]# B" e! f; W# q0 ~0 _! j- @
  3. 3  rcc_periph_clock_enable(RCC_GPIOC);, T  \# l# ]$ `1 N9 T* \1 u
  4. 4
    2 l8 O  e& L8 W! ~* r; f+ i
  5. 5  nvic_enable_irq(NVIC_EXTI4_15_IRQ);9 N/ D. v* {2 o0 u0 V/ f% X
  6. 6
    ( R; |% R( u( l! T& C
  7. 7  gpio_mode_setup(GPIOC,
    # ?( r! P; E5 D0 A
  8. 8                GPIO_MODE_INPUT,$ g4 D' v; S: a7 A3 p+ s
  9. 9                GPIO_PUPD_NONE,. j) n& ]' |6 D* {
  10. 10                GPIO11);
    + k2 K+ W: q* Q5 J
  11. 11  Y: M4 A7 b/ A. n
  12. 12  exti_select_source(EXTI11, GPIOC);$ S8 B/ ]+ C. k9 @9 v3 R2 \
  13. 13  exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);* S8 M1 M& i4 Y( f
  14. 14  exti_enable_request(EXTI11);3 w$ E4 o& _# {0 S- d, o
  15. 15}
复制代码

# K) b1 W' e1 t# D% F% |0 d5 n8 Z9 a. D# K1 q. {' q: v
设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;

0 W1 p- V) G9 c* z! S7 R
  • 中断函数

      e! n# y. A8 Q
  1. 1/**, g0 {( f7 ~9 V. ~4 O, C
  2. 2 * @brief EXTI4-15 Interrupt service routine.6 N' U' k6 Z4 Q; w" |* A! k1 B7 |
  3. 3 */
      {4 ~' p* e5 r
  4. 4void exti4_15_isr(void)
    6 J' k2 J3 o# Y$ D' l9 n
  5. 5{
    6 V& i) h6 ~) `
  6. 6  exti_reset_request(EXTI11);
    5 A  W; Q& R! {
  7. 7. A/ J) r1 v: O+ ]
  8. 8  gpio_toggle(GPIOC, GPIO12);, M6 c1 d) N  y& b( u* s
  9. 9}
复制代码
7 M) I5 l: M# W

; a+ _9 k7 D8 u3 b
外部中断4-15共用中断函数exti4_15_isr;
( e( B! Z5 ^$ J0 |7 H6 C
转载自:MakerInChina.cn
) h: u, N* {. N
收藏 评论0 发布时间:2023-2-23 21:00

举报

0个回答

所属标签

相似分享

官网相关资源

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