国民技术N32G45环境搭建及点灯测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了国民技术N32G45环境搭建及点灯测试相关的知识,希望对你有一定的参考价值。
国民技术N32G45环境搭建及点灯测试
1.N32G45简介
N32G45系列集成了最新一代嵌入式ARM Cortex™-M4F处理器,在Cortex™-M3内核的基础上强化了运算能力、新增加了浮点运算处理单元(FPU)、DSP和并行计算指令,提供1.25DMIPS/MHz的优异性能。同时其高效的信号处理能力与Cortex-M系列处理器的低功耗,低成本和易于使用的优点组合,用以满足需要控制和信号处理混合能力且易于使用的应用场景。
ARM Cortex™-M4F 32位精简指令集处理器具有优异的代码效率,通常采用8位和16位器件的存储器空间即可发挥ARM内核的高性能。
注:Cortex™-M4F向下兼容Cortex-M3代码。
- 高达 512KByte 片内 Flash,支持加密存储、多用户分区管理及数据保护,支持硬件 ECC 校验,10万次擦写次数,10 年数据保持。
- 144KByte 片内 SRAM(包含 16KByte Retention RAM),Retention RAM 支持硬件奇偶校验。
通讯接口
― 7 个 U(S)ART 接口, 最高速率达 4.5 Mbps,其中 3 个 USART 接口(支持 1xISO7816,1xIrDA, LIN),4 个 UART 接口;
― 3 个 SPI 接口,速度高达 36 MHz,其中 2 个支持 I2S
― 1 个 QSPI 接口,速率高达 144 Mbps
― 4 个 I2C 接口,速率高达 1 MHz,主从模式可配,从机模式下支持双地址响应
― 1 个 USB2.0 Full speed Device 接口
― 2 个 CAN 2.0A/B 总线接口
― 1 个 SDIO 接口,支持 SD/MMC 格式
- ADC模拟接口
―2 个 12bit 5Msps 高速 ADC,多种精度可配置,6bit 模式下采样率高达 9Msps,多达 18 路外部单端输入通道,支持差分模式
―2 个 12bit DAC,采样率 1Msps
―支持外部输入独立参考电压源
―所有模拟接口支持 1.8~3.6V 全电压工作 - 最大支持 97 个支持复用功能的 GPios,大多数 GPIO 支持 5V 耐压.
- 2个高速 DMA 控制器,每个控制器支持 8 通道,通道源地址及目的地址任意可配
- RTC 实时时钟,支持闰年万年历,闹钟事件,周期性唤醒,支持内外部时钟校准
- 定时计数器
―2 个 16bit 高级定时计数器,支持输入捕获、输出比较、PWM 输出以及正交编码输入等功能,最高控制精度 6.9nS。每个定时器有 4 个独立的通道,其中 3 个通道支持 6 路互补 PWM 输出
―4 个 16bit 通用定时计数器, 每个定时器有 4 个独立通道,支持输入捕获/输出比较/PWM 输出
―2 个 16bit 基础定时计数器
―1x 24bit SysTick
―1x 7bit 窗口看门狗(WWDG)
―1x 12bit 独立看门狗( IWDG)
2.N32命名规则
3.基于N32G457VEL7开发板介绍
N32G45XVL-STB 开发板用于国民技术股份有限公司高性能 32 位 N32G45XVL 系列芯片的样片开发。基于ARM架构的Cortex-M4F内核,时钟频率为144MHZ,存储空间flash大小为512KB,运行空间Sram大小为144KB。
支持串口下载,Jlink下载仿真、USB下载以及CMSIS-DAP下载仿真。板子本身自带CMSIS-DAP接口电路。
- 开发板原理图如下
4.基于N32G45工程搭建
1.若想要搭建N32G45开发板工程,则需要下载一份芯片匹配的固件库,相关资料可自行到国名科技官网下载,这里则不展开说明,相关资料包可在文章最后链接获取。
2.双击pack包安装KEIL需要的芯片库,安装成功即可在KEIL下进行开发。
3.创建工程目录,在固件库中拷贝必要的依赖文件到CORE目录下。
4.打开KEIL软件,选择新建工程,选择芯片型号为N32G457VEL7。
5.创建分组,将添加的依赖文件加入到分组中。
6.添加头文件路径。
7.创建工程入口函数main.c,添加以下代码。
#include "n32g45x.h"
int main()
while(1);
8.编译工程,查看工程是否创建成功,若提示信息如下则便是工程创建成功。至此,一个新的工程创建到此结束。
5.LED驱动
1.实现LED驱动可分为三个步骤:1.开时钟;2配置GPIO口;3.上下拉。
- 开时钟
要开启时钟,我们可以先看下N32G45的系统构架,系统构架框图如下:
根据系统构架框图可以看出,整个内核结构分为三条总线:AHB、APB2、APB1。其中AHB总线时钟频率为144MHZ,APB2上时钟总线为72MHZ、APB1上时钟总线为36MHZ。我们需要完成LED灯的驱动,就时钟找到LED的时钟接口,开启相应的时钟源。
接下来,我们需要参考开发板原理图,找到LED灯接CPU的那个硬件接口上。LED硬件原理图如下:
根据原理图我们可以看出D1对应的硬件接口为PA8,D2对应的硬件接口为PB4,D3的硬件接口为PB5。因此我们需要开启的时钟为GPIOA和GPIOB。
相应的时钟接口寄存器如下:
根据用户手册可以看到,PA和PB时钟在PAB2CLKEN的第二位和第三位上,配置如下:
/*1.开时钟*/
RCC->APB2PCLKEN|=1<<2;//PA
RCC->APB2PCLKEN|=1<<3;//PB
- 配置GPIO口
对应GPIO端口配置,我们需要参考用户手册的第7章节。第7章节。
GPIO( General purpose input/output) 即通用型 I/O, AFIO( Alternate-function input/output) 即复用功能 I/O。芯片最多支持 97 个 GPIO,共被分为 7 组(GPIOA/GPIOB/GPIOC/GPIOD/GPIOE/GPIOF/GPIOG),每组 16个端口( F 组共 10 个, G 组共 7 个)。 GPIO 端口和其他的复用外设共用引脚,用户可以根据需求灵活配置。每个 GPIO 引脚都可以独立配置成输出、输入或复用的外设功能端口。除了模拟功能引脚外,其他的 GPIO引脚都有大电流通过能力。
GPIO 端口可由软件分别配置成以下模式:
■ 输入浮空
■ 输入上拉
■ 输入下拉
■ 模拟功能
■ 开漏输出
■ 推挽输出
■ 推挽复用功能
■ 开漏复用功能
对应LED灯,我们需要配置的模式为推挽输出。
端口模式配置寄存器:
PA8,PB4,PB5配置如下:
/*2.配置GPIO口*/
AFIO->RMP_CFG&=~(0x7<<24);
AFIO->RMP_CFG|=1<<24;//将PB设置为普通IO
GPIOA->PH_CFG&=0xFFFFFFF0;
GPIOA->PH_CFG|=0x00000003;//通用推挽输出模式
GPIOB->PL_CFG&=0xFF00FFFF;
GPIOB->PL_CFG|=0x00330000;//通用推挽输出模式
注意:由于PB4默认是用于SWD接口,若需要用着普通IO使用,则需要开启AFIO时钟,设置PB4为普通IO。
配置代码如下:
AFIO->RMP_CFG&=~(0x7<<24);
AFIO->RMP_CFG|=1<<24;//将PB4设置为普通IO
- 上下拉
上下拉操作,即设置初始化的电平状态。可通过GPIO_POD或者GPIO_PBSC实现。
GPIO_PBSC寄存器如下:
当然,也可以使用位带操作实现。本例程将以位带操作方式实现上下拉,相关资料可参考Cortex-M4权威指南,这里则不展开叙述。实现如下:
/*位带操作的宏定义: Cortex-M3权威指南第五章--96页*/
//把"位带地址+位序号"转换成别名地址的宏
#define BITBAND(addr,bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
//把该地址转成一个指针
#define MEM_ADDR(addr) *((volatile unsigned long *) (addr))
//定义寄存器地址: STM32中文参考手册第2章-存储器映像-28页
#define GPIOA_ODR_ADDR (0x40010800+0x0C)
#define GPIOA_IDR_ADDR (0x40010800+0x08)
#define GPIOB_ODR_ADDR (0x40010C00+0x0C)
#define GPIOB_IDR_ADDR (0x40010C00+0x08)
//定义GPIO口位带操作宏: IDR和ODR
#define PAout(x) MEM_ADDR(BITBAND(GPIOA_ODR_ADDR,x))
#define PAin(x) MEM_ADDR(BITBAND(GPIOA_IDR_ADDR,x))
#define PBout(x) MEM_ADDR(BITBAND(GPIOB_ODR_ADDR,x))
#define PBin(x) MEM_ADDR(BITBAND(GPIOB_IDR_ADDR,x))
#define LED_D1 PAout(8)
#define LED_D2 PBout(4)
#define LED_D3 PBout(5)
LED整体配置代码如下:
#include "led.h"
/*
LED初始化
硬件接口:D1 --PA8
D2 --PB4
D3 --PB5
作者:IT_阿水
*/
void LED_Init(void)
/*1.开时钟*/
RCC->APB2PCLKEN|=1<<2;//PA
RCC->APB2PCLKEN|=1<<3;//PB
RCC->APB2PCLKEN|=1<<0;
/*2.配置GPIO口*/
AFIO->RMP_CFG&=~(0x7<<24);
AFIO->RMP_CFG|=1<<24;//将PB设置为普通IO
GPIOA->PH_CFG&=0xFFFFFFF0;
GPIOA->PH_CFG|=0x00000003;//通用推挽输出模式
GPIOB->PL_CFG&=0xFF00FFFF;
GPIOB->PL_CFG|=0x00330000;//通用推挽输出模式
LED_D1=0;
LED_D2=0;
LED_D3=0;
最后,实现500ms完成LED闪烁一次,代码实现如下:
#include "n32g45x.h"
#include "led.h"
#include "delay.h"
int main()
LED_Init();
while(1)
LED_D1=!LED_D1;
LED_D2=!LED_D2;
LED_D3=!LED_D3;
Delay_Ms(1000);
- 运行效果:
以上是关于国民技术N32G45环境搭建及点灯测试的主要内容,如果未能解决你的问题,请参考以下文章
向日葵资深产品总监技术分享:“国民远控”如何在AD域环境下应用
向日葵资深产品总监技术分享:“国民远控”如何在AD域环境下应用