GD32F303跑马灯代码
时间: 2023-07-09 08:30:10 浏览: 58
以下是基于GD32F303芯片的跑马灯代码:
```c
#include "gd32f303.h"
#include "systick.h"
#define LED_PIN1 GPIO_PIN_0
#define LED_PORT1 GPIOA
#define LED_PIN2 GPIO_PIN_1
#define LED_PORT2 GPIOA
#define LED_PIN3 GPIO_PIN_2
#define LED_PORT3 GPIOA
#define LED_PIN4 GPIO_PIN_3
#define LED_PORT4 GPIOA
int main(void)
{
/* enable GPIO clock */
rcu_periph_clock_enable(RCU_GPIOA);
/* configure LED pins as output */
gpio_mode_set(LED_PORT1, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED_PIN1);
gpio_output_options_set(LED_PORT1, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED_PIN1);
gpio_mode_set(LED_PORT2, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED_PIN2);
gpio_output_options_set(LED_PORT2, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED_PIN2);
gpio_mode_set(LED_PORT3, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED_PIN3);
gpio_output_options_set(LED_PORT3, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED_PIN3);
gpio_mode_set(LED_PORT4, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED_PIN4);
gpio_output_options_set(LED_PORT4, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED_PIN4);
/* initialize SysTick timer */
if (SysTick_Config(SystemCoreClock / 1000)) {
/* capture error */
while (1);
}
uint8_t ledIndex = 0;
while (1) {
/* turn off all LEDs */
gpio_bit_reset(LED_PORT1, LED_PIN1);
gpio_bit_reset(LED_PORT2, LED_PIN2);
gpio_bit_reset(LED_PORT3, LED_PIN3);
gpio_bit_reset(LED_PORT4, LED_PIN4);
/* turn on current LED */
switch (ledIndex) {
case 0:
gpio_bit_set(LED_PORT1, LED_PIN1);
break;
case 1:
gpio_bit_set(LED_PORT2, LED_PIN2);
break;
case 2:
gpio_bit_set(LED_PORT3, LED_PIN3);
break;
case 3:
gpio_bit_set(LED_PORT4, LED_PIN4);
break;
default:
break;
}
/* move to next LED */
ledIndex++;
if (ledIndex > 3) {
ledIndex = 0;
}
/* delay for 500ms */
delay_1ms(500);
}
}
```
该代码使用GPIOA0-A3口控制4个LED灯,并通过SysTick计时器实现跑马灯效果。在循环中,每隔500ms轮流点亮4个LED灯,通过控制LED的亮灭实现跑马灯效果。
需要注意的是,此代码中的SysTick_Config函数需要在systick.h头文件中进行声明。