查看: 3034|回复: 0

GD32方案分享③:按键和GPIO

[复制链接]
  • TA的每日心情

    2017-11-27 16:33
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2017-5-25 21:40:19 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 何昌昕 于 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.     }
    复制代码
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 08:07 , Processed in 0.116724 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.