视频教程

首先说明

半路出家 母语能力十分有限 视频中肯定有讲错 或者理解不对的地方 还望大家能多多见谅 欢迎大家提出宝贵意见!

  • 针对人群: 学习 飞思卡尔Kinetis K系列的朋友们 硬件不限
  • 入门难度: 纯小白Plus+ 高手勿喷
  • 针对芯片: K60DN512系列
  • 论坛: www.beyondcore.net

谢谢大家!

学前班 - 环境搭建

软件工具 开发环境安装

源代码编辑工具介绍和使用

  1. NotePad++
  2. SourceInsight

驱动类 安装

  1. 异步串口(UART)驱动 CH340G
  • 顺便介绍下串口: 最古老的的计算机通讯方式 速度慢 简单 比如现在在 单片机中流行的 UART 和 SPI 就是数据串口,好像很多人都误认为只有UART叫做串口。。
  1. Jlink 驱动 (Jlink JTAG SWD 都是什么)

UART 串口工具 安装

  1. 串口调试助手 下载:www.beyondcore.net
  2. PuTTY 下载:官网

IDE 安装

  1. 什么是IDE? 集成开发环境
  2. 主流IDE: Keil(MDK) 下载 官网
  3. 主流IDE:IAR (版本兼容问题。IAR兼容性差) 下载 官网

获取必要的资料

芯片介绍 手册下载

  1. 上节课补充: 所有软件都尽量安装在英文目录下 否则可能出现比较纠结的问题。
  2. Goto www.freescale.com 获得最详细最专业的内容 和选型表
  3. 获取参考资料: (都会放到开发板光盘中 但是推荐大家学习自己寻找获取 不要拿来主义 毕竟这是工程师的基本技能)
  4. 所有资料都 我都会放到开发板光盘资料中

Keil 工程配置 新建工程 目标:点亮小灯

芯片启动过程(启动文件做的事情)

  1. CMSIS 启动标准文件 在哪? Keil安装目录
  • MK60D10.h 芯片头文件(.h)
  • system_MK60D10.h 时钟配置头文件(.c)
  • startup_MK60D10.s 启动文件(.s)
  • system_MK60D10.c 时钟配置文件(.c)

启动文件内容做了什么

  1. 设置栈 (调用C函数前必须设置栈) CM4手册2.1.3
  2. 调用main
  3. 设置main返回地址
  4. 关看门狗 (SystemInit 函数实现)
  5. 设置时钟 (SystemInit 函数实现)

code indent 设置

点亮小灯所要做的寄存器配置

  1. SIM - 开关
  2. PORT - 选择引脚复用
  3. GPIO - 设置输出 输出1
  4. 位操作 |= &= ~ 不要影响其他位

IAR 工程配置 新建工程 在线调试 目标:点亮小灯#

CMSIS 启动标准文件

  1. 启动文件 system_MK60D10.c startup_MK60D10.s
  2. 头文件 system_MK60D10.h MK60D10.h
  3. 和 Keil相同,但是由于编译器的差别startup_MK60D10.s内容是不同的,但是实现的功能是一样的。
  4. system_MK60D10.c system_MK60D10.h 和 和 Keil完全相同。都是C语言编写。
  5. 启动文件的作用见 上一课:Keil新建工程

code indent,Linker file,flash loader 头文件路径 等配置

  1. Code indent: Tools->Option
  2. Linker file: 默认即可
  3. flash loader:默认即可
  4. 头文件: 相对路径 绝对路径

实现点灯代码

  1. 点亮小灯的代码和Keil完全一样。
  2. Debug 和 Release 区别,优化等级 调试时请用Debug
  3. 选择 仿真器 , IAR 在线调试
  4. IAR下几个好用的快捷键:
  5. Ctrl+D 调试
  6. Ctrl+K 注释
  7. Ctrl+Shift+K 反注释

其他

  1. 以后视频讲解 主要以Keil为主,实际上用Keil和IAR主要看个人偏好,两者相同优化等级下 编译出来的代码size 和 执行效率相近。

3 GPIO PORT 原理配置 详细介绍 调试技巧 工程组织

3.1 Jlink下载调试时可能遇到的问题

