【GD32L233C-START评测】测评之二:库函数解析,GPIO点灯
[复制链接]
GD32L23X库函数:片上资源丰富,全部给出API接口,相对于寄存器编程,大大降低开发难度。
先给个点灯测试:
原理图:LED属于关电流驱动,可以测评GPIO驱动能力。根于属于手册,GPIO可以拉灌25ma电流。
GPIO初始化:
- systick_config();
-
- /* enable the LED GPIO clock */
- rcu_periph_clock_enable(RCU_GPIOA);
- rcu_periph_clock_enable(RCU_GPIOC);
- 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);
关键配置:
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7 | GPIO_PIN_8);
延时有:SysTick 产生 1ms,解析:
Sys-系统,Tick-滴答声,系统滴答滴答很形象地表示了它是一个系统节拍器。SysTick 是一个集成在Cortex内核里的24位的倒计数定时器,当计到0时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。 SysTick的作用。 SysTick主要有以下几个作用:
1、产生操作系统的时钟节拍; 当RTOS以并行的架构处理任务,单一任务的崩溃并不会牵连到整个系统。这样用户出于可靠性的考虑可能就会基于RTOS来设计自己的应用程序。这样SYSTICK存在的意义就是提供必要的时钟节拍,为RTOS的任务调度提供一个有节奏的“心跳”。
2、便于不同处理器之间程序移植 因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作得以化简。
3、作为一个闹铃测量时间 可以用作闹钟,作为启动一个特定任务的时间依据。它作为一个闹铃,用于测量时间。要注意的是,当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。
- #include "gd32l23x.h"
- #include "systick.h"
-
- volatile static uint32_t delay;
-
-
- void systick_config(void)
- {
-
- if(SysTick_Config(SystemCoreClock / 1000U)) {
-
- while(1) {
- }
- }
-
- NVIC_SetPriority(SysTick_IRQn, 0x00U);
- }
-
-
- void delay_1ms(uint32_t count)
- {
- delay = count;
-
- while(0U != delay) {
- }
- }
-
-
- void delay_decrement(void)
- {
- if(0U != delay) {
- delay--;
- }
- }
-
流水灯改进
- /* turn on LED1, turn off LED4 */
- gpio_bit_set(GPIOA, GPIO_PIN_7);
- gpio_bit_reset(GPIOC, GPIO_PIN_7);
-
-
- /* 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);
- gpio_bit_reset(GPIOC, GPIO_PIN_7);
- delay_1ms(500);
-
- gpio_bit_set(GPIOA, GPIO_PIN_7);
- gpio_bit_set(GPIOA, GPIO_PIN_8);
- gpio_bit_set(GPIOC, GPIO_PIN_6);
- gpio_bit_set(GPIOC, GPIO_PIN_7);
- delay_1ms(500);
-
- gpio_bit_reset(GPIOC, GPIO_PIN_7);
- gpio_bit_reset(GPIOA, GPIO_PIN_7);
- gpio_bit_reset(GPIOA, GPIO_PIN_8);
- gpio_bit_reset(GPIOC, GPIO_PIN_6);
- delay_1ms(500);
- gpio_bit_set(GPIOA, GPIO_PIN_7);
- gpio_bit_set(GPIOA, GPIO_PIN_8);
- gpio_bit_set(GPIOC, GPIO_PIN_6);
- gpio_bit_set(GPIOC, GPIO_PIN_7);
- delay_1ms(500);
-
- gpio_bit_reset(GPIOC, GPIO_PIN_7);
- gpio_bit_reset(GPIOA, GPIO_PIN_7);
- gpio_bit_reset(GPIOA, GPIO_PIN_8);
- gpio_bit_reset(GPIOC, GPIO_PIN_6);
- delay_1ms(500);
- gpio_bit_set(GPIOA, GPIO_PIN_7);
- gpio_bit_set(GPIOA, GPIO_PIN_8);
- gpio_bit_set(GPIOC, GPIO_PIN_6);
- gpio_bit_set(GPIOC, GPIO_PIN_7);
- delay_1ms(500);
-
- gpio_bit_reset(GPIOC, GPIO_PIN_7);
- gpio_bit_reset(GPIOA, GPIO_PIN_7);
- gpio_bit_reset(GPIOA, GPIO_PIN_8);
- gpio_bit_reset(GPIOC, GPIO_PIN_6);
- delay_1ms(500);delay_1ms(500);delay_1ms(500);
上视频:
|