继上文创建完工程后,开始MCU片上资源的驱动编写。N32G455的片上资源还是很丰富的,那么我们首先从简单片上资源入手,学习一下GPIO输出以及定时器的使用。
首先建立一组bms_app.c和bms_app.h用于组织bms系统应用层逻辑代码的编写。再建立一组bms_init.c和bms_init.h用于系统的硬件初始化。
再工程目录中新建bms文件夹,把两组代码中的.c文件添加到该文件夹下。同样在工程中建立drv文件夹,用于存放驱动相关代码,分别建立gpio.c,tim.c,delay.c,n32g45x_it.c。这些文件也可以从N32官方提供的例程中拷贝过来。
在工程属性的C++标签页添加宏定义,同时添加头文件路径到工程中。
在main.c中引用bms_app.h,并调用bms_app()。
在bms_app.c中实现bms_app()函数,其主要功能是根据定时器的中断(20ms中断一次,中断中递增g_u32_20msCnt变量),实现100ms,500ms,1000ms的循环任务。
在bms_init.c中实现bms_init()函数,这里调用驱动中的定时器初始化函数tim6_init()和GPIO初始化函数gpio_init();
在tim.c中实现tim6_init()函数,初始化tim6.
在gpio.c中实现gpio_init()函数,初始化gpio,并实现gpio的高低控制和反转。
在bms_init.h中定义LED的Port和Pin.
在bms_app.c中的500ms周期函数中调用gpio反转函数gpio_toggle(),实现LED灯的亮灭控制。
编译完成后下载程序到开发板,复位后可以看到开发板的LED灯开始闪烁了。至此驱动GPIO和定时器TIM完成。
工程文件:
*附件:N32G45x_BMS.zip
|