N32应用笔记1:keil新建工程,编译与烧录

本文目的

由于上层建筑要求,最近开始用起了N32(为什么要抛弃那么香的STM32我也不是很清楚),本文主要总结一下如何从0使用官方给的固件库实现一个N32的工程。
本文所用到的IDE是keil5.36,所使用的N32芯片为N32G452VEL7,window10平台下进行的工作

前置准备

  1. 下载好keil5.36(我用的5.36),keil基本会用
  2. N32G452VEL7的开发板或者最小系统板。
  3. C++基本语法基础
  4. 单片机基础知识
  5. 官方的固件库和资料文档(文末有下载链接)

N32简介

N32G452VEL7简介

N32G452 系列采用 32 bit ARM Cortex-M4 内核,最高工作主频 144MHz,支持浮点运算和 DSP 指令,集成高达 512KB 嵌入式 Flash,144KB SRAM,多个 U(S)ART、I2C、SPI、QSPI、USB、CAN 通信总线接口,集成 12bit ADC、DAC 等模拟接口 ,内置密码算法硬件加速引擎

我的印象

我所使用的N32G452VEL7简介
Nation国民技术(据说老板和我们老板认识所以采用的他家的),一开始以为非常垃圾,但是实际上发现官方能够给到相当不少的一个文档和demo,特别是常用的一些配置,还是可以的。

工程建立流程

懒得自己建的话可以从N32G452工程模板下载项目文件,同时里面加入了freertos的代码。

1 固件包下载和安装

在N32官方资料链接ftp://download.nationstech.com(ftp需要在文件资源管理器打开)中下载N32G452xx_V3.1.0压缩包解压
安装keil相关的DFP固件包,固件包在路径N32G452xx_V3.1.0\N32G452xx_V3.1.0\6-Software Development Kit下
在这里插入图片描述

2 新建工程文件的文件夹

  1. 新建一个文件夹,名称是项目名称,我这里写的是demo,可以改
  2. 在文件夹底下新建如下文件夹,可以看个人喜好建立,以下给出的是我写工程的一些习惯建法
    在这里插入图片描述
    其中firmware不是自己建立的,而是官方提供的固件库(理解为库函数吧)
    N32G452xx_V3.1.0\N32G452xx_V3.1.0\6-Software Development Kit\Nationstech.N32G45x_Library.2.2.0路径下的firmware全部挪过来就行。

我个人设置的文件结构如下

+---Application//用于存放应用层代码
|   +---Inc
|   \---Src
+---BSP//板级支持包,包括驱动,外设
|   +---Device//外设
|   |   +---Inc
|   |   \---Src
|   \---Driver//驱动
|       +---Inc
|       \---Src
+---firmware//官方提供的固件库部分代码,这个部分是从官方的SDK移植过来的
|   +---CMSIS
|   |   +---core
|   |   \---device
|   |       \---startup
|   +---n32g45x_algo_lib
|   |   +---inc
|   |   \---lib
|   +---n32g45x_std_periph_driver
|   |   +---inc
|   |   \---src
|   \---n32g45x_usbfs_driver
|       +---inc
|       \---src
+---Middleware//中间层,这部分我的理解是一些算法和对驱动进一步封装的一些模块
|   +---Inc
|   \---Src
\---Project//存放keil project

如果有rtos的话会选择另外开一个文件夹,这里先不考虑

3 keil MDK新建工程

  1. 看图操作就行
    在这里插入图片描述
  2. 保存路径选择刚刚的Project文件夹
  3. 这里选择所使用的芯片N32G452VEL7,之前安装了固件包这里就能看到
    在这里插入图片描述
  4. 弹出来的窗口直接ok不用管
  5. 项目建好长这个样子
    在这里插入图片描述
  6. 添加项目里面的项目文件夹和项目
    在这里插入图片描述

各个文件夹有什么用?
STARTUP存放启动文件,是官方提供的一个汇编
CMSIS存放系统文件,是官方提供的,涉及时钟等一些初始化的内容
FWLIB存放固件库,也是官方的东西
BSP/Driver 存放驱动,比如定时器配置,io口配置等等为上层提供服务
BSP/Device 存放设备代码,比如陀螺仪通信等等
Middleware 存放中间层,包括算法,模块进一步封装,一些调用设备进行数据处理和控制的代码
Application 存放main.cpp,一些应用层代码
如果使用了rtos最好再开一个rtos分组存放rtos文件,现在先不管

