打印

GD32F3x0系列-流水灯控制

[复制链接]
1392|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 chenyilin 于 2018-10-13 17:05 编辑

资料来源于微信公众号“life_and_family”,更多相关资料可以关注下该公众号

使用IC GD32F330RBT6 ,固件库版本 V1.0.0, firmware for GD32F3x0
该代码使用的GPIO控制LED灯,实现流水灯操作,对应的引脚如下图:

#include"gd32f3x0.h"
#include"gd32f3x0_libopt.h"
#include<stdio.h>

//通过修改此处可以改变对应控制的IO口
/* eval board lowlayer led */
#define LEDn                             4U

#defineLED1_PIN                        GPIO_PIN_10
#defineLED1_GPIO_PORT                   GPIOC
#defineLED1_GPIO_CLK                   RCU_GPIOC

#defineLED2_PIN                        GPIO_PIN_11
#defineLED2_GPIO_PORT                   GPIOC
#defineLED2_GPIO_CLK                   RCU_GPIOC

#defineLED3_PIN                        GPIO_PIN_12
#defineLED3_GPIO_PORT                   GPIOC
#defineLED3_GPIO_CLK                   RCU_GPIOC

#defineLED4_PIN                        GPIO_PIN_2
#defineLED4_GPIO_PORT                   GPIOC
#defineLED4_GPIO_CLK                   RCU_GPIOC

typedef enum
{
    LED1 = 0,
    LED2 = 1,
    LED3 = 2,
    LED4 = 3
}led_typedef_enum;
staticrcu_periph_enum GPIO_CLK[LEDn] = {LED1_GPIO_CLK,
                                        LED2_GPIO_CLK,
                                        LED3_GPIO_CLK,
                                        LED4_GPIO_CLK};
/* private variables*/
static uint32_tGPIO_PORT[LEDn]       = {LED1_GPIO_PORT,
                                        LED2_GPIO_PORT,
                                        LED3_GPIO_PORT,
                                        LED4_GPIO_PORT};

static uint32_tGPIO_PIN[LEDn]        = {LED1_PIN,
                                        LED2_PIN,
                                        LED3_PIN,
                                        LED4_PIN};

voidgd_eval_led_init(led_typedef_enum lednum)
{
    /* enable the led clock */
    rcu_periph_clock_enable(GPIO_CLK[lednum]);
    /* configure led GPIO port */
    gpio_mode_set(GPIO_PORT[lednum],GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN[lednum]);
    gpio_output_options_set(GPIO_PORT[lednum],GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN[lednum]);

    GPIO_BC(GPIO_PORT[lednum]) =GPIO_PIN[lednum];
}

/*!
    \brief     turn on selected led
    \param[in] lednum: specify the led to be turned on
      \arg        LED1
      \arg        LED2
      \arg        LED3
      \arg        LED4
    \param[out] none
    \retval    none
*/

voidgd_eval_led_on(led_typedef_enum lednum)
{
    GPIO_BOP(GPIO_PORT[lednum]) =GPIO_PIN[lednum];
}

/*!
    \brief     turn off selected led
    \param[in] lednum: specify the led to be turned off
      \arg        LED1
      \arg        LED2
      \arg        LED3
      \arg        LED4
    \param[out] none
    \retval    none
*/

voidgd_eval_led_off(led_typedef_enum lednum)
{
    GPIO_BC(GPIO_PORT[lednum]) =GPIO_PIN[lednum];
}
//延时函数
void delay()
{
unsignedint x,y;
for(x=0;x<1000;x++)
for(y=0;y<1000;y++);
}
/*!
    \brief     main function
    \param[in] none
    \param[out] none
    \retval    none
*/
int main(void)
{
//LED 初始化函数
    gd_eval_led_init(LED1);
    gd_eval_led_init(LED2);
    gd_eval_led_init(LED3);
    gd_eval_led_init(LED4);

    while(1){
        /* turn on led1, turn off led4*/
        gd_eval_led_on(LED1);//开启LED函数
        gd_eval_led_off(LED4);//关闭LED 函数
        delay();
        /* turn on led2, turn off led1*/
        gd_eval_led_on(LED2);
        gd_eval_led_off(LED1);
        delay();
        /* turn on led3, turn off led2*/
        gd_eval_led_on(LED3);
        gd_eval_led_off(LED2);
        delay();
        /* turn on led4, turn off led3*/
        gd_eval_led_on(LED4);
        gd_eval_led_off(LED3);
        delay();
    }
}

资料来源于微信公众号“life_and_family”,更多相关资料可以关注下该公众号

沙发
gaoke231| | 2018-10-25 22:26 | 只看该作者
简单的操作IO就可以了,入门级操作

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:GigaDevice
简介:兆易创新科技集团股份有限公司 (股票代码603986) 是全球领先的Fabless芯片供应商,公司成立于2005年4月,总部设于中国北京

17

主题

55

帖子

3

粉丝