当前位置:   article > 正文

GD32F407入坑指南 第二章

GD32F407入坑指南 第二章

前言

GD32系列文章均采用KEIL5(V5.35版本),芯片包及固件库版本V3.2.0,使用GD32F407VGT6芯片。

相关文档下载地址,后续更新内容也会放在这个文件路径中。

链接:https://pan.baidu.com/s/1qJEMaxVjLQHTjE1yh4df6Q 
提取码:amvj

1.原理图

本章主要是验证第一章创建的工程模板是否正确,通过点灯来验证一下,本章以PC6为例。PC6拉高LED点亮,PC6拉低LED熄灭。

 2.LED驱动编写

led.c

  1. #include "led.h"
  2. void led_init(void)
  3. {
  4. rcu_periph_clock_enable(RCU_GPIOC);
  5. rcu_periph_clock_enable(RCU_GPIOD);
  6. rcu_periph_clock_enable(RCU_GPIOE);
  7. /* configure led GPIO port */
  8. gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_6|GPIO_PIN_13);
  9. gpio_output_options_set(GPIOC, GPIO_OTYPE_PP,
  10. GPIO_OSPEED_50MHZ,GPIO_PIN_6|GPIO_PIN_13);
  11. //GPIO_BC(GPIOC) = GPIO_PIN_6|GPIO_PIN_13;
  12. gpio_bit_reset(GPIOC,GPIO_PIN_6|GPIO_PIN_13);
  13. /* configure led GPIO port */
  14. gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_4|GPIO_PIN_5);
  15. gpio_output_options_set(GPIOD, GPIO_OTYPE_PP,
  16. GPIO_OSPEED_50MHZ,GPIO_PIN_4|GPIO_PIN_5);
  17. //GPIO_BC(GPIOD) = GPIO_PIN_4|GPIO_PIN_5;
  18. gpio_bit_reset(GPIOD,GPIO_PIN_4|GPIO_PIN_5);
  19. /* configure led GPIO port */
  20. gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_6);
  21. gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_6);
  22. //GPIO_BC(GPIOE) = GPIO_PIN_6;
  23. gpio_bit_reset(GPIOE,GPIO_PIN_6);
  24. }

led.h

  1. #ifndef __LED_H
  2. #define __LED_H
  3. #include "gd32f4xx.h"
  4. #define LED1_ON GPIO_BOP(GPIOC) = GPIO_PIN_6
  5. #define LED1_OFF GPIO_BC(GPIOC) = GPIO_PIN_6
  6. #define LED1_Toggle GPIO_TG(GPIOC) = GPIO_PIN_6
  7. #define LED2_ON GPIO_BOP(GPIOC) = GPIO_PIN_13
  8. #define LED2_OFF GPIO_BC(GPIOC) = GPIO_PIN_13
  9. #define LED2_Toggle GPIO_TG(GPIOC) = GPIO_PIN_13
  10. #define LED3_ON GPIO_BOP(GPIOE) = GPIO_PIN_6
  11. #define LED3_OFF GPIO_BC(GPIOE) = GPIO_PIN_6
  12. #define LED3_Toggle GPIO_TG(GPIOE) = GPIO_PIN_6
  13. #define LED4_ON GPIO_BOP(GPIOD) = GPIO_PIN_4
  14. #define LED4_OFF GPIO_BC(GPIOD) = GPIO_PIN_4
  15. #define LED4_Toggle GPIO_TG(GPIOD) = GPIO_PIN_4
  16. #define LED5_ON GPIO_BOP(GPIOD) = GPIO_PIN_5
  17. #define LED5_OFF GPIO_BC(GPIOD) = GPIO_PIN_5
  18. #define LED5_Toggle GPIO_TG(GPIOD) = GPIO_PIN_5
  19. void led_init(void);
  20. #endif

main.c

  1. #include "gd32f4xx.h"
  2. #include "systick.h"
  3. #include "led.h"
  4. int main(void)
  5. {
  6. systick_config();
  7. led_init();
  8. gpio_bit_set(GPIOC,GPIO_PIN_6);
  9. while(1)
  10. {
  11. }
  12. }

在main.c中添加led的初始化函数,将PC6端口设置为高电平。编译下载到开发板中,LED灯点亮,实验成功,同时也说明第一章的工程模板没有问题。

3.流水灯实验

简单修改前面的代码,即可实现流水灯的效果。

delay_1ms()函数是GD32官方为我们实现的1ms延时,使用SYSTick实现的,类似于STM32的HAL_Delay()函数功能。

  1. #include "gd32f4xx.h"
  2. #include "systick.h"
  3. #include "led.h"
  4. int main(void)
  5. {
  6. systick_config();
  7. led_init();
  8. while(1)
  9. {
  10. LED1_ON;
  11. delay_1ms(500);
  12. LED1_OFF;
  13. LED2_ON;
  14. delay_1ms(500);
  15. LED2_OFF;
  16. LED3_ON;
  17. delay_1ms(500);
  18. LED3_OFF;
  19. LED4_ON;
  20. delay_1ms(500);
  21. LED4_OFF;
  22. LED5_ON;
  23. delay_1ms(500);
  24. LED5_OFF;
  25. }
  26. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/655897
推荐阅读
相关标签
  

闽ICP备14008679号