初识SAMD21之Blinky拿到板子的第一个感觉就是做工相当不错,马上上网下载相关文档,数据手册那是必不可少了。
上图板子靓照。
图1
图2
由于一直使用MDK,所以这个也不例外,不过看了一下MDK4.73居然不知道SAMD21的主控,没办法了,只好上MDK5了。安装MDK5后,还要使用package installer工具安装Keil::SAMD21_DFP,来支持我们的SAMD21的开发。
安装完成后,我就可以开始我们的第一个例子程序了,著名的LED闪灯程序Blinky。
第一步,创建MDK工程,器件选择
这个和MDK4.73确实不一样了,看看多了一个keil.samd21_dfp.1.0.0的设备包,我们打开SAMD21 Series中的ATSAMD21J,并且选中下面的ATSAMD21J18A,这个是我们这块开发板的主控芯片。
第二步,工程模块支持
这里面是MDK5的新内容了,MDK4可没有这些东西。根据自己需要往工程中加吧,我这里面只选了途中这几项,其实只选Startup好像就可以了。
第三步,添加代码
工程建立好,添加main.c文件,如图所示
打开main.c,添加我们自己的代码。此处值得一提的是,根据手册描述,SAMD21上电复位后,时钟自动初始化为内部8MHz时钟,并通过GCLK提供给CPU和总线使用,PM已经使能PORT的时钟驱动,所以对于我们来说就需要设置LED的相关驱动引脚就可以了。
贴上代码,提一下,LED使用的是PB30.
void LED_Init(void)
{
PORT->Group[1].DIRSET.reg = PORT_PB30;
PORT->Group[1].OUTSET.reg = PORT_PB30;
}
void LED_ON(void)
{
PORT->Group[1].OUTCLR.reg = PORT_PB30;
}
void LED_OFF(void)
{
PORT->Group[1].OUTSET.reg = PORT_PB30;
}
SAMD21一共有三个口A、B、C,其中PORT->Group[1]就代表B口,所以我们的所有操作都是针对Group[1]来的。
初始化中,要设置PB30为输出
PORT->Group[1].DIRSET.reg = PORT_PB30;
LED灯为低电平有效,所以点亮LED,应该将PB30置低。
PORT->Group[1].OUTCLR.reg = PORT_PB30;
熄灭LED灯,要将PB30置高。
PORT->Group[1].OUTSET.reg = PORT_PB30;
添加main主函数。
int main(void)
{
LED_Init();
while(1)
{
LED_ON();
delay(10000);
LED_OFF();
delay(100000);
}
}
第四步,编译链接,下载运行
看看运行效果吧,小灯是不是欢快再闪啊。