本人已经多次使用国民技术单片机,曾经使用过N32G430和N32G452两个型号的单片机,上述系列的单片机价格偏移、功能强大,是国产单片机里面的一股清流。本人有时做一些仪表,对于低功耗单片机有一定的需求,本次正好借此机会学习一下国民技术的低功耗单片机的使用,感谢国民技术和电子发烧友给本人此次学习的机会。
一、开箱
这次开箱比较简单,电子发烧友直接使用华秋电子寄过来,没有使用国民技术的包装箱。
该开发板板载N32L436RB单片机,并自带了DAP仿真器,为项目开发提供了便利。
二、项目建立
在国民技术提供的开发包里面,有现成的GPIO编程,但是开发板里面的每个程序共用一个固件库,只要改变项目的位置就会报错,为了便于编程,本人习惯于将建立的项目和固件库放在同一个文件夹中,这里简单介绍一下该过程。
1、建立项目文件夹。
如图所示。其中APP用于存放编程的应用程序,BSP用于存放板子的驱动,firmware用来存放固件,MDK-ARM用来存放Keil建立的相关项目文件。
2、复制文件
将例程序中的文件拷入APP文件夹,为了便于编程,将c文件和H文件放在一起。拷贝完成后,APP目录内容如下:
同时将例程序中MDK-ARM文件夹内容拷入自建目录的目录中。
3、添加文件和修改头文件路径
进入MDK-ARM目录中,打开项目,打开项目后提示错误,如下所示。
这是由于路径改变,未重新添加文件导致。将项目中的文件重新添加后,便可以消除错误提示。如下所示。
同时要修改头文件路径。修改前的头文件路径为
修改头文件的路径为
修改后,再次编译文件,便不会再提示错误。
三、GPIO编程
这里的GPIO编程主要是对LED进行编程,LED的端口设置程序如下
void led_init(void)
{
GPIO_InitType GPIO_InitStructure;
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_8;
GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA;
GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_4 | GPIO_PIN_5;
GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA;
GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
}
为便于LED的编程,在头文件中进行了宏定义,代码如下:
#define LED1_ON() GPIOA->PBSC = GPIO_PIN_8
#define LED1_OFF() GPIOA->PBC = GPIO_PIN_8
#define LED1_BLINK() GPIOA->POD ^= GPIO_PIN_8
#define LED2_ON() GPIOB->PBSC = GPIO_PIN_4
#define LED2_OFF() GPIOB->PBC = GPIO_PIN_4
#define LED2_BLINK() GPIOB->POD ^= GPIO_PIN_4
#define LED3_ON() GPIOB->PBSC = GPIO_PIN_5
#define LED3_OFF() GPIOB->PBC = GPIO_PIN_5
#define LED3_BLINK() GPIOB->POD ^= GPIO_PIN_5
在主程序中的程序为
#include "main.h"
int main(void)
{
delay_init();
led_init();
while (1)
{
delay_ms(500);
LED1_BLINK();
LED2_BLINK();
LED3_BLINK();
}
}
完成上述程序,电路上的LED就可以愉快的闪烁了。
|