使用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
- 1upload_protocol = cmsis-dap
5 M# e2 e" {5 h6 i0 p2 W0 { - 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 //set gpio input button' ~3 n/ ]6 H+ v0 @* y
- 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
- 1while (1)2 G: c G. y$ \8 _# P4 w
- 2{
2 ~' l {* [- d - 3 if(gpio_get(GPIOC,GPIO11)){# q( t' W; s2 T7 c3 v, o! T! U
- 4 gpio_toggle(GPIOC,GPIO12);, v/ q- p( ?% m
- 5 }
1 ^. ~9 {0 |- V8 Q/ E3 b' W* l2 S - 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
- 1void button_setup(void)
3 [. n5 y, W( W9 Y! P3 r - 2{
$ p/ b) P, \& p0 c" G6 W - 3 rcc_periph_clock_enable(RCC_GPIOC);' R+ n- k; _% l: q- ^3 R+ \5 d8 q' f
- 4
7 Y( p$ m) G! y3 q/ o - 5 nvic_enable_irq(NVIC_EXTI4_15_IRQ);
+ U# s6 L( Z* S* b9 T) ~ - 6
, x; H/ g8 s5 t1 _) G3 I - 7 gpio_mode_setup(GPIOC,; T C% A/ f ^! C9 A: T
- 8 GPIO_MODE_INPUT,
; Z4 x7 s( _& s5 k U L - 9 GPIO_PUPD_NONE,
& K! `8 v& r0 w5 g+ x# O - 10 GPIO11);9 i5 i; v! o8 ]# x
- 11$ u2 ?6 m% Z$ b- c6 C7 o
- 12 exti_select_source(EXTI11, GPIOC);
1 S, i6 o" f4 H w6 l7 G# a - 13 exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);+ \9 y4 D! `9 v5 d$ q( N
- 14 exti_enable_request(EXTI11);
9 }+ O: |( G( ~7 H5 K4 o, E$ F' k - 15}
复制代码 " W( b% |+ b- Y' R& J
# a: i5 {! y. J7 ]1 y3 e设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;
, f' b8 p& ^3 y# B1 e
- 1/**3 O1 c/ a1 ]1 m$ T% X% D3 T- A" G0 \
- 2 * @brief EXTI4-15 Interrupt service routine.
" e" a6 J) a6 c% n# q - 3 */
4 ^ b& }) H4 d+ B. j" ` - 4void exti4_15_isr(void)
/ d$ r2 T4 H7 q! L; Y; j' h9 B5 R - 5{
7 f0 G3 |2 E* J/ o$ k9 D& f- Y - 6 exti_reset_request(EXTI11);
6 w2 k# S0 J% ^0 \& N - 7
5 ~2 R, E% _: ]2 ]9 j( t- o' G f - 8 gpio_toggle(GPIOC, GPIO12);, r1 P3 F; l, M* ~4 H
- 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" \ |