使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。 3 B# R8 ]: ]% d
1 新建项目在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB; 新建完成后在src目录新建主程序文件main.c; 然后更改项目文件platformio.ini的烧写和调试方式:
$ ]4 {" N& f3 D1 ~0 t
- 1upload_protocol = cmsis-dap
: s, g/ R* f# O# ~, E - 2debug_tool = cmsis-dap
复制代码
. U8 _# S! r1 G1 r( j9 |7 a% a- b/ P
2 轮询方式使用按键设置GPIO为输入模式 - }' E* t6 m+ \+ I4 u; }
- 1 //set gpio input button5 l! X3 o+ Q0 P! ]4 l
- 2 gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
复制代码 5 \3 O6 I0 y5 v0 e, I5 V( w
/ K0 c4 s! \ U" z4 g
获取按键输入状态
j- L5 |! |! C' ?9 p: w3 z
- 1while (1)
' S9 `) K8 o; b' g6 [# A6 ^ - 2{+ y' c( _% V; t' }
- 3 if(gpio_get(GPIOC,GPIO11)){
: B* o$ D/ t3 {1 |0 Q& A* F, b# ~ - 4 gpio_toggle(GPIOC,GPIO12);- c1 ~' H4 b8 I/ f6 G/ }) W
- 5 }
6 p( e! ]+ n7 ^* t - 6}
复制代码 5 e/ |) T0 {1 d8 @! f0 H9 ?
& ]% w' w3 n% c使用gpio_get获取按键的状态; # V* i6 d4 I& v3 d$ n: [8 x, _
3 外部中断方式使用按键设置GPIO外部中断 . ^8 v% ~5 q- }0 K2 I( F$ s
- 1void button_setup(void)
7 c2 S" \' T; a3 M+ n3 h: B - 2{
* D- Y5 v' E) d/ K2 {) V+ T - 3 rcc_periph_clock_enable(RCC_GPIOC);6 M N" y5 U# t: t
- 4
- G% z+ Z, `7 l5 s! F7 T - 5 nvic_enable_irq(NVIC_EXTI4_15_IRQ);0 r$ o. E$ O$ f& Y: z
- 6
! `( |7 Y% M5 f. P" m5 i3 v4 i - 7 gpio_mode_setup(GPIOC,
+ {/ H2 {; M1 w5 t9 [ - 8 GPIO_MODE_INPUT,2 C8 m1 E- N) d# a, g8 w
- 9 GPIO_PUPD_NONE,
7 p; v* O6 K E0 c6 _ - 10 GPIO11);" J6 n$ c: u3 {; `# {8 H& P
- 110 C8 y% C% k# c S o9 r( ^4 o
- 12 exti_select_source(EXTI11, GPIOC);
/ ]5 C$ l7 V- Z3 O8 C6 ^. K - 13 exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);
6 W8 [4 w# w7 l6 q& ^6 S9 c: f' _$ B; L- b - 14 exti_enable_request(EXTI11);
9 e k# u, `3 `1 ` - 15}
复制代码
$ p0 p: N; y ?$ _8 Y ?! P& k9 y/ x
设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;
/ X' x& s$ X" @2 F- x
中断函数 ! m |8 T- j" @! `* ^& B
- 1/**. h) S# ]. o |
- 2 * @brief EXTI4-15 Interrupt service routine., {+ P9 V2 I% e4 C
- 3 */' |! s+ e& W, W! g* F
- 4void exti4_15_isr(void)
' Q. C2 R& }: l. h+ s i - 5{
6 I% n5 t# X2 _4 @' | - 6 exti_reset_request(EXTI11);& q/ O! D6 W5 j3 I. }- v+ T, G! S
- 71 B6 E; h5 R9 r$ d4 J/ s0 f
- 8 gpio_toggle(GPIOC, GPIO12);
) _% z. E7 q( |+ v8 \* O- d: j6 ] - 9}
复制代码 : M3 J' s0 k/ r% l0 J A! m/ y$ A
5 ]- M# P7 a3 c; n外部中断4-15共用中断函数exti4_15_isr;
$ x6 A. |. T( |: e1 ~3 ^, h
转载自:MakerInChina.cn 8 S; U7 g9 I( R! R2 G0 K
|