3.2 头文件详解

  1. GPIO知识通用,适用于大部分 Kinetis系列
  2. 重新组织工程 可以根据自己的喜好 (include path问题 open file dir问题)
  3. 头文件中的GPIO寄存器定义
  4. volitale 防止编辑器自作聪明 优化
  5. __I __IO 什么意思?
  6. const 关键字 防止误写 帮助程序员少犯错误

Keil IAR 在线调试 蜂鸣器 按键读入

  1. Keil 中在线调试
  2. IAR 中在线调试
  3. 调优化等级,看现象
  4. 驱动蜂鸣器
  5. 数据读入 (配置片内上拉电阻)

开发板例程文件结构介绍 GPIO 及 位带操作 按键实验

开发板例程结构介绍

  1. 获得开发板例程代码 www.beyondcore.net
  2. 新建工程 复制工程模板 都可以
  3. 加入全局宏定义 以包含正确的头文件
  4. 至少包含 common.c common.h 和 gpio.c gpio.h 和 systick.c systick.h
  5. gpio驱动文件演示 及原理实现
  6. 按需求加入其它driver文件

位带操作 及 实现原理

  1. GPIO位带操作原理 本质都是操作寄存器 省去了 读-改-写 的步骤 实现原子操作。
  • 输出 操作 PDOR
  • 输入 操作 PDIR
  1. CM4 GUD 2.2 Memory model
  2. CM4 GUD 2.2.5 Optional bit-banding
  3. 流水灯

简单的按键状态机

  1. 位带操作的应用

K60时钟系统简介

  1. 相对比较复杂。
  2. 最重要的图:5.3
  3. 时钟名称介绍: 主要的是: 5.4.1
  4. MCGOUTCLK
  5. Core/System Clock
  6. Bus Clock
  7. Flexbus Clock
  8. 有关的模块:
  • MCG:输出各种时钟,有2个内部时钟源 和倍频器 FLL PLL
  • SIM:控制时钟开关,分频
  • OSC:外部晶振震荡电路
  1. 几种时钟模式,实际上就是在MCG模块中各种走向
  • FEI: FLL Engaged Internal
  • FEE: FLL Engaged External
  • PEE: PLL Engaged External
  1. MCG模块下面的Figure 25-1.

  2. 应用,比较复杂,调试也比较困难,容易出错,

  3. MCG->C6 控制PLL倍频

  4. MCG->C4控制进入PLL前的分频

  5. 直接添加system_xxx.c 就可以了。(最好也不要修改原来的)

Systick 系统滴答定时器

  1. 中文翻译 只好叫做系统滴答定时器 CM4手册 4.4章节
  2. 他属于CM4内核外设,和K60没关系,他的寄存器定义在Core_cm4.h
  3. 寄存器介绍
  4. Polling 模式实验延时
  5. 中断方式,中断向量表 介绍 硬中断 弱定义

UART 通用异步串行收发器

基本概念介绍

  • 首先说明:K60 UART 功能强大(FIFO 硬件流控 各种帧格式 IR 等等)->比较复杂->比较难配(寄存器多)
  • 本节只演示学习最常用的功能。如果比较了解串口可直接PASS本节
  • 串口硬件: 单片机TTL电平的串口 数据的传输使用 2根线 Tx Rx(当然还有其他线) 一般还要供地 , 看开发板原理图
  • 全双工概念: 准许同一时刻2个方向上同时传输(手机)
  • 异步概念: 按帧发送,一帧一帧之间没有固定的时序要求,简单,效率低(有起始位和停止位的开销)
  • K60 所支持的UART 一共5个,引脚在哪里看 RM-Pinout一节
  • 串口帧格式: 最简单的一种介绍 N-8-N-1 RM:52.4.5.3

应用演示 轮询发送 轮询接收##

  1. 使用于大多数 K系列
  2. 例程里默认将printf连接到第一个初始化的串口上
  3. 基本函数:
  • UART_Init
  • UART_ReadByte
  • UART_WriteByte
  1. 基本演示 LOGIC
  2. 校验位演示: 8bit parity 9bit parity- no parity 用LOGIC抓图
  3. parity 奇偶校验位:最简单的错误检测机制
  • 校验位怎么算?UART->C1[PT] 有解释

更加简便的一种初始化方式 打印芯片信息

  1. 上节补漏: UART_QuickInit
  2. 打印芯片信息

