这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【CW32L012】1、GPIO的应用

共1条 1/1 1 跳转至

【CW32L012】1、GPIO的应用

高工
2025-11-14 07:48:38     打赏

【前言】

武汉芯源半导体最新推出的CW32L012,它是基于ARM® Cortex®-M0+ 32 位低功耗微控制器,64K 字节 FLASH,8K 字节 RAM。最近CW32生态社区推出了9.9元包邮的最小系统开发板活动,我拿到了这款开发板,将分享如何使用他的外设。这一篇将分享如何快速使用他的GPIO,驱动两个LED灯。

【LED的原理图】

开发板板载了一个LED灯,连接到PC13,低电平点亮。

image.png



【GPIO简介】

通用输入输出端口(GPIO)

 每个 GPIO引脚可软件配置为推挽或开漏的数字输出,或带内部上拉或下拉的数字输入,以及外设复用功能。部分 GPIO引脚具有模拟功能,与内部模拟外设连接。所有IO可配置为外部中断输入引脚,同时具有数字滤波功能。

【功能框图】

image.png

 【数字输出】

将模拟数字配置寄存器 GPIOx ANALOG[V(x是 GPI0 端口号,x=A/B/C/F;y是引脚号,y=0~15;下同)清零,配置相应的 GPI0 端口为数字功能;将输入输出方向寄存器 GPIOx_DIR[y]清零,配置 GPI0 端口为输出模式。数字输出信号来源可以是:

1、输出数据寄存器 GPIOX ODR

2、片内数字外设

通过输出模式寄存器 GPIOX OPENDRAIN 配置输出模式,可选择推挽输出或开漏输出。

我们这一次是驱动LED灯,因此选择推挽输出。

根据用户手册,配置为数据输出,有描述如下:

image.png

【代码实现】

#include "cw32l012.h"
#include "cw32l012_sysctrl.h"
#include "cw32l012_systick.h"
#include "cw32l012_gpio.h"

void LED_Init(void)
{
	__SYSCTRL_GPIOC_CLK_ENABLE();     //使能GPIOC的时钟
	CW_GPIOC->ANALOG_f.PIN13    = 0;  //将PC13设置为数字功能
	CW_GPIOC->DIR_f.PIN13       = 0;  //将PC13设输出
	CW_GPIOC->OPENDRAIN_f.PIN13 = 0;  //将PC13设置出推挽输出
	CW_GPIOC->ODR_f.PIN13       = 1;  //将PC13l输出为高电平
}

void LED_TOG(void)
{
	CW_GPIOC->TOG= GPIO_PIN_13;       //端口翻转
}

int main(void)
{
    SYSCTRL_HSI_Enable(HSIOSC_TO_HSI96MHZ);
    SYSCTRL_HCLKPRS_Config(SYSCTRL_HCLK_DIV1);
    SYSCTRL_PCLKPRS_Config(SYSCTRL_PCLK_DIV1);
    SYSCTRL_SystemCoreClockUpdate(96000000);
    InitTick(96000000);


	   LED_Init();

    while (1)
    {

			  LED_TOG();
        SysTickDelay(1000);
    }
}

【实验效果】

下载到开发板后,开发板的LED灯,以1秒为单位翻转。

【总结】

CW32的用户手册,非常详细的注明了外设的使用步骤,按照寄存器的配置,可以快速的实现。代码精简。而且库函数中,实现了完整的宏定义,如果对单一个IO进行操作,都定义好了宏。更加简洁的实现即定功能。





关键词: CW32L012     GPIO     LED    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]