原理图

image.png

测试代码

和32不同的地方在GPIO的配置,相关的库函数不一样。

  1. #include "gd32f10x.h" // Device header
  2. #include "systick.h"
  3. void Key_Init(void)
  4. {
  5. rcu_apb2_clock_config(RCU_APB2_CKAHB_DIV1); // APB2时钟分频设置 PC14属于APB2的外设
  6. rcu_periph_clock_enable(RCU_GPIOC); //使能RCU_GPIOC
  7. gpio_init(GPIOC, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
  8. }
  9. uint8_t Key_GetNum(void)
  10. {
  11. uint8_t KeyNum = 0;
  12. if (gpio_input_bit_get(GPIOC, GPIO_PIN_14) == 0)
  13. {
  14. Delay_ms(20);
  15. while (gpio_input_bit_get(GPIOC, GPIO_PIN_14) == 0);
  16. Delay_ms(20);
  17. KeyNum = 1;
  18. }
  19. if (gpio_input_bit_get(GPIOC, GPIO_PIN_14) == 0)
  20. {
  21. Delay_ms(20);
  22. while (gpio_input_bit_get(GPIOC, GPIO_PIN_14) == 0);
  23. Delay_ms(20);
  24. KeyNum = 2;
  25. }
  26. return KeyNum;
  27. }

比如上面按键的初始化中,时钟先选择分频系数rcu_apb2_clock_config之后,再使能rcu_periph_clock_enable。
GPIO的配置,也有了一个初始化函数gpio_init,不用一个一个的写结构体的参数。