GD32系列海棠派学习日志1_点亮LED灯

学习目标:

  • 点亮LED灯运行

学习内容:

开发板上有4个LED灯,接口如图所示
在这里插入图片描述
GD32定义接口方法比较简洁:

在这里插入图片描述
led.h文件里面介绍了相关操作函数,分别是初始化,点亮,熄灭和翻转函数。
在这里插入图片描述
其实就是对IO口的置高、置低和翻转,在driver_public.h中有相关描述:
在这里插入图片描述

函数参数结构体定义如图所示,主要是名称、引脚、引脚模式、还有callback函数等等。
在这里插入图片描述
主程序通过翻转函数以及LCD屏幕进行显示


学习时间:

2024.5.29 1小时


学习产出:

灯亮了,我的世界也亮了

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是GD32F470使用滴答定时器流动点4个LED的代码示例: ```c #include "gd32f4xx.h" #define LED1_PIN GPIO_PIN_0 #define LED1_PORT GPIOC #define LED2_PIN GPIO_PIN_1 #define LED2_PORT GPIOC #define LED3_PIN GPIO_PIN_2 #define LED3_PORT GPIOC #define LED4_PIN GPIO_PIN_3 #define LED4_PORT GPIOC void gpio_init(void); void timer_init(void); int main(void) { gpio_init(); timer_init(); while(1); return 0; } void gpio_init(void) { rcu_periph_clock_enable(RCU_GPIOC); gpio_init(LED1_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED1_PIN); gpio_init(LED2_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED2_PIN); gpio_init(LED3_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED3_PIN); gpio_init(LED4_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED4_PIN); } void timer_init(void) { rcu_periph_clock_enable(RCU_TIMER6); timer_deinit(TIMER6); timer_parameter_struct timer_init_parameter; timer_init_parameter.prescaler = 7199; // 72MHz / (7199 + 1) = 10KHz timer_init_parameter.alignedmode = TIMER_COUNTER_EDGE; timer_init_parameter.counterdirection = TIMER_COUNTER_UP; timer_init_parameter.period = 999; // 10KHz / (999 + 1) = 10Hz timer_init_parameter.clockdivision = TIMER_CKDIV_DIV1; timer_init_parameter.repetitioncounter = 0; timer_init(TIMER6, &timer_init_parameter); timer_interrupt_enable(TIMER6, TIMER_INT_UP); nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); nvic_irq_enable(TIMER6_IRQn, 0, 0); timer_enable(TIMER6); } void TIMER6_IRQHandler(void) { if (timer_interrupt_flag_get(TIMER6, TIMER_INT_UP)) { timer_interrupt_flag_clear(TIMER6, TIMER_INT_UP); static uint8_t led_index = 0; switch (led_index) { case 0: gpio_bit_set(LED1_PORT, LED1_PIN); gpio_bit_reset(LED2_PORT, LED2_PIN); gpio_bit_reset(LED3_PORT, LED3_PIN); gpio_bit_reset(LED4_PORT, LED4_PIN); break; case 1: gpio_bit_reset(LED1_PORT, LED1_PIN); gpio_bit_set(LED2_PORT, LED2_PIN); gpio_bit_reset(LED3_PORT, LED3_PIN); gpio_bit_reset(LED4_PORT, LED4_PIN); break; case 2: gpio_bit_reset(LED1_PORT, LED1_PIN); gpio_bit_reset(LED2_PORT, LED2_PIN); gpio_bit_set(LED3_PORT, LED3_PIN); gpio_bit_reset(LED4_PORT, LED4_PIN); break; case 3: gpio_bit_reset(LED1_PORT, LED1_PIN); gpio_bit_reset(LED2_PORT, LED2_PIN); gpio_bit_reset(LED3_PORT, LED3_PIN); gpio_bit_set(LED4_PORT, LED4_PIN); break; default: break; } led_index++; if (led_index >= 4) { led_index = 0; } } } ``` 该代码使用了定时器6,并以10Hz的频率触发定时器中断。在中断处理函数中,使用一个静态变量led_index表示当前点LED,每次中断时对它进行更新,并根据其值点对应的LED。最后,将led_index加1,如果超过4则重新从0开始。这样就实现了流动点4个LED的效果。注意,需要在主函数中初始化GPIO和定时器,并在定时器中断函数中清除中断标志位。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值