应用演示 中断发送 中断接收##

  1. 为什么要中断发送接收,轮询, polling blocking ,non-blocking 概念
  2. K60里有很多UART中断,例程代码只实现了2个最常用的
  3. 发送完成中断
  4. 接收完成中断
  5. UART中断接收例程详解(常用的模式)
  6. UART中断发送例程详解(不常用)
  7. 编程实现-原理-软回调函数
  8. Polling IT DMA 3种基本模式

中断发送 中断接收

  1. 主要学习中断接收就好,中断发送不是很常用

PIT(周期性定时器模块)

原理寄存器讲解

  1. 很简单,类似Systick 相当于Systick 的增强版
  2. 寄存器不多,逐一介绍逐位介绍
  3. SysTick能实现的PIT都能实现,PIT能实现的SysTick也都能实现
  4. 时钟源 BusClock, 可以用PIT Trigger K60上其他硬件模块
  5. 寄存器
  • MCR : 全局控制
  • LDVAL:Reload值
  • CVAL :当前计数值
  • TCTRL:各个通道开关
  • TFLG :中断/溢出标准

PIT具体编程应用

  1. 例程源码分析 产生定时中断

看门狗

看门狗原理介绍

  1. 什么是看门狗?
  • 看门狗实际上是一计数器,在程序运行中,你得抽空去清看门狗,不能让计数器计满.一但程序在干扰下跑飞了,没去清看门狗,看门狗数值计满后,就会发出一复位脉冲,让程序复位。
  1. 看门狗本质上也是硬件定时器,只不过他是正向计数的
  2. 开启看门狗后,要在看门狗时限内“喂狗(重新清0Val值)” 这也是system_xxx.c 里面先禁止看门狗的原因
  3. 时钟源 busclock or LPO clock
  4. 独立看门狗 窗体看门狗

看门狗编程实现

  1. 应用编程实现,设计demo
  2. 独立看门狗
  3. 窗体看门狗
  4. wdog reset counter 记录看门狗复位了多少次

外部引脚中断

外部引脚中断原理

  1. Kinetis K 系列几乎所有的引脚都可以配置为 外部中断、
  2. 中断触发条件都可以编程设置为:
  3. 上升沿触发
  4. 下降沿触发
  5. 上升或下降沿触发
  6. 高电平触发
  7. 低电平触发
  8. 相关的寄存器位 逐寄存器逐位讲解
  • PORT->PCR[ISF] 中断标志
  • IRQC 触发源配置

外部引脚中断编程实现

  1. 例程分析: 每一个端口32个引脚共享一个中断,看中断向量表
  2. 例程分析, 外部引脚中断
  3. 总结: 开启中断的一般步骤:
  4. 开启模块本身的中断(IRQC)
  5. 开启NVIC控制器上对应的中断(NVIC_EnableIRQ函数)
  6. 配置中断优先级(下节课讲)

NVIC 嵌套向量中断控制器

原理介绍

  1. 比较理论 比较枯燥,编程应用可以直接PASS本节
  2. NVIC 嵌套向量中断控制器,内核外设 内核中断管理器
    他与内核有很深的"私交" 通过PPB总线连接。
  3. 相关 寄存器:
  • ISER: Set Enable
  • ICER: Clear Enable
  • ISPR: Set Pending
  • ICPR: Clear Pending
  • IABR: Active bit Register
  • IP: Priority Register (8Bit wide)
  • STIR: Software Trigger Interrupt
  • 还有一个在 SCB->AIRCR 中,控制优先级分组
  1. 对用户接口和作用:
  • 中断开关
  • 管理中断优先级
  1. 中断开关:
  2. 相关寄存器 ISER[8] ICER[8]
  3. 自己配太麻烦,ARM再推CMSIS,所以他肯定有CMSIS函数 Enable_IRQn Disable_IRQn
  4. 看下我们的开发板例程,实际上开中断之钱都会打开NVIC
  5. 中断优先级
  6. 每个中断可以配置为255级,就是一个8bit寄存器分配给一个中断IP[0] - IP[240], 但是根据K60RM,只有高4位有效。(记住每个中断有4位配置位,优先级0-15)
  7. 这16位中断优先级到底怎么优先呢? CM4 GUD:
  8. 这16个优先级又被分成
  • 组优先级(抢占优先级)
  • 子优先级

