使用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
- 1upload_protocol = cmsis-dap
4 X4 t. Y0 E" Z) F - 2debug_tool = cmsis-dap
复制代码
9 |) L% e, [% ^6 {. a. e8 J5 t+ z* ^8 [! f7 V' |) s
2 轮询方式使用按键设置GPIO为输入模式 ( ]: `. Y; A- [& t* i
- 1 //set gpio input button; Q" a9 |" }7 V* E/ R5 p+ J( s
- 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
- 1while (1)
* k& o$ C% p" F8 g( q - 2{ Y/ M8 P. t3 A
- 3 if(gpio_get(GPIOC,GPIO11)){# d+ r% w7 B: E* p1 l- p0 w1 ?# Q
- 4 gpio_toggle(GPIOC,GPIO12);
7 u8 f; m) I8 @* `$ V$ R - 5 } / D( U, Z0 j0 E
- 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
- 1void button_setup(void)
4 I6 o: v, H9 U5 M" N$ V, r - 2{
9 ]# B" e! f; W# q0 ~0 _! j- @ - 3 rcc_periph_clock_enable(RCC_GPIOC);, T \# l# ]$ `1 N9 T* \1 u
- 4
2 l8 O e& L8 W! ~* r; f+ i - 5 nvic_enable_irq(NVIC_EXTI4_15_IRQ);9 N/ D. v* {2 o0 u0 V/ f% X
- 6
( R; |% R( u( l! T& C - 7 gpio_mode_setup(GPIOC,
# ?( r! P; E5 D0 A - 8 GPIO_MODE_INPUT,$ g4 D' v; S: a7 A3 p+ s
- 9 GPIO_PUPD_NONE,. j) n& ]' |6 D* {
- 10 GPIO11);
+ k2 K+ W: q* Q5 J - 11 Y: M4 A7 b/ A. n
- 12 exti_select_source(EXTI11, GPIOC);$ S8 B/ ]+ C. k9 @9 v3 R2 \
- 13 exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);* S8 M1 M& i4 Y( f
- 14 exti_enable_request(EXTI11);3 w$ E4 o& _# {0 S- d, o
- 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
- 1/**, g0 {( f7 ~9 V. ~4 O, C
- 2 * @brief EXTI4-15 Interrupt service routine.6 N' U' k6 Z4 Q; w" |* A! k1 B7 |
- 3 */
{4 ~' p* e5 r - 4void exti4_15_isr(void)
6 J' k2 J3 o# Y$ D' l9 n - 5{
6 V& i) h6 ~) ` - 6 exti_reset_request(EXTI11);
5 A W; Q& R! { - 7. A/ J) r1 v: O+ ]
- 8 gpio_toggle(GPIOC, GPIO12);, M6 c1 d) N y& b( u* s
- 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
|