使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。 # S' a; y$ o- L7 S- Z1 b
1 新建项目在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB; 新建完成后在src目录新建主程序文件main.c; 然后更改项目文件platformio.ini的烧写和调试方式: 3 a/ N- I+ Q4 T+ l, t( ]
- 1upload_protocol = cmsis-dap
! ~7 s! x4 r: w: r" i O# V3 Y - 2debug_tool = cmsis-dap
复制代码
. S* i. I' [" r
) P' D3 h- @# |, S2 轮询方式使用按键设置GPIO为输入模式 7 D% C/ m* U6 c( X' F4 r' _
- 1 //set gpio input button* w1 K7 @5 E' f
- 2 gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
复制代码
9 Z7 M# J' D7 V) O; C: P8 s7 }5 t2 A! I- I# r
获取按键输入状态
7 i) x/ M% ~) y3 _6 ~
- 1while (1)
' p) G3 N" [0 J& x5 b - 2{
5 Q' }" d& L# |5 G5 K( e; l+ c8 M - 3 if(gpio_get(GPIOC,GPIO11)){& ~9 Z% I2 G9 Y: a
- 4 gpio_toggle(GPIOC,GPIO12);
8 m, B8 L8 e1 ?+ V6 l5 a - 5 } 6 q! ?( q4 f; f' e: M! `: F3 b9 |4 u
- 6}
复制代码 * |1 R" `' ]6 v2 ` V
8 Q- c3 D/ [& @* w使用gpio_get获取按键的状态; 8 ? H3 d% x' e7 I; N1 h: k
3 外部中断方式使用按键设置GPIO外部中断 ( J3 X8 @: U- P; Y3 U8 `4 V2 c
- 1void button_setup(void)
1 ?+ ^; k/ z7 U! R - 2{
7 C* D/ P' l K. [6 U. Q - 3 rcc_periph_clock_enable(RCC_GPIOC);
9 s2 a' l) v1 }/ a% p3 R2 @- U - 4$ N# ?" Y1 g, S0 E, Q
- 5 nvic_enable_irq(NVIC_EXTI4_15_IRQ);
4 m, ]: m) J* Y/ l3 ` - 67 F6 e+ ]: |1 `
- 7 gpio_mode_setup(GPIOC,0 S- R% v: w) e4 r% A
- 8 GPIO_MODE_INPUT,, a# w2 y. K& `' |* e7 E' _
- 9 GPIO_PUPD_NONE,% T$ a( }; V! t
- 10 GPIO11);
1 f- M- Z$ r- S3 Q0 W" k - 11
4 W# E3 A, Q0 G0 x( P. ~ - 12 exti_select_source(EXTI11, GPIOC);
/ f: k4 ?3 v7 |8 d0 X/ B - 13 exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);
; J1 }' Y: V. v, ~; {+ z v - 14 exti_enable_request(EXTI11);# t" s! u5 n, L v
- 15}
复制代码 . V9 @6 {/ u! r) L
/ G; ` Q3 W, r# y- i6 h2 f
设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;
3 z* J0 D5 Q+ J8 k+ P
- 1/**
! I% d0 h6 l* c, T* W9 Y - 2 * @brief EXTI4-15 Interrupt service routine.0 Y+ d5 h* Y8 X) K0 r- z7 b
- 3 */' o( ?4 q9 X# U) \% v" u
- 4void exti4_15_isr(void)# n* _- f% U: S2 i3 G0 ~9 ?
- 5{& ]4 q# R% `/ P7 C$ g' l8 V
- 6 exti_reset_request(EXTI11);4 {" h$ Z+ D, ?5 t: h
- 7
5 _. a9 }" Y9 ~' _9 }$ J - 8 gpio_toggle(GPIOC, GPIO12);
( I) j4 Z8 {7 C+ t. d! q - 9}
复制代码 " @5 F, s, w% n' ~
3 P8 M7 R9 M. _8 R1 z外部中断4-15共用中断函数exti4_15_isr; 6 e" W3 I" U$ e1 f
转载自:MakerInChina.cn
! `/ B7 i% |! t1 J |