编程应用

  1. PIT demo NVIC 抢占与非抢占的效果。
  2. GPIO KEY 全面演示NVIC中断优先级的功能。

ADC(模数转换模块)

K60 ADC功能介绍及引脚分配

  1. 特性: (SAR ADC)
  • 最大16bit转换精度
  • 最大4组查分,24路单端输入
  • 可配置的转换速度
  • DMA触发,硬件软件触发,连续触发
  • 可配置的时钟源
  • 内置温度传感器
  • 硬件平均功能
  • 可选择的电压参考源
  • 自校准
  • 转换时间,后面讲
  1. 引脚:
  • VDDA VSSA: 模拟电源输入
  • VREFH VREFL:模拟参考电压
  • ADC_Chn 转换通道: 包括内部通道 (ADC模块只有2个,通道有N个,分时复用)
  1. ADC转换通道:3.7.1.3
  2. ADC通道对应的引脚如何找? Ch10 PinMux
  3. 开发板上ADC通道: ADC0-DP0,ADC0-DM0
  4. ADC模块block: 35.1.2
  • 很强大,细节很多 本视频也不可能把每个功能细节通通走一遍,所以只能带大家学习下基本的架构和功能,引导大家自己学习
  • 后面还需要大家努力自己挖掘。其实学到这里,配置这些底层操作无非就是对就是对寄存器写来写去。
  • 这种编程,软件完全有硬件决定,手册上让你这么写,你就得这么写,没有那么多为什么。所以,学习一款芯片的外设,其实也称不上学习,就是看说明书,把说明书上的语言描述编程代码而已。对于编程人员没有多少自由可言。并非真正意义上的软件编程。嵌入式底层驱动,尤其是裸机驱动,更是如此。

编程应用

  1. 上节课遗留:
  • 通道复用: 3.7.1.5
  • SCAn寄存器 SC1A只能软件触发 SC1n 可以硬件触发。
  1. ADC 单端输入例程 步骤: 看ADC_Init()
  2. 打开时钟 SIM->SCGC6 SIM->SCGC3
  3. 校准(略过)
  4. 选择输入时钟源 ADC->CFG1
  5. 分辨率 ADC->CFG1
  6. 时钟参考源ADC->SC2
  7. 触发模式 ADC->SC2
  8. 是否连续转换 ADC->SC3
  9. 硬件平均功能 ADC->SC3
  10. 单端差分 是否使能中断,配置通道 ADC->SC1n
  11. 配置Pinmux
  12. ADC 单端输入例程 使用ChlB Mux
  13. ADC中断
  14. PIT 触发ADC
  15. 转换时间计算: 35.4.5.5
  16. 结果寄存器R 数据保存格式

ADC 内部温度传感器

  1. 属于ADC模块,算是ADC模块的一个应用 35.4.9

VREF 电压参考源#

  1. 可以产生1.2V 电压参考 供给内部模拟模块或者外部模块(通过VREF_OUT)
  2. 应用例程

DAC模块

原理介绍

  1. 比ADC略简单,特性 固定12位,不同的系列有0,1,2 等等多个DAC模块
  • 多说一句,读手册是最全面,最好的学习方法。如果想深入学习芯片本身,通读一遍英文原版手册是最好的办法和最基本的要求。如果想直接应用,直接用别人的代码就好。无需了解太详细。
  1. 输出引脚
  • DAC_OUT0
  • DAC_OUT1
  1. Block Diagram
  2. 触发方式:
  • 硬件触发(PDB)
  • 软件触发
  1. 参考源选择(Chip Configuration)
  • 3.7.3.3
  1. 数据触发:硬件16word buffer
  2. 无buffer 37.5.1
  3. 有buffer 通过C2 DACBFUP 设置上限
  4. 中断触发源:
  5. DACBFWMF : watermark flag
  6. DACBFRPTF: reach 0
  7. DACBFRPBF: reach C2[DACBFUP]
  8. 输出电压计算公式

应用例程

  1. 用 ADC 测量DAC输出的电压
  2. Buffer模式下 软件触发
  3. DAC 产生中断

TSI 电容触摸

原理介绍

  1. 原理介绍
  2. 56.7.1
  3. 频率计算公式:Figure 56-35. Equation
  4. 一个电极采样时间: Figure 56-37. Equation 3: Electrode sampling time
  5. K60上的TSI引脚 Pinout
  6. 中断 EndOfScan 中断 或者OutofRange

