其实GD32的编程风格根STM32很大不同的

[复制链接]
280|11
 楼主 | 2018-3-25 17:49 | 显示全部楼层 |阅读模式
我们看看这个GPIO点灯的例子
  1. /*!
  2.     \file  main.c
  3.     \brief running led
  4. */

  5. /*
  6.     Copyright (C) 2017 GigaDevice

  7.     2014-12-26, V1.0.0, platform for GD32F1x0(x=3,5)
  8.     2016-01-15, V2.0.0, platform for GD32F1x0(x=3,5,7,9)
  9.     2016-04-30, V3.0.0, firmware update for GD32F1x0(x=3,5,7,9)
  10.     2017-06-19, V3.1.0, firmware update for GD32F1x0(x=3,5,7,9)
  11. */

  12. #include "gd32f1x0.h"
  13. #include "gd32f1x0_libopt.h"
  14. #include "gd32f1x0_eval.h"
  15. #include "systick.h"
  16. #include <stdio.h>

  17. /*!
  18.     \brief      main function
  19.     \param[in]  none
  20.     \param[out] none
  21.     \retval     none
  22. */
  23. int main(void)
  24. {
  25.     systick_config();
  26.     gd_eval_led_init(LED1);
  27.     gd_eval_led_init(LED2);
  28.     gd_eval_led_init(LED3);
  29.     gd_eval_led_init(LED4);

  30.     while(1){
  31.         /* turn on led1, turn off led4 */
  32.         gd_eval_led_on(LED1);
  33.         gd_eval_led_off(LED4);
  34.         delay_1ms(1000);
  35.         /* turn on led2, turn off led1 */
  36.         gd_eval_led_on(LED2);
  37.         gd_eval_led_off(LED1);
  38.         delay_1ms(1000);
  39.         /* turn on led3, turn off led2 */
  40.         gd_eval_led_on(LED3);
  41.         gd_eval_led_off(LED2);
  42.         delay_1ms(1000);
  43.         /* turn on led4, turn off led3 */
  44.         gd_eval_led_on(LED4);
  45.         gd_eval_led_off(LED3);
  46.         delay_1ms(1000);
  47.     }
  48. }
复制代码
很简洁,貌似你看不到底层的东西。
 楼主 | 2018-3-25 17:50 | 显示全部楼层
而开始的系统初始化在另外一个文件
  1. /*!
  2.     \file  systick.c
  3.     \brief the systick configuration file
  4. */

  5. /*
  6.     Copyright (C) 2017 GigaDevice

  7.     2014-12-26, V1.0.0, platform GD32F1x0(x=3,5)
  8.     2016-01-15, V2.0.0, platform GD32F1x0(x=3,5,7,9)
  9.     2016-04-30, V3.0.0, firmware update for GD32F1x0(x=3,5,7,9)
  10.     2017-06-19, V3.1.0, firmware update for GD32F1x0(x=3,5,7,9)
  11. */

  12. #include "gd32f1x0.h"
  13. #include "systick.h"

  14. static uint32_t delay;

  15. /*!
  16.     \brief      configure systick
  17.     \param[in]  none
  18.     \param[out] none
  19.     \retval     none
  20. */
  21. void systick_config(void)
  22. {
  23.     /* setup systick timer for 1000Hz interrupts  */
  24.     if (SysTick_Config(SystemCoreClock / 1000)){
  25.         /* capture error */
  26.         while (1);
  27.     }
  28.     /* configure the systick handler priority */
  29.     NVIC_SetPriority(SysTick_IRQn, 0x00);
  30. }

  31. /*!
  32.     \brief      delay a time in milliseconds
  33.     \param[in]  count: count in milliseconds
  34.     \param[out] none
  35.     \retval     none
  36. */
  37. void delay_1ms(uint32_t count)
  38. {
  39.     delay = count;

  40.     while(0 != delay);
  41. }

  42. /*!
  43.     \brief      delay decrement
  44.     \param[in]  none
  45.     \param[out] none
  46.     \retval     none
  47. */
  48. void delay_decrement(void)
  49. {
  50.     if (0 != delay){
  51.         delay--;
  52.     }
  53. }
复制代码

评论

CharryW 2018-4-3 14:41 回复TA
这个不是系统初始化,初始化在启动文件中main之前已经执行过了 
 楼主 | 2018-3-25 17:52 | 显示全部楼层