全部添加完是这个样子的
在这里插入图片描述

4 向工程分组添加必要的文件

4.1 添加启动文件

文件以及路径是 firmware\CMSIS\device\startup\startup_n32g45x.s
文件夹下其他两个是IAR和GCC的启动文件不要搞错了。
添加完是这样的
在这里插入图片描述

4.2 添加系统文件

文件以及路径是 firmware\CMSIS\device\system_n32g45x.c
添加完是这样的
在这里插入图片描述

4.3 固件库文件

文件夹路径是 firmware\n32g45x_std_periph_driver
这里只需要添加使用到的外设即可,当然也可以全部都添加喽,但是会导致工程比较大
我这里全部都加进去了,添加完是这样的
在这里插入图片描述

4.4 创建一个main函数

在Application/Src下建立main.cpp,同上一步一样添加到工程的Application分组
同时在Application/Inc下建立main.h

4.5 添加头文件路径

这些是必须的,其他按需求添加头文件路径

4.6 添加全局宏定义N32G45X, USE_STDPERIPH_DRIVER

相当于是对固件库N32G45X的预编译头和使用官方的标准驱动库
这里顺便改O(0)优化,以免在调试的情况下代码进行了过多的优化
在这里插入图片描述

4.7 设置debug

这里使用的是ST-Link Debugger,勾选Reset and Run(烧录后立刻重启芯片,这样就会立刻运行了,而不需要手动重启运行)
在这里插入图片描述

4.8 修改系统文件外部晶振

由于使用了24Mhz的外部晶振,很重要,否则烧录完芯片会锁死,本人使用的N32开发板上面没有把boot引脚拉出来非常恶心,锁死要手动把boot0接高复位重写,极其痛苦。
这个宏定义在n32g45x.h这个头文件里面,改成开发板实际使用的外部晶振即可
在这里插入图片描述

5 验证是否能够成功编译运行

随便写点代码让他在单片机run起来,由于刚刚建立工程,还没有使用单片机的外设,这部分使用纯计算的方式验证是否能够跑通

5.1 main.h编写

//main.h
#ifndef __MAIN_H__
#define __MAIN_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "n32g45x.h"

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H__ */

5.2 main.cpp编写

//main.cpp
#include "main.h"
#include <stdio.h>
#include <stdint.h>

/**
 * @brief Assert failed function by user.
 * @param file The name of the call that failed.
 * @param line The source line number of the call that failed.
 */
#ifdef USE_FULL_ASSERT
void assert_failed(const uint8_t* expr, const uint8_t* file, uint32_t line)
{
    while (1)
    {
    }
}
#endif // USE_FULL_ASSERT

/**
 * @brief  Main program.
 */
int test = 0;
int main(void)
{
	while(1)
	{
		test ++;
	}	
}

5.3 连接设备并且debug

直接在test打断点,如果每次运行一次test都有正常再涨,那应该没什么大问题

参考文献

### PyCharm 打开文件显示全的解决方案 当遇到PyCharm打开文件显示全的情况时,可以尝试以下几种方法来解决问题。 #### 方法一:清理缓存并重启IDE 有时IDE内部缓存可能导致文件加载异常。通过清除缓存再启动程序能够有效改善此状况。具体操作路径为`File -> Invalidate Caches / Restart...`,之后按照提示完成相应动作即可[^1]。 #### 方法二:调整编辑器字体设置 如果是因为字体原因造成的内容显示问题,则可以通过修改编辑区内的文字样式来进行修复。进入`Settings/Preferences | Editor | Font`选项卡内更改合适的字号大小以及启用抗锯齿功能等参数配置[^2]。 #### 方法三:检查项目结构配置 对于某些特定场景下的源码视图缺失现象,可能是由于当前工作空间未能正确识别全部模块所引起。此时应该核查Project Structure的Content Roots设定项是否涵盖了整个工程根目录;必要时可手动添加遗漏部分,并保存变更生效[^3]。 ```python # 示例代码用于展示如何获取当前项目的根路径,在实际应用中可根据需求调用该函数辅助排查问题 import os def get_project_root(): current_file = os.path.abspath(__file__) project_dir = os.path.dirname(current_file) while not os.path.exists(os.path.join(project_dir, '.idea')): parent_dir = os.path.dirname(project_dir) if parent_dir == project_dir: break project_dir = parent_dir return project_dir print(f"Current Project Root Directory is {get_project_root()}") ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值