基于兆易创新GD32F450IK芯片的流水灯程序,详解,对入门童鞋友好的讲解
2021/12/7 17:18:02
本文主要是介绍基于兆易创新GD32F450IK芯片的流水灯程序,详解,对入门童鞋友好的讲解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
介绍: 采用的芯片是GD32F450IK,芯片厂商为兆易创新,开发板是厂商寄过来的。采用的是keil5.25.
代码例程是在兆易创新官网下载的,链接如下。
http://gd32mcu.com/cn/download/0?kw=GD32F4
代码例程图片如下:
不多说,直接上代码讲解。
int main(void) { /* configure systick */ systick_config(); /* enable the LEDs GPIO clock */ rcu_periph_clock_enable(RCU_GPIOE); rcu_periph_clock_enable(RCU_GPIOF); /* configure LED1 GPIO port */ gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_2); gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2); /* reset LED1 GPIO pin */ gpio_bit_reset(GPIOE, GPIO_PIN_2); /* enable the LED2 GPIO clock */ /* configure LED2 GPIO port */ gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_3); gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3); /* reset LED2 GPIO pin */ gpio_bit_reset(GPIOE, GPIO_PIN_3); /* enable the LED3 GPIO clock */ /* configure LED3 GPIO port */ gpio_mode_set(GPIOF, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_10); gpio_output_options_set(GPIOF, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10); /* reset LED3 GPIO pin */ gpio_bit_reset(GPIOF, GPIO_PIN_10); while(1){ /* turn on LED1, turn off LED3 */ gpio_bit_set(GPIOE, GPIO_PIN_2); gpio_bit_reset(GPIOF, GPIO_PIN_10); delay_1ms(1000); /* turn on LED2, turn off LED1 */ gpio_bit_set(GPIOE, GPIO_PIN_3); gpio_bit_reset(GPIOE, GPIO_PIN_2); delay_1ms(1000); /* turn on LED3, turn off LED2 */ gpio_bit_set(GPIOF, GPIO_PIN_10); gpio_bit_reset(GPIOE, GPIO_PIN_3); delay_1ms(1000); } }
Systick_config:配置滴答定时器计数频率,直接配置为1khz,也就是1ms中断一次。
delay_ms就是基于此实现的,需要用到delay_ms函数就必须先配置滴答定时器,如果不太懂的童鞋,看下systick_config源码就能懂
rcu_periph_clock_enable(RCU_GPIOE);
rcu_periph_clock_enable(RCU_GPIOF);
看名字就知道是使能时钟!但是为什么要使能GPIOE和GPIOF的时钟呢?就要查看原理图,如下所示
可以看到PE2 PE3 PF10管脚连接的是LED灯,因此肯定是要配置对应GPIO端口的时钟
时钟配置完毕之后,就要配置GPIO管脚的参数了。
配置PE2管脚为输出模式,不上拉。
gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_2);
配置PE2为推挽输出,速度为50MHZ。
gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
也就是说从这俩函数看出来GPIO配置的参数有6个
-
GPIOE :端口号,如GPIOA GPIOB GPIOC GPIOD 等等,用到哪个端口就写哪个端口。
-
GPIO_PIN:GPIOE和GPIO_PIN_2,对应的管脚就为原理图上的PE2.
-
GPIO_MODE_OUTPUT: 需要的功能为点LED灯,也就是GPIO的输出高低电平,自然为输出模式。
-
GPIO_PUPD_NONE:不上拉,一般都为不上拉。
-
GPIO_OTYPE_PP:推挽输出,还有个模式为开漏输出,开漏输出需要上拉电阻才有驱动能力。一般都是推挽输出,先记着再说
-
GPIO_OSPEED_50MHZ:GPIO管脚的速度,就选个50MHZ够用了。
至此PE2管脚就配置完成了,PE2 和PF10管脚的配置代码与之一样就不赘述了。
gpio_bit_reset(GPIOF, GPIO_PIN_10);
这个函数的意思就是给PF10管脚拉低,也就是PF10管脚的电平为低电平。
从原理图上看出,PF10为低电平的时候,LED3的不亮的。
后续的代码主要用到三个函数:
gpio_bit_reset:刚刚讲过
gpio_bit_set:给对应的GPIO管脚拉高,给个高电平,从原理图上看,对应的GPIO拉高,led灯就会亮
delay_1ms(1000):延时函数,1000为1000ms,就是延时一秒。
因此通过gpio_bit_reset和gpio_bit_set拉高拉低管脚电平,led灯就会亮灭。通过delay_1ms可以改变亮灭的时间差,也就是频率的意思吧
这篇关于基于兆易创新GD32F450IK芯片的流水灯程序,详解,对入门童鞋友好的讲解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
- 2024-11-24细说敏捷:敏捷四会之每日站会
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解