【GD32L233C-START评测】流水灯Demo运行
[复制链接]
本帖最后由 YangTwo 于 2022-2-25 12:27 编辑
上一篇测评主要关注在板卡自身资源和相关开发资源的整理上,这次开始熟悉GD32的GPIO控制,尤其是板载LED灯的控制方面。
板载的4个LED小灯分别由PORT A与 PORT C的相关引脚进行控制,这可以从板卡的手册上获取。
板子上电后,电脑可以自动识别并安装CMSIS-DAP,然后LED1,LED2,LED3和LED4依次亮起。
为了方便研究官方流水灯代码,我们可以把demo拷贝到自己的工作文件夹。
双击项目名称,然后打开maic.c文件
关于delay_1ms()这个函数,由于系统滴答时钟定时器被设置为1000Hz,即1ms,所以每次中断产生后,都会进入SysTick_Handler()这个ISR,在程序体中,判断要延迟的时间有没有达到。如果没有,延迟目标减1;如果达到了,则delay_1ms()这个函数可以继续往下执行。
接下来就是魔改时间了,有次警车从身边经过,灯光闪闪很快,但是还是看出了一些顺序,这次咱也来模拟一下。
#include "gd32l23x.h"
#include "systick.h"
/*!
\brief main function
\param[in] none
\param[out] none
\retval none
*/
int main(void)
{
systick_config();
/* enable the LED GPIO clock */
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_GPIOC);
/* configure LED GPIO pin */
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7 | GPIO_PIN_8);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7 | GPIO_PIN_8);
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_6 | GPIO_PIN_7);
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6 | GPIO_PIN_7);
/* reset LED GPIO pin */
gpio_bit_reset(GPIOA, GPIO_PIN_7 | GPIO_PIN_8);
gpio_bit_reset(GPIOC, GPIO_PIN_6 | GPIO_PIN_7);
while(1) {
/* turn on LED1, turn off LED4 */
gpio_bit_set(GPIOA, GPIO_PIN_7);
gpio_bit_reset(GPIOC, GPIO_PIN_7);
delay_1ms(500);
/* turn on LED2, turn off LED1 */
gpio_bit_set(GPIOA, GPIO_PIN_8);
gpio_bit_reset(GPIOA, GPIO_PIN_7);
delay_1ms(500);
/* turn on LED3, turn off LED2 */
gpio_bit_set(GPIOC, GPIO_PIN_6);
gpio_bit_reset(GPIOA, GPIO_PIN_8);
delay_1ms(500);
/* turn on LED4, turn off LED3 */
gpio_bit_set(GPIOC, GPIO_PIN_7);
gpio_bit_reset(GPIOC, GPIO_PIN_6);
delay_1ms(500);
/*Test*/
/* reset LED GPIO pin */
gpio_bit_reset(GPIOA, GPIO_PIN_7 | GPIO_PIN_8);
gpio_bit_reset(GPIOC, GPIO_PIN_6 | GPIO_PIN_7);
for(int i = 0; i < 4; i++){
gpio_bit_reset(GPIOC, GPIO_PIN_6);
gpio_bit_reset(GPIOA, GPIO_PIN_8);
gpio_bit_set(GPIOA, GPIO_PIN_7);
gpio_bit_set(GPIOC, GPIO_PIN_7);
delay_1ms(500);
gpio_bit_reset(GPIOA, GPIO_PIN_7);
gpio_bit_reset(GPIOC, GPIO_PIN_7);
gpio_bit_set(GPIOC, GPIO_PIN_6);
gpio_bit_set(GPIOA, GPIO_PIN_8);
delay_1ms(500);
}
for(int i = 0; i < 4; i++){
gpio_bit_reset(GPIOC, GPIO_PIN_6);
gpio_bit_reset(GPIOA, GPIO_PIN_8);
gpio_bit_set(GPIOA, GPIO_PIN_7);
gpio_bit_set(GPIOC, GPIO_PIN_7);
delay_1ms(100);
gpio_bit_reset(GPIOA, GPIO_PIN_7);
gpio_bit_reset(GPIOC, GPIO_PIN_7);
gpio_bit_set(GPIOC, GPIO_PIN_6);
gpio_bit_set(GPIOA, GPIO_PIN_8);
delay_1ms(100);
}
/* reset LED GPIO pin */
gpio_bit_reset(GPIOA, GPIO_PIN_7 | GPIO_PIN_8);
gpio_bit_reset(GPIOC, GPIO_PIN_6 | GPIO_PIN_7);
}
}
|