打印
[牛人杂谈]

BSP 库的结构以及使用

[复制链接]
1953|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
库的结构

假如下载了这个BSP: NANO102_112_SeriesBSP_CMSIS_V3.01.000,打开,目录如下左边第一个
图, Library目录打开如中间图示, StdDriver打开目录如右边图示:



SampleCode打开目录如下



沙发
天灵灵地灵灵|  楼主 | 2016-8-14 13:08 | 只看该作者
下图是inc目录下的文档

图 2-1 inc目录下的文件

下图是StdDriver目录


图 2-2 StdDriver目录下的文件



使用特权

评论回复
板凳
天灵灵地灵灵|  楼主 | 2016-8-14 13:11 | 只看该作者
初识 Sample code
下面我们通过讲解一些sample code来更进一步了解BSP。
常用Sample code都在目录NANO102_112_SeriesBSP_CMSIS_V3.01.000\SampleCode\StdDriver下面
通过讲解GPIO范例,大家可以了解API的使用方法以及通过Nu-Link下载、调试的方法。 因为使用UART打印信息,所以UART也会被初始化。GPIO 范例
打开GPIO目录, 下面有2个目录和一个文件


1) 进入 keil 目录,双击项目文件 GPIO.uvproj, keil 就会被打开,如下图


上图中, CMSIS下是ARM CMSIS规范规定的2个文件User下是main.cLibrary下是Library\StdDriver\src目录下的文件,项目用到的就包在这个目录下

使用特权

评论回复
地板
天灵灵地灵灵|  楼主 | 2016-8-14 13:14 | 只看该作者
本帖最后由 天灵灵地灵灵 于 2016-8-14 13:17 编辑

2) 点击 F7 进行编译, keil Build Output 窗口会显示编译结果, GPIO.bin 生成,在 obj 目录下



3) 将板子通过 Nu-Link 或者 Nu-Link-Me 接到 PC 上
4) 点击 Load 进行下载。下载之前让我们看一下怎么选择用 Nu-Link 进行下载
点击Target Option进入下面的画面,大家注意该画面东西特多,瞪大眼睛,注意看,该窗口有10
个frames


使用特权

评论回复
5
天灵灵地灵灵|  楼主 | 2016-8-14 13:20 | 只看该作者
本帖最后由 天灵灵地灵灵 于 2016-8-14 13:23 编辑

首先在 Device 窗口选择正确的型号, 例如: 我们选择 NANO112VC2AN。 这样等会 Debug 的
时候才能看到寄存器列表, 注意: Target 里面下图红框内不能是空的,否则 Debug 的时候看
不到寄存器列表


然后进入 Debug 选择 Nuvoton Nu-Link Debugger。 点击 Settings 会看到当前使用的 Nu-LinkKeil 驱动版本号
如果看不到该项选择,说明 Nu-Link-Keil-Driver 安装的目录不对或者 Nu-Link 没有被识别,目
录不对需要选择正确的目录重新安装,注意要安装到 Keil 的安装目录下; Nu-Link 没有被识别
的话,如果 USB 驱动安装都没有问题,就只能是驱动有问题或者你的 windows 系统里面缺少
安装包,可以联系新唐技术支持。


 最后进入 Utilities,打勾 Usb Debug Driver 和 Update Target before Debugging。点击 Settings


可以选择要烧录的位置,一般都烧录到APROM
 然后关闭 option 窗口,点击 Load 就会下载了
看到下面的进度条,说明环境, BSP 安装都没有问题了


使用特权

评论回复
6
天灵灵地灵灵|  楼主 | 2016-8-14 13:28 | 只看该作者
5) 点击 进入调试画面,如下

Keil会自动停在main函数,左边显示的是通用寄存器r0 – r13, lr, pc, cpsr寄存器的值点击上图红框中绿色的按钮,就可以看到寄存器列表,点击GP,就会看到GPIO的所有寄存器,
如下图红框所示


使用特权

评论回复
7
天灵灵地灵灵|  楼主 | 2016-8-14 13:30 | 只看该作者
6) 之后就可以进行单步/Free run 等调试动作

可以编译、调试、下载, 环境基本就OK了。
下面是main.c的一部分代码,重复的函数我都拿掉了, 例如: EINT0中断处理函数和EINT1中断处
理函数,两个函数中,我只讲EINT0。



使用特权

评论回复
8
天灵灵地灵灵|  楼主 | 2016-8-14 13:32 | 只看该作者




使用特权

