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

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

【数字输出】
将模拟数字配置寄存器 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灯,因此选择推挽输出。
根据用户手册,配置为数据输出,有描述如下:

【代码实现】
#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进行操作,都定义好了宏。更加简洁的实现即定功能。
我要赚赏金
