回答

收藏

GD32方案分享③:按键和GPIO

GD32 GD32 3917 人阅读 | 0 人回复 | 2017-05-25

本帖最后由 何昌昕 于 2017-5-25 21:41 编辑

  1. #include "gpio.h"

  2. void LED_Init(void)
  3. {
  4.     //使能时钟
  5.     rcu_periph_clock_enable(RCU_GPIOB);
  6.     rcu_periph_clock_enable(RCU_GPIOD);
  7.      //设置模式
  8.     gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_3|GPIO_PIN_4);
  9.     gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3|GPIO_PIN_4);
  10.         
  11.     gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_7);
  12.     gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_7);
  13.     //清零
  14.     GPIO_BC(GPIOB) = GPIO_PIN_3|GPIO_PIN_4;
  15.     GPIO_BC(GPIOD) = GPIO_PIN_7;
  16. }

  17. void LED_Set(uint8_t state)
  18. {
  19.         if(state)GPIO_BOP(GPIOB) = GPIO_PIN_3|GPIO_PIN_4;
  20.                 else   GPIO_BC(GPIOB) = GPIO_PIN_3|GPIO_PIN_4;
  21. }

  22. void LED_Troggle(void)
  23. {
  24.         GPIO_TG(GPIOB) = GPIO_PIN_3|GPIO_PIN_4;
  25.         GPIO_TG(GPIOD) = GPIO_PIN_7;
  26. }

  27. void KEY_Init(void)
  28. {
  29.     rcu_periph_clock_enable(RCU_GPIOA);
  30.     rcu_periph_clock_enable(RCU_GPIOE);
  31.     rcu_periph_clock_enable(RCU_SYSCFG);
  32.     gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0);     
  33.     gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0|GPIO_PIN_1);     
  34. }

  35. void KEY_Init_EXTI(void)
  36. {
  37.     rcu_periph_clock_enable(RCU_GPIOA);
  38.     rcu_periph_clock_enable(RCU_SYSCFG);

  39.     gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0);

  40.     nvic_irq_enable(EXTI10_15_IRQn, 2U, 0U);
  41.     syscfg_exti_line_config(EXTI_SOURCE_GPIOC,EXTI_SOURCE_PIN13);
  42.     exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
  43.     exti_interrupt_flag_clear(EXTI_13);     
  44. }
复制代码

  1. #ifndef GPIO_H
  2. #define GPIO_H

  3. #include "gd32f4xx_gpio.h"
  4. #include "common.h"

  5. void LED_Init(void);
  6. void LED_Set(uint8_t state);
  7. void LED_Troggle(void);
  8. void KEY_Init(void);
  9. void KEY_Init_EXTI(void);

  10. #define KEY1_State gpio_input_bit_get(GPIOA, GPIO_PIN_0)
  11. #define KEY2_State gpio_input_bit_get(GPIOE, GPIO_PIN_1)
  12. #define KEY3_State gpio_input_bit_get(GPIOE, GPIO_PIN_0)

  13. #endif
复制代码
单片机不足的是每次下载程序后不能自动复位,需要手动复位。
  1. int main(void)
  2. {
  3.     systick_config();
  4.    
  5.     UART_Init(USART0,115200);
  6.     LED_Init();
  7.     KEY_Init();

  8.     while(1)
  9.          {
  10.                     LED_Troggle();
  11.                     delay_1ms(200);
  12.                     printf("综合测试实验\r\n");
  13.                     printf("%d %d %d\r\n",KEY1_State,KEY2_State,KEY3_State);
  14.     }
复制代码
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条