评论回复
9
天灵灵地灵灵|  楼主 | 2016-8-14 13:33 | 只看该作者
我们的 M0/M4 系列因为有多个时钟源,所以 CPU 和外设都有多个时钟源可以选择。 系统初始化
的步骤如下:
 使能外部/内部晶振,并等待晶振稳定( PWRCTL 寄存器和 CLKSTATUS 寄存器)
 选择 CPU 时钟源( CLKSEL0 寄存器)
 选择外设时钟源( CLKSEL1/CLKSEL2 等寄存器)
 使能外设时钟( APBCLK 寄存器)
 设定 GPIO 的功能( PA_L_MFP/PA_H_MFP 等寄存器)

M0/M4 系列一般有 5 个时钟源可以选择。 内部有 2 个晶振:内部高速晶振( HIRC) 一般22.1184M 或者 12M 或者 16M; 内部低速晶振(LIRC),一般是 10K,有的 32.768K
外部可以接 2 个晶振:外部高速晶振(HXT),一般可以接 4M ~ 24M;外部低速晶振(LXT),
一般接 32.768K
另外再加锁相环(PLL),可以选择 HXT 和 HIRC 超频到 50M,或者更高
这 5 种时钟源,每个外设和 CPU 大都可以选择。
外设选好上面 5 种时钟哪种做时钟源之后,写 APBCLK 寄存器使能时钟

注意: 如果外设时钟不等于 CPU 时钟(CPU 时钟慢),写外设寄存器的时候需要 SW 自己同步。
看门狗一般选择内部 10K 时钟做时钟源,我们就以看门狗代码为例,代码如下:WDT->CTL = WDT_TIMEOUT_2POW14| 0 |(0 << WDT_CTL_WTRE_Pos) |(1 << WDT_CTL_WTWKE_Pos);/*喂狗周期 2^14,使能唤醒功能*/
Delay(200);/*Delay 200us*/
WDT->CTL | = WDT_CTL_WTE_Msk ;/*使能看门狗*/
上面的代码连续写两次CTL寄存器,第二次写和第一次写之间需要等2个看门狗时钟周期,就是2
个10K时钟,大概200us
如果上面的代码改成这样: WDT->CTL = WDT_TIMEOUT_2POW14| WDT_CTL_WTE_Msk |0 |(0 << WDT_CTL_WTRE_Pos) | (1 << WDT_CTL_WTWKE_Pos);/*喂狗周期 2^14,使能唤醒功
能,同时使能看门狗*/
这样就不需要 delay 了,因为同一个寄存器只写一次。

使用特权

评论回复
10
天灵灵地灵灵|  楼主 | 2016-8-14 14:07 | 只看该作者
总结如下:1) 为了省电, 整个系统的晶振除了内部 HIRC,其他晶振默认都是不起振的。2) 每个 IP 的时钟默认也是关闭的。
3) 所有的 IP 包括 CPU 有多个时钟源可以选择。
4) 整个系统要使用的晶振都需要软件起振。
5) 每个 IP 在使用之前要选择时钟源+使能时钟,然后配置多功能引脚。
6) 要新建 project 的话建议拿我们 BSP 下面已有的*.uvproj 文件来改



使用特权

评论回复
11
捉虫天师| | 2016-8-14 16:31 | 只看该作者
API的使用方法以及通过Nu-Link下载、调试的方法

使用特权

评论回复
12
Harvard| | 2016-8-14 23:32 | 只看该作者
直接把文档资料发上来好了

使用特权

评论回复
13
wahahaheihei| | 2016-8-15 20:34 | 只看该作者
通常新唐的开发板上都会提供一个nu-link下载器的。

使用特权

评论回复
14
598330983| | 2016-8-15 21:22 | 只看该作者
可以了解API的使用方法以及通过Nu-Link下载、调试的方法。

使用特权

评论回复
15
we167527| | 2016-8-16 09:08 | 只看该作者
好**!不过能贴个官方库文件吗?

使用特权

评论回复
16
天灵灵地灵灵|  楼主 | 2016-8-16 20:31 | 只看该作者
we167527 发表于 2016-8-16 09:08
好**!不过能贴个官方库文件吗?

库文件可以直接去官方下载的,官方提供的有中英文的手册和BSP

使用特权

评论回复
17
gejigeji521| | 2016-8-18 20:28 | 只看该作者
学习是一个不断认识不断尝试不断修正的过程。BSP的学习也是这样。

使用特权

评论回复
18
643757107| | 2016-8-19 20:04 | 只看该作者
模板工程里应该包含了所需的所有头文件和库函数文件。

使用特权

评论回复
19
天灵灵地灵灵|  楼主 | 2016-8-27 14:31 | 只看该作者
外部可以接 2 个晶振:外部高速晶振(HXT),一般可以接 4M ~ 24M;外部低速晶振(LXT),
一般接 32.768K

使用特权

评论回复
20
dongnanxibei| | 2016-8-27 15:16 | 只看该作者
为了省电, 整个系统的晶振除了内部 HIRC,其他晶振默认都是不起振的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

164

主题

3327

帖子

13

粉丝