2012
三天入门 Cortex-M4
—Kinetis 系列
野火 Kinetics 开发板教程
最适合初学者入门 Kinetis 的教程
freescale
作者:野火
野火嵌入式开发工作室
2012-3-16
三天入门 Cortex-M4——Kinetis 系列 野火嵌入式开发工作室
火
三天入门 Cortex-M4——Kinetis 系列
前言
随着技术的发展,单片机型号越来越繁多,入门的难度也逐渐加多,学习周期自
然不断延长。为了让初学者快速入门,减少学习时间,尤其是为了那些参加智能车比
赛而没时间学习深入研究 Kinetis 单片机朋友,我们特意写了 Kinetis 开发板的教程。
力求大大减少初学者的学习时间。
野火 Kinetis 开发教程,主要有 IAR 的使用教程、Kinetis 启动流程讲解、野火
K60 库的调用 三个部分组成。我们不再详细讲解寄存器,而且推荐你们直接调用我
们的函数库。野火 K60 函数库,函数内部会自动计算频率,设置分频,直接调用,减
少你们的后顾之忧,可以加快你们的开发速度。
目前,单片机型号如此之多,而产品的开发所允许给我们的时间越来越少,我们
完全没有必要深入研究寄存器设置,就算你能把寄存器背得滚瓜烂熟,过段时间不去
接触,还是没法记住的。
现在的单片机开发,工程师往往都是利用官方的固件库来进行开发,而不再是靠
自己重新建立自己的函数库进行开发。例如 ST 公司推出的 ST 库,让你可以完全不需
要考虑底层开发而直接开发自己的产品。飞思卡尔公司,在这方便确实让人感到失望,
这也是野火嵌入式工作室要建立自己的野火 Kinetis 库的原因。
野火 K60 库的函数接口,尽量追求简洁明了、通俗易懂,力求初学者见其名就会
用。目前提供了 26 个入门实验:野火 Kinetis 核心板实验例程 ,包含了目前智能车比
赛最常用的几个模块。
想快速上手 K60 单片机吗?野火 Kinetis K60 库,是你最好的选择!!!
我们的口号是:三天入门 Kinetis!
野 火 嵌 入 式 开 发 工 作 室
~ 1 ~
火
我们喊出这样的口号并不是吹的,已经有两位大三参加智能车的朋友(同一个队)
三天入门 Cortex-M4——Kinetis 系列 野火嵌入式开发工作室
在使用我们的教程与 k60 库三天时间内就能把 xs128 上的摄像头 0v7725 驱动程序和
舵机控制程序移植到 Kinetis 上跑起来;一位大二的师弟,不到一天的时间就从入门
到搞定摄像头 ov7725 和液晶 LCD 的移植„„你会是下一位吗?
只要我们敢拼,一切皆有可能!!!Nothing is impossible !!!
由于个人能力及时间所限,出错之处,在所难免,欢迎各位指出错误及提出建议:
minimcu@foxmail.com
——野火嵌入式开发工作室
2012-3-27
联系我们
Technical support
野 火 嵌 入 式 开 发 工 作 室
~ 2 ~
三天入门 Cortex-M4——Kinetis 系列 野火嵌入式开发工作室
火
目录
三天入门Cortex-M4——Kinetis系列...................................................................................................1
前言 ........................................................................................................................................................ 1
目录 ........................................................................................................................................................ 3
Kinetis 的启动分析(初学者大概浏览一下即可) ................................................................................. 6
初步入门:初始化函数启动执行顺序 .........................................................................................................................................6
逐步提高:ROM、RAM 启动工作原理、ICF 文件讲解..........................................................................................................8
IAR 的使用 ............................................................................................................................................ 18
安装 IAR ............................................................................................................................................................................................ 18
建立 IAR 工程 .................................................................................................................................................................................. 30
创建工程文件 ............................................................................................................................................................................ 30
添加 GPIO 驱动和点亮 LED ................................................................................................................................................... 43
IAR 工程选项设置 .................................................................................................................................................................... 46
快速建 IAR 工程.............................................................................................................................................................................. 66
IAR 使用教程 ................................................................................................................................................................................... 68
工具栏功能介绍 ........................................................................................................................................................................ 69
工作区工程的选定与切换 ...................................................................................................................................................... 71
通过 jlink 下载并调试 ............................................................................................................................................................. 72
使用软件仿真调试 ................................................................................................................................................................... 76
IAR 界面风格设计 .................................................................................................................................................................... 79
野火 Kinetis 核心板实验例程列表 ........................................................................................................ 81
野火 K60 库的使用 ............................................................................................................................... 83
前言 .................................................................................................................................................................................................... 83
快速开发指南................................................................................................................................................................................... 84
快速入门:了解野火 Kinetis 工程 ...................................................................................................................................... 84
中断函数的编写方法 ............................................................................................................................................................... 90
重要变量、函数、宏定义一览表......................................................................................................................................... 93
安全检查 ..................................................................................................................................................................................... 96
GPIO 模块........................................................................................................................................................................................100
快速入门:GPIO 库使用方法..............................................................................................................................................100
GPIO 测试例程 ........................................................................................................................................................................109
LED 模块 .........................................................................................................................................................................................114
快速入门:LED 库使用方法 ...............................................................................................................................................114
LED 综合测试例程 .................................................................................................................................................................117
野 火 嵌 入 式 开 发 工 作 室
~ 3 ~
三天入门 Cortex-M4——Kinetis 系列 野火嵌入式开发工作室
EXTI 外部 GPIO 中断例程 ..........................................................................................................................................................119
火
快速入门:EXTI 库使用方法 ..............................................................................................................................................119
EXTI 综合测试例程................................................................................................................................................................120
UART 模块 ......................................................................................................................................................................................123
快速入门:UART 库使用方法 ............................................................................................................................................123
UART 综合测试例程 ..............................................................................................................................................................128
ADC 模块 .........................................................................................................................................................................................134
快速入门:ADC 库使用方法 ...............................................................................................................................................134
ADC 综合测试例程.................................................................................................................................................................138
DAC 模块 .........................................................................................................................................................................................140
快速入门:DAC 库使用方法 ...............................................................................................................................................142
DAC 综合测试例程.................................................................................................................................................................144
FTM PWM 模块..............................................................................................................................................................................149
快速入门:PWM 库使用方法 .............................................................................................................................................149
PWM 综合测试例程...............................................................................................................................................................152
FTM 输入捕捉 模块 ......................................................................................................................................................................154
快速入门:FTM 输入捕捉库使用方法 .............................................................................................................................154
FTM 输入捕捉中断测试........................................................................................................................................................156
PIT 定时中断模块.........................................................................................................................................................................158
快速入门:PIT 定时中断库使用方法...............................................................................................................................158
PIT 定时中断测试例程..........................................................................................................................................................160
PWM、输入捕捉、PIT 中断综合测试 .............................................................................................................................161
I2C 模块 ...........................................................................................................................................................................................164
快速入门:I2C 通信库使用方法 ........................................................................................................................................164
I2C 通信实验测试...................................................................................................................................................................165
lptmr 低功耗定时器模块............................................................................................................................................................168
快速入门:lptmr 低功耗定时器库使用方法..................................................................................................................168
lptmr 低功耗定时器测试例程 ............................................................................................................................................170
DMA 模块........................................................................................................................................................................................175
快速入门:DMA 传输端口数据 .........................................................................................................................................175
DMA 测试例程.........................................................................................................................................................................180
MCG 模块超频 ...............................................................................................................................................................................183
快速入门:MCG 库使用方法 ..............................................................................................................................................183
快速入门:配置频率 .............................................................................................................................................................188
uC/O S ...............................................................................................................................................................................................192
DSP 数字信号处理单元...............................................................................................................................................................193
CMSIS 的介绍及其帮助文档的查找方法 .........................................................................................................................193
DSP 常用函数列表 .................................................................................................................................................................197
野 火 嵌 入 式 开 发 工 作 室
~ 4 ~
三天入门 Cortex-M4——Kinetis 系列 野火嵌入式开发工作室
DSP 测试例程 ..........................................................................................................................................................................198
火
野火 Kinetis 开发板问题集 ................................................................................................................. 200
资料在哪里可以下载到?(IAR、Jlink 驱动„„) ..........................................................................................................200
jlink 供电到开发板上 ..................................................................................................................................................................200
关于 Kinetis 时钟 ..........................................................................................................................................................................200
IAR 报错找不到头文件 ...............................................................................................................................................................201
BDM 下载问题 ...............................................................................................................................................................................202
printf 使用方法 .............................................................................................................................................................................203
Kinetis 单片机的 IO 口支不支持 5V 耐压? .........................................................................................................................203
Kinetis 最多可以输出多少个频率不同的 PWM 脉冲波? ................................................................................................204
kinetis 捕捉编码器脉冲计数方法 ............................................................................................................................................204
ADC 引脚中带 a、b 表示的意思 ..............................................................................................................................................205
不带有浮点单元能进行浮点运算吗? ....................................................................................................................................205
Jlink 解锁 Kinetis ..........................................................................................................................................................................205
野 火 嵌 入 式 开 发 工 作 室
~ 5 ~
三天入门 Cortex-M4——Kinetis 系列 野火嵌入式开发工作室
Kinetis 的启动分析(初学者大概浏览一下即可)
火
初步入门:初始化函数启动执行顺序
中断向量表
②
上电复位
①
③
Reset_Handler
start
中断向量表在 vectors.c 里定
义,在 vectors.h 文件里,前两
个元素分别映射到
__BOOT_STACK_ADDRESS 和
Reset_Handler(官方自带例程
为__startup),第一个为起始
SP 栈指针、第二个为复位中断
服务函数。
上电复位,系统会查询中断向
量表,把第一个元素的值赋给
SP 寄存器,把第二个值赋给 PC
寄存器,即上电后马上运行
Reset_Handler 函数。
在 start.c 文件里定义,精简后的
代码:
void start(void)
{
wdog_disable();//关闭看门狗
common_startup();
//复制数据段、中断向量表到 ram
sysinit(); //时钟初始化
main(); /** main 函数 **/
while(1); //避免停止运行
}
就是初始化系统:关闭看门狗、
复制数据到内存、配置时钟,然
后进入 main 函数
上电复位后第一个运行的函数,在
crt0.s 里用汇编实现。
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SECTION .noinit : CODE
EXPORT Reset_Handler
Reset_Handler ;初始化寄存器
MOV r0,#0
MOV r1,#0
MOV r2,#0
MOV r3,#0
MOV r4,#0
MOV r5,#0
MOV r6,#0
MOV r7,#0
MOV r8,#0
MOV r9,#0
MOV r10,#0
MOV r11,#0
MOV r12,#0
CPSIE i ; 关中断
import start
BL start
;调用 C 语言 编写的 start 函数
__done
B __done
END
common_startup
⑤
sysinit
⑥
main
复制中断向量表、初始化数据
段、以__ramfunc 声明的子函数
到 RAM 区(对 flash 操作的函数
必须这样)
初始化时钟和初始化串口,精简版代码:
void sysinit (void)
{
core_clk_mhz = pll_init(MCG_CLK_MHZ);
trace_clk_init(); //使能跟踪时钟,用于调试
fb_clk_init(); //FlexBus 时钟初始化
uart_init(FIRE_PORT, FIRE_BAUD);
//初始化 printf 函数所用到的串口
}
这里就是我们的执行
函数,我们在这里编
写自己的应用文件。
pll_init
④
pll_init 这个函数是用于锁相环超频的,在 mcg.c 里定义。MCG 模块一共有 9 中工作模式,按功
耗高低顺序:PEE、FEE、FEI、PBE、FBE、FBI、BLPE、BLPI、stop。
高频率意味着高功率,为了获取更高的频率,我们这里 pll_init 就是把模式进入 PEE。
野 火 嵌 入 式 开 发 工 作 室
~ 6 ~
三天入门 Cortex-M4——Kinetis 系列 野火嵌入式开发工作室
火
上电
简单初
始化
初始化
大致思
路
初始化
的整体
思路
wdog_disable
关闭看门狗
清寄存器
common_startup
Reset_Handler
start
sysinit
如果ROM启动,则复
制中断向量表.intvec
到RAM
修改中断向量表地址
为RAM里的地址
复制初始化数据
段.data到RAM
清除RAM中初始化为
0的数据段.bss
把以__ramfunc声明的
子函数 .textrw 复制
到RAM区
初始化锁相环pll_init
初始化printf函数用
到的串口uart_init
main
用户任务
启
动
过
程
分
析
步
骤
注:common_startup 函数并没有复制 常量数据 .rodata 、代码.text 。如果是
RAM 启动,代码会直接编译进去 RAM,掉电就会丢失数据。如果是 ROM 启动,就会
复制中断向量表到 RAM,设置中断向量表地址为 RAM 的地址,以加快中断响应速度。
野 火 嵌 入 式 开 发 工 作 室
~ 7 ~