编程应用

  1. 开发板上TSI的连接 (注意和JTAG共用 所以下载后要拔掉JLINK)
  2. TSI获得Counter并打印
  3. TSI 中断,控制小灯

RTC 实时时钟

原理介绍

  1. 目的: 提供掉电不丢失的 实时时钟
  2. 特性:
  3. 外部引脚
  4. EXTAL32
  5. XTAL32
  6. RTC_CLKOUT
  7. RTC_WEAKUP
  8. RTC时钟来源 独立的32.768KHz时钟 秒脉冲是如何产生的? 如何将计算真实时间?
  9. RTC寄存器介绍

编程应用

  1. RTC 读取 设置时间
  2. RTC 闹钟设置
  3. RTC ClkOut

DMA 直接存储器读取

基本概念介绍

  1. DMA(Direct Memory Access)是 直接内存存取, 数据搬运时无需CPU干预 比如memcpy的问题
  2. 寄存器比较多,换一种讲法。先讲例程和概念
  3. 既然是内存存取,必要的基本参数有:
  4. 源地址 目的地址(来源去向)
  5. 传输多少字节?
  6. 每次传输的位宽? 8位16位32位?
  7. 传输什么时候开始,每次的时间(触发源)是什么?
  8. 每次传输完成后,需不需要调整源地址 目的地址, 调整多少?

K60 EDMA Mem2Mem例程:

  1. K60有一个eDMA模块一个DMAMux一起来完成DMA工作,eDMA根据芯片不同有不同的通道数,每个通道都可以独立完成传输,我们的芯片有15个通道。
  2. 主循环MajorLoop: 循环多少次子循环
  3. 子循环 MinorLoop:每次tirgger之后,数据搬运多少次
  4. 触发源查询?Chip config
  5. Mem2Mem 的代码分析
  6. DMA的中断 Half Major
  7. 修改参数,看现象

寄存器分析

  1. K60上的DMA系统分为 eDMA 和 DMAMux
  2. DMAMux
  3. eDMA 主要寄存器
  4. CSR

使用DMA来发送接收串口数据

  1. DMA-UART发送数据
  2. DMA-UART回环测试例程

使用DMA来测量外部脉冲

  1. 看到智能车论坛有这个例程

I2C 总线

部分讲解

  1. I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
  2. 只介绍最简单也一种I2C模式: 2线制 7位地址 K60做主机 最快100Kbit模式
  3. 信号:
  4. SCL 时钟
  5. SDA 数据
  6. 不同的型号的芯片上也有不同数量的I2C模块,开发板上的芯片有2个I2C 模块
  7. I2C传输帧格式: 51.4

I2C 扫描总线上的设备

I2C AT24CXX

I2C ADXL345

Flexbus 总线

6800 & 8080 总线

  • 很多外设基本遵循8080或6800时序
  • 6800又叫moto总线,8080总线又叫Intel总线。
  • Intel总线的控制线有四根,RD写使能, WR读使能, ALE地址锁存, CS片选。
  • 而moto总线只有三根,R/W 读/写,ALE地址锁存,CE片使能。

K60 Flexbus

  • FlexBus 在System Mamory Map中的区域
  • AN4393
  • 引脚 Pinout & Chip configuration 一节有
  • 可以接6个不用的外设

FlexBus驱动 SRAM

  • 硬件接线
  • 程序代码

FlexBus 驱动LCD

  • 硬件接线
  • 程序代码

FTM 模块

  1. 灵活定时器 K60中比较强大和复杂的定时器 就想他的名字一样,非常灵活,内容非常多。本视频也不可能一一尽述。更多内容还需要大家慢慢发掘
  2. 主要应用
  3. 既然是定时器,可以当普通定时器用
  4. 产生PWM波 电机控制等
  5. 正交解码
  6. 输入捕捉
  7. K60中的FTM模块,3个,每个模块又有不同个数的通道: FTM_CH0-FTM_CHn(PinOut)
  8. 基本原理 Functional Description

FTM 产生PWM波

  1. CPWMS & EPWM
  2. Function Desciption
  3. 39.4.6

FTM 正交解码

  1. 编码器种类型号
  2. 介绍
  3. 例程

FTM 输入捕捉

使用DMA来实现多路的脉冲计数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值