而关于硬件功能的转换宏在另外一个文件夹的文件里
  1. /*!
  2.     \file  gd32f1x0_eval.h
  3.     \brief definitions for GD32f1x0_EVAL's Leds, Keys and COM ports hardware resources
  4. */

  5. /*
  6.     Copyright (C) 2017 GigaDevice

  7.     2014-12-26, V1.0.0, platform GD32F1x0(x=3,5)
  8.     2016-01-15, V2.0.0, platform GD32F1x0(x=3,5,7,9)
  9.     2016-04-30, V3.0.0, firmware update for GD32F1x0(x=3,5,7,9)
  10.     2017-06-19, V3.1.0, firmware update for GD32F1x0(x=3,5,7,9)
  11. */

  12. #ifndef GD32F1X0_EVAL_H
  13. #define GD32F1X0_EVAL_H

  14. #ifdef cplusplus
  15. extern "C" {
  16. #endif

  17. #include "gd32f1x0.h"

  18. /* exported types */
  19. typedef enum
  20. {
  21.     LED1 = 0,
  22.     LED2 = 1,
  23.     LED3 = 2,
  24.     LED4 = 3
  25. } led_typedef_enum;

  26. typedef enum
  27. {
  28.     KEY_WAKEUP = 0,
  29.     KEY_TAMPER = 1,
  30. #ifdef GD32F130_150
  31.     KEY_USER = 2
  32. #endif
  33. } key_typedef_enum;

  34. typedef enum
  35. {
  36.     KEY_MODE_GPIO = 0,
  37.     KEY_MODE_EXTI = 1
  38. } keymode_typedef_enum;

  39. /* define for GD32130_150 eval board */
  40. #if defined(GD32F130_150)

  41. /* GD32130_150 eval low layer led */
  42. #define LEDn                             4

  43. #define LED1_PIN                         GPIO_PIN_10
  44. #define LED1_GPIO_PORT                   GPIOC
  45. #define LED1_GPIO_CLK                    RCU_GPIOC
  46.   
  47. #define LED2_PIN                         GPIO_PIN_11
  48. #define LED2_GPIO_PORT                   GPIOC
  49. #define LED2_GPIO_CLK                    RCU_GPIOC
  50.   
  51. #define LED3_PIN                         GPIO_PIN_12
  52. #define LED3_GPIO_PORT                   GPIOC
  53. #define LED3_GPIO_CLK                    RCU_GPIOC
  54.   
  55. #define LED4_PIN                         GPIO_PIN_2
  56. #define LED4_GPIO_PORT                   GPIOD
  57. #define LED4_GPIO_CLK                    RCU_GPIOD

  58. /* GD32130_150 eval low layer button */  
  59. #define KEYn                             3

  60. /* tamper push-button */
  61. #define TAMPER_KEY_PIN                   GPIO_PIN_13
  62. #define TAMPER_KEY_GPIO_PORT             GPIOC
  63. #define TAMPER_KEY_GPIO_CLK              RCU_GPIOC
  64. #define TAMPER_KEY_EXTI_LINE             EXTI_13
  65. #define TAMPER_KEY_EXTI_PORT_SOURCE      EXTI_SOURCE_GPIOC
  66. #define TAMPER_KEY_EXTI_PIN_SOURCE       EXTI_SOURCE_PIN13
  67. #define TAMPER_KEY_EXTI_IRQn             EXTI4_15_IRQn

  68. /* wakeup push-button */
  69. #define WAKEUP_KEY_PIN                   GPIO_PIN_0
  70. #define WAKEUP_KEY_GPIO_PORT             GPIOA
  71. #define WAKEUP_KEY_GPIO_CLK              RCU_GPIOA
  72. #define WAKEUP_KEY_EXTI_LINE             EXTI_0
  73. #define WAKEUP_KEY_EXTI_PORT_SOURCE      EXTI_SOURCE_GPIOA
  74. #define WAKEUP_KEY_EXTI_PIN_SOURCE       EXTI_SOURCE_PIN0
  75. #define WAKEUP_KEY_EXTI_IRQn             EXTI0_1_IRQn  

  76. /* user push-button */
  77. #define USER_KEY_PIN                     GPIO_PIN_7
  78. #define USER_KEY_GPIO_PORT               GPIOF
  79. #define USER_KEY_GPIO_CLK                RCU_GPIOF
  80. #define USER_KEY_EXTI_LINE               EXTI_7
  81. #define USER_KEY_EXTI_PORT_SOURCE        EXTI_SOURCE_GPIOF
  82. #define USER_KEY_EXTI_PIN_SOURCE         EXTI_SOURCE_PIN7
  83. #define USER_KEY_EXTI_IRQn               EXTI4_15_IRQn

  84. /* GD32130_150 eval low layer COM */
  85. #define COMn                             1

  86. /* definition for COM 1, connected to USART0 */
  87. #define EVAL_COM1                        USART0
  88. #define EVAL_COM1_CLK                    RCU_USART0

  89. #define EVAL_COM1_TX_PIN                 GPIO_PIN_9
  90. #define EVAL_COM1_RX_PIN                 GPIO_PIN_10

  91. #define EVAL_COM_GPIO_PORT               GPIOA
  92. #define EVAL_COM_GPIO_CLK                RCU_GPIOA
  93. #define EVAL_COM_AF                      GPIO_AF_1

  94. /* define for GD32F170_190 eval board */
  95. #elif defined(GD32F170_190)

  96. /* GD32170_190 eval low layer led */
  97. #define LEDn                             4

  98. #define LED1_PIN                         GPIO_PIN_11
  99. #define LED1_GPIO_PORT                   GPIOA
  100. #define LED1_GPIO_CLK                    RCU_GPIOA
  101.   
  102. #define LED2_PIN                         GPIO_PIN_12
  103. #define LED2_GPIO_PORT                   GPIOA
  104. #define LED2_GPIO_CLK                    RCU_GPIOA
  105.   
  106. #define LED3_PIN                         GPIO_PIN_6
  107. #define LED3_GPIO_PORT                   GPIOB
  108. #define LED3_GPIO_CLK                    RCU_GPIOB
  109.   
  110. #define LED4_PIN                         GPIO_PIN_7
  111. #define LED4_GPIO_PORT                   GPIOB
  112. #define LED4_GPIO_CLK                    RCU_GPIOB

  113. /* GD32170_190 eval low layer button */  
  114. #define KEYn                             2

  115. /* tamper push-button */
  116. #define TAMPER_KEY_PIN                   GPIO_PIN_13
  117. #define TAMPER_KEY_GPIO_PORT             GPIOC
  118. #define TAMPER_KEY_GPIO_CLK              RCU_GPIOC
  119. #define TAMPER_KEY_EXTI_LINE             EXTI_13
  120. #define TAMPER_KEY_EXTI_PORT_SOURCE      EXTI_SOURCE_GPIOC
  121. #define TAMPER_KEY_EXTI_PIN_SOURCE       EXTI_SOURCE_PIN13
  122. #define TAMPER_KEY_EXTI_IRQn             EXTI4_15_IRQn

  123. /* wakeup push-button */
  124. #define WAKEUP_KEY_PIN                   GPIO_PIN_0
  125. #define WAKEUP_KEY_GPIO_PORT             GPIOA
  126. #define WAKEUP_KEY_GPIO_CLK              RCU_GPIOA
  127. #define WAKEUP_KEY_EXTI_LINE             EXTI_0
  128. #define WAKEUP_KEY_EXTI_PORT_SOURCE      EXTI_SOURCE_GPIOA
  129. #define WAKEUP_KEY_EXTI_PIN_SOURCE       EXTI_SOURCE_PIN0
  130. #define WAKEUP_KEY_EXTI_IRQn             EXTI0_1_IRQn  

  131. /* GD32170_190 eval low layer COM */
  132. #define COMn                             2

  133. /* definition for COM 1, connected to USART0 */
  134. #define EVAL_COM1                        USART0
  135. #define EVAL_COM1_CLK                    RCU_USART0
  136. /* definition for COM 2, connected to USART1 */
  137. #define EVAL_COM2                        USART1
  138. #define EVAL_COM2_CLK                    RCU_USART1

  139. #define EVAL_COM1_TX_PIN                 GPIO_PIN_9
  140. #define EVAL_COM1_RX_PIN                 GPIO_PIN_10
  141. #define EVAL_COM2_TX_PIN                 GPIO_PIN_2
  142. #define EVAL_COM2_RX_PIN                 GPIO_PIN_3

  143. #define EVAL_COM_GPIO_PORT               GPIOA
  144. #define EVAL_COM_GPIO_CLK                RCU_GPIOA
  145. #define EVAL_COM_AF                      GPIO_AF_1

  146. #else
  147.     #error "Please define GD32F130_150 or GD32F170_190"
  148. #endif

  149. /* function declarations */
  150. /* configures led GPIO */
  151. void gd_eval_led_init          (led_typedef_enum lednum);
  152. /* turn on selected led */
  153. void gd_eval_led_on            (led_typedef_enum lednum);
  154. /* turn off selected led */
  155. void gd_eval_led_off           (led_typedef_enum lednum);
  156. /* toggle the selected led */
  157. void gd_eval_led_toggle        (led_typedef_enum lednum);
  158. /* configure key */
  159. void gd_eval_key_init          (key_typedef_enum keynum, keymode_typedef_enum key_mode);
  160. /* return the selected button state */
  161. uint8_t gd_eval_key_state_get   (key_typedef_enum keynum);
  162. /* configure COM port */
  163. void gd_eval_com_init(uint32_t COM);

  164. #ifdef cplusplus
  165. }
  166. #endif

  167. #endif /* GD32F1x0_EVAL_H */

复制代码
 楼主 | 2018-3-25 17:53 | 显示全部楼层
所以这个资源包的结构,一定要先了解,了解他们的习性和套路,才好驾驭他们的芯片。
| 2018-3-25 21:34 | 显示全部楼层
初始化部分还是特重要的
| 2018-3-26 21:30 | 显示全部楼层
这部分程序的分享还是比较不错的
| 2018-3-27 09:38 | 显示全部楼层
差不多吧,现在大家基本上都同质化了
| 2018-3-27 09:55 | 显示全部楼层
库基本都一样,这个是应用层,那个根据个人来定的
 楼主 | 2018-3-28 09:31 | 显示全部楼层
ah9b87 发表于 2018-3-27 09:38
差不多吧,现在大家基本上都同质化了

是的,能看的出,不少风格借鉴了STD .
| 2018-3-31 18:16 | 显示全部楼层
这两也没看出啥不同的啊
| 2018-4-3 11:10 | 显示全部楼层
是这样的
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

分享 快速回复 返回顶部 返回列表