K60硬件入门


-
K60入门 硬件是我见过最好的 供大家参考的Kinetis M4内核系列 感谢网站这个平台
下。模块功能的开启/关闭,比如我在程序中设置一个每1ms计时 次的时钟,初始化完毕后,我首先令其火效( Disable),因为我需要 个从外部输入的触发信号来作为开始计时的标志,只有当该信号出 现,对应的定时器模块才使能( Enable),与之比较类似的还有中断使 能/关闭和模块时钟使能/关闭的设置。重要功能属性设置,以PWM为 例,我们关心的指标主要有周期、占空比、初始板性、有效板性,以 此为目标寻找对应的代码,这样当程序中需要实时修改PWM属性时, 单独调冂对应的语句即可。研究例程序时一定要把于册用起来,关键 珸句中涉及的寄器操作一定要仔细翻看手册,哪一位该怎么设置, 先后顺序,置位还是清零,不能有一点马虎!在这给自己打个广告, 建议大家先研究我写的驱动库,代码量很小,常用功能都有(AD还不 是很完善)。大家在读代码的时候一定要注意看注释,寻找关键环节, 对照亍册,这样有的放矢可以缩短学习时间。最后冉提示一下,于册 中有两块内容经常被使用,个是259页的管脚功能表,另一个是264 页的引脚分布图。 GPIO (General purpose inputoutput K60引脚众多,几乎每个引脚都有复用功能。芯片上电复位之后, 大多数引脚处于 Disable的状态,必须进行相关配置选择特定功能才 可使用。由于K60中绝大多数寄存器都是32位的,所以直接读写寄 存器很痛苦,道理很简单,要进行设置的往往只有那么几位,其他无 关位的值是绝对不能修改的,这样就很麻烦,既要修改目标值,又要 保持其他值不变。还好丿家早就考虑到∫这一点,在飞思卡尔公司发 布的K60头文件—MK60N512WMDl00.h中有大量的宏帮助开发人员完 成这项繁琐的工作。举个例子说明一下,大家看这样一条语句 PORTC PCR5= PORT PCR MUX(0x1);//PTC5的第1功能 使用鼠标右键的 go to definition功能,一个一个搜索,首先是 PORTC PCR5,可以看到: #define PORTC PCR5 PORT PCR REG (PORTC BASE PTR, 5) PORTO_PCR5是一个宏,再次使用 go to definition功能,查看 PORT PCR REG,可以看到 #define port PCR REG (base, index) ((base)->PCR[index]) 这是一个带参数的宏,将参数替换可知 PORTC PCR5等同于 PORTO_ BASE PTR->PCR[5],最终指向的是端凵C( PORTCy第5引脚的 PCR寄存器(PCR, PinControlRegister,引脚控制寄存器),这是一个 32位的寄存器,负责选择引脚的复用功能。再看等号右侧的语句 PORT PCR MUX(0x1),这也是一个宏: #define PORT PCR MUX (x) ((uint32 t)((uint32 t)(x)<<PORT PCR MUX SHIFT))&PORT PCR MUX MASK) 后面两个也是宏: tdefine port Pcr muX mask 0x700u +define port PCR muX shift 8 将参数替换等效于(((uint32t)((uint32t)(0x1)<<8)&0x700u) 其中0x700u中的u是 unsigned的意思,和0x700等效,(uint32t) 是强制类型转换,这样理顺一下,原先的语句就划归成这样 PORTC BASE PTR->PCRL5 ((uint32t)((uint32t)(0x1))<8))&0x700u) 等号右侧的操作是这样的,先把0x1变成32位数据(因为寄存器是 32位的),左移8位之后再变成32位数据(此处是防止数据溢出的保 险措施),最后和0x700进行按位相与(按位与&和按位或是实现单 独改写某位而不影响其他位的一种方法,至于为什么可以这样做,自 口算算吧!)。这样一系列操作的结果就是把端凵C第5引脚的PCR 寄存器的第8、9、10位改写成001,其他配置不变,大家注意看手 册 Addresses:4004_9000h base+Oh offset+(4d), where n=Od to 31d Bt31s029282726252423222120:918716151191211109765432 H 0 0 0 IROC MUX Rese0000000000050000000000000000000 PORTX PCRn field descriptions PCR寄存器的8、9、10位就是负责设定引脚功能的MX 108 Pin mux control MUX The corresponding pin is configured as follows 000 Pin Disabled(Analog) 001 Alternative 1(GPIO 010 Alternative 2(chip specific) 011 Alternative 3(chip specific) 100 Alternative 4(chip specific 101 Alternative 5(chip specific 110 Alternative 6(chip specific) 111 Alternative 7(chip specific /JTAG/NMI) 上面的操作实现了引脚第1功能(GPI0)的选择。大家再看芯片的引脚 功能表: Pinout ALTO 屺T1 ALT2 ALT3 ALTA ALT ALT ALT :09 A9 DISABLED 110 D8 DISABLED PTO ALTE B ADIC CIPO OU 从表中可以看到第1功能是PTC5,也就是最基木的输入输出功能 希望人家用心体会上面讲的方法,灵活使用 go to definition功能, 戒骄戒躁,一句一句用心研究。读硬件程序是一件枯燥又有趣的事情, 个中滋味深入其中才能有所体会。 言归正传,下面的讲解屮将不会再对具体的语勹进行解释,重点 将放在模块关键属性的设置上,希望大家举一反三,自己研读例程序, 分析思考,汝取养分 GPO是所有MCU都具备的最基本功能。关键点主要有: 选择引脚为GPI0功能;设置数据方向(输入或输岀);初始状态 设置(对输入来讲是上/下拉电阻的选择,对输出来说是初始输出电 这里要特别提醒初始状态的设置,尤其是当引脚作输入功能时, 悬空不定的状态对系统来说是非常危险的,很可能造成误动作!另 外K60是3.3V器件,不能和5V器件直连,中间需要串联一个1K电 阻,也可以通过一个三极管实现电平匹配。所有的数字集成芯片都有 自己的电平标准,像74LS系列以支持5V供电,适用的电平范围就比 较小,74HC、74VC、C系列供电沱围广,不同的供电电压对应不同 的高低电平范闱,使用比较灵活,在3.3V供电系统中建议使用74HC 系列的数字芯片进行信号逻辑运算 Interrupt 在单片机应用中使用中断是家常便饭,一个优秀的程序员必须要 对中断的机理有非常清晰地认识,比如何时进栈,何时弹栈,保护现 场的内容,中断嵌套,仲裁机制等等问题 使用中断要注意的关键问题:明确中断源,认清中断触发信号究 竟来自何处,是芯片内部产生(比如PIT还是外部输入( Input Capture);中断使能的控制,通常情况下,我们并不希望嵌套中断出 现(因为高优先级打断低优先级发生的时机不确定,正常时序可能会 被打乱),在进入中断服务函数后往往会关闭中断,程序执行完毕后 再打开,这样就保证了该中断服务程序在运行时不会被其他中断源干 扰;千万不能忘记清除中断标志位,否则程序眺出后会马上再次进入, 形成死锁;中断服务函数与中断源要一一对应。 在示例工程中有一个名为 vectors.h的头文件,K60的中断向量 表就在里面。大家看这是其中的两个宏 #define VECTOR 019 default isr //0x0000 004C 19 3 DMA DMA Channel 3 transfer complete #define VECTOR 020 DMA ISR //0x0000 0050 20 4 DMA DMA Channel 4 transfer complete default isr是默认的中断服务函数不干仁何事, DMA ISR是自定义 的中断服务函数,注释指明了中断源是DMA通道传输完成中断,中断 向量号是19、20,RQ编号是3、4(注意中向量号和IRQ编号不同! 系统内核的不可屏蔽中断没有IRQ编号),通过这个宏就可以建立中 断服务函数与屮断源的一一对应关系。提醒一下,在 vectors.h屮要 声明 DMA ISR是外部函数,否则编译会报错!也就是在中断向量表之 前必须要有这句 extern void DMA ISR(void) 最后谈一下中断优先级的设置,K60共有16级可编程中断优先 级,通过寄存器 NVICIPm设置,mn是中断源的IRQ编号,注意不是 中断向量号!!例如: NVICIP4=0x10;//一定要注意4是IRQ编号!!!! NVICIPmn是16位寄存器,高四位设置优先级,低四位固定为0不可 修改,数值越小优先级越髙。再联系一下之前的宏 #define VECTOR 020 DMA ISR //0x0000 0050 20 4 DMA DMA Channel 4 transfer complete 这样就实现了设置屮断源(DMA通道4传输完成中断)的优先级为4的 任务。 System clock 现在市面上卖的K60型号大多是MK60N512VMD100,其中VⅧ)100 指的是系统内核最高频率。注意是内核Core不是总线Bus!!有什么 区别呢?我们来看一个例子 int a=o: int b=1 int c=2: c-a 系统运行频率的快慢决定c-a+b的运算速度,如何决定呢?系统执行 C=a+b这条语句总共要经历这样几个过程:从内存中将a和b读入到 CPU内部寄存器,在CPU内部执行加法运算,结果存储到另一个CPU 内部寄存器中,最后将计算结果从CPU内部寄存器写入到内存指定位 置(变量c的存储地址)。整个过程的第一步和最后一步是CPU通过总 线对外围设备的访问,只有第二步是在CP内部完成的。因此内核频 率和总线频率均会影响系统运行速度,其中总线频率的影响所占的比 重更大,因为变量存储在RMM屮,程序代码存储在ROM屮,而RAM和 ROM都是挂载在总线上的设备。 对于智能车这种追求速度的系统来说,程序执行速率是极其重要 的,尤其是摄像头组,摄像机采集二维图像,数据量大,传输速度又 快,是典型的高速外设,传统的XS128很难与其直连(除非摄像机降 频使用),必须外接一级高速缓存器FIFO才能保证同步 经过实际测试wMD100型号支持的最高频率是150M,这个150M 是总线频率所能达到的最高值,内核实际可以超频到200M以上。最 近市面上出现∫VⅧ150型号,支持浮点运算,功能貌似吏加强大(以 是猜测,本人没有用过),志在国一的同志不防购入一款试试。 最后说一下时钟频率初始化的代码,建议大家不要花时间研究, 太复杂又没多大意思,全都是些固定的流程也不具有什么通用性(不 同种类MU时钟初始化过程差异比较大),所以大家直接用示例工程 中的时钟初始化代吗即可(内核与总线频率均为1501),不要闲着没 事修改 sysinit.c中的内容!WMWD150会尽快开发,不日将与大家见 面,敬请期待 PIT PIT( Periodic interrupt timer周期性中断定时器)实质是一个 每隔固定时间就会产生一次中断请求的定时装置,大多用于程序调度 和计时操作。PIT功能使用起来很简单,但想要用好非常困难。因为 但凡和时序冇关的东西都必须十分谨慎,我们所编写的控制程序是严 格按照流程进行的,哪一步在前,哪一步在后,都是非常讲究的!关 于时序的问题涉及到连续控制系统的离散化,比较复杂,在此不 展开。关于PIT的使用,需要注意这样一个问题:定时周期到底是多 少? 为什么这么问呢?之前也说过,PIT多用于程序调度,很多人都 把系统的主体程序直接放到PIT中断服务函数内,这样就会产生一个 问题,如果自定义函数的运行耗时超过PIT中断周期怎么办?答案是 程序跳出PIT屮断服务函数后又会马上进入(中断早已产生),其他函 数无法得到响应!这可是个严重的问题,不但周期不准影响控制精度, 而且把其他函数也掐死了!因此不建议上述做法,我的习惯是使用 PIT更改标志位,在主函数 main o内用标志位进行程序调度。当然, 把函数都放进PIT里也没有太大问题,但必须进行程序耗时测量,也 就是在PIT中断服务函数首部进行引脚电平的翻转操作,使用示波器 观察对应引脚的电压波形,其周期应该是PTT周期的2倍(高电平加 低电平算作一个完整周期) DART UART( Universal asynchronous Receive Transmit通用异步收 发)说白了就是串口通信,通常用于建立上位机(PC上的 windows程 序)和下位机(单片机)之间的连接。串口是调试利器,尤其是对于K60 这类内核结构复杂、在线调试不太方便的高档MCU来说!寻找程序中 的逻辑错误需要对系统中的关键环节进行实时监视,此时就需要通过 串口将重要的变量发至PC端的上位机用于观测。在使用UART时要注 意这样几个问题 通信波特率当前市面上出售的串口转USB模块支持的最大波特

2.45MB
k60 开发入门必读
2012-04-29详解K60的入门内容,入门必读 从硬件架构到底层代码再到各模块的使用都有明确的分析
637KB
k60硬件入门
2018-05-31k60学习!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
503KB
三天入门k60,入门手册,用于学习
2015-10-04三天入门k60,飞思卡尔,学习rar软件 轻松入门。帮助大家学习k60手册,有其他问题也可以和我交流,参加飞思卡尔智能杯的同学加油
7.70MB
飞思卡尔K60 单片机三天快速入门
2012-11-18随着技术的发展,单片机型号越来越繁多,入门的难度也逐渐加多,学习周期自 然不断延长。为了让初学者快速入门,减少学习时间,尤其是为了那些参加智能车比 赛而没时间学习深入研究Kinetis单片机朋友,我们
61KB
龙邱k60核心板原理图
2019-02-07龙邱k60核心板原理图,有需要的可以看看,里面还算清楚
8.35MB
飞思卡尔单片机K60资料
2018-01-26内含飞思卡尔单片机K60的的入门学习资料,包括IAR,keil等编程软件的运用
7.91MB
一天攻破K60
2018-09-30想快速上手 K60/KL26 单片机吗?山外 K60/KL26 库,是你最好的选择:简单的 调用函数接口,良好的编程风格,让你可以不了解寄存器配置的情况下快速入门 Kinetis 系列单片机。 目前的
2.46MB
K60底层开发库
2013-04-17K60底层开发库
153.24MB
k60电磁车整套
2018-12-03资料里面有k60代码和硬件各个模块的PCB板子。希望你取得一个好的成绩
172B
K60 代码源程序
2013-11-23K60的程序 对你会有帮助 下载之后可能不能用哦~~
136KB
K60 技术手册 中文
2014-04-10该节阐述了 MCG 模块如何配置,若想详细了解该模块,请参见该模块的章节。
82KB
k60引脚图一览
2019-02-07清晰的k60引脚图,可以用来做k60封装时用,引脚上包括对应的数字和功能
20.2MB
K60寄存器手册(Kinetis K60 Reference Manual)
2018-07-24官方下载的K60参考手册,英文版,各个功能介绍,共一千多页。愿意就从我这里下载,给点积分,没积分的话就当分享了,附上官方下载链接。 https://www.nxp.com/docs/en/refere
8.76MB
k60电机驱动程序
2015-03-25飞思卡尔k60芯片 电机驱动 检测程序
20.51MB
k60中文数据手册
2013-07-26呕心沥血找到的,k60的很全的数据手册了,20兆~
920KB
k60超声波测距
2018-08-05基于野火库,利用pit计时,测量超声波得到距离,适合新入门k60
13.27MB
K60参考指南 数据手册
2015-12-10k60的资料 英文版 技术手册参考指南 K60说明书
3.22MB
K60驱动OLED液晶屏程序
2012-05-09这是用龙丘买的OLED液晶,移植了一下他那个XS128的程序到K60下,K60能正常使用该液晶。希望能帮助到飞思卡尔的车友们
1.96MB
飞思卡尔 K60 数据手册
2013-04-13K60 官方技术首次,编程入门。含多种模块解说和实例代码。
79.6MB
恩智浦飞思卡尔K60官方库
2021-01-15恩智浦飞思卡尔K60官方库
6.53MB
K60详细教程
2013-10-01详细的K60教程,快速入门
191.28MB
山外K60库完整工程.zip
2019-10-20山外原版K60参考代码版本V5.3支持FX、FN和DNZ系列的K60单片机,完整工程,解压即可使用
3.16MB
K60 移植GUI 适合初学者
2014-03-10K60移植GUI不带操作系统,不带触屏,适合初学者学习
20.40MB
K60中文资料整合版
2013-07-19K60中文资料整合版,学习者可以轻松的入手
59.26MB
k60学习资料包
2015-01-08学习飞思卡尔单片机中关于k60的资料 ARM Cortex M4嵌入式系统开发实践-基于飞思卡尔K60系列微控制器.pdf ARM+CORTEX+-M4自学笔记:基于K60.pdf K60中文资料整合
28.72MB
k60 mpu6050例程
2019-01-06该mpu6050是k60单片机的例程,亲测可用,使用软件iic进行通信
207KB
单片机K60核心板原理图
2017-03-22K60核心板原理图,144P。
1.10MB
飞思卡尔智能车K60程序
2013-07-04飞思卡尔智能车 K60 程序 ,开发环境 IAR
170KB
K60PWM波产生程序
2018-03-13飞思卡尔智能车设计大赛基于K60的PWM波产生程序,用IAR进行编程。
-
博客
VS Code python设置及jupyter快捷键设置
VS Code python设置及jupyter快捷键设置
-
下载
ACFD作业3_2018311045.pdf
ACFD作业3_2018311045.pdf
-
下载
使用Python的项目-源码
使用Python的项目-源码
-
学院
Docker从入门到精通
Docker从入门到精通
-
博客
Python字典
Python字典
-
博客
持续集成入门到精通:Maven私服Nexus的搭建
持续集成入门到精通:Maven私服Nexus的搭建
-
学院
元素周期表-three.js实战详解
元素周期表-three.js实战详解
-
下载
私有存储云如何构建?
私有存储云如何构建?
-
下载
AndroidMVVM应用框架构建过程详解
AndroidMVVM应用框架构建过程详解
-
学院
JMETER 性能测试基础课程
JMETER 性能测试基础课程
-
下载
深度学习认知计算综述
深度学习认知计算综述
-
博客
Java-juc(3) Semaphore 源码分析
Java-juc(3) Semaphore 源码分析
-
下载
iOSApp签名的原理
iOSApp签名的原理
-
博客
THONNY更新pip
THONNY更新pip
-
博客
r9 4900h和r7 5800h 性能对比哪个好
r9 4900h和r7 5800h 性能对比哪个好
-
下载
ACFD作业2_2018311045_xuyibing.pdf
ACFD作业2_2018311045_xuyibing.pdf
-
下载
epam_python_autumn_2020:EPAM SPb秋季python课程-源码
epam_python_autumn_2020:EPAM SPb秋季python课程-源码
-
学院
【Python-随到随学】FLask第二周
【Python-随到随学】FLask第二周
-
博客
通过maven集成sonarqube
通过maven集成sonarqube
-
下载
社交网络-源码
社交网络-源码
-
博客
vue 跳转同一路由,页面不刷新解决方案
vue 跳转同一路由,页面不刷新解决方案
-
博客
C/C++编程日记:用C语言写猜数字游戏
C/C++编程日记:用C语言写猜数字游戏
-
下载
铲斗-源码
铲斗-源码
-
学院
FTP 文件传输服务
FTP 文件传输服务
-
学院
C++代码规范和Doxygen根据注释自动生成手册
C++代码规范和Doxygen根据注释自动生成手册
-
下载
基于正交试验设计的测试用例选择方法
基于正交试验设计的测试用例选择方法
-
学院
龙芯实训平台应用实战(希云)
龙芯实训平台应用实战(希云)
-
博客
Ubuntu启动Xilinx Vivado
Ubuntu启动Xilinx Vivado
-
学院
工程制图 AutoCAD 2012 从二维到三维
工程制图 AutoCAD 2012 从二维到三维
-
学院
vue3从0到1-超详细
vue3从0到1-超详细