当前课程知识点:ARM微控制器与嵌入式系统 >  第五章 ARM微控制器的各种外设 >  5.5.2 ARM微控制器外设:PWM寄存器与编程 >  5.5.2 ARM微控制器外设:PWM寄存器与编程

返回《ARM微控制器与嵌入式系统》慕课在线视频课程列表

5.5.2 ARM微控制器外设:PWM寄存器与编程在线视频

5.5.2 ARM微控制器外设:PWM寄存器与编程

下一节:5.5.3 ARM微控制器外设:PWM编程实例—电子音乐

返回《ARM微控制器与嵌入式系统》慕课在线视频列表

5.5.2 ARM微控制器外设:PWM寄存器与编程课程教案、知识点、字幕

各位同学大家好

我是清华大学工程物理系的曾鸣老师

欢迎大家继续回到我们

ARM微控制器与嵌入式系统的MOOC课堂

我们在上一个单元学习了

PWM这样一类模块的基本原理和方法的

这个概念基础上

我们来学一学怎么对它进行编程

那么学到这儿我们会发现

对于这样一类微控制器的外设

特别是我们这门课越学越简单

其实PWM的原理一点都不难

那么我们在这个单元里来试着把它玩起来

做一点好玩的事情

那么我们对于一个TPM模块

对它进行编程

产生脉冲宽度调制的PWM信号

那么编程需要几个步骤呢

跟我们以前学习的一样

还是需要三个步骤

大家都很熟了

第一个步骤把我们这个引脚

用到的这个引脚的时钟

还有TPM模块的时钟给打开

那么第二个步骤呢

把我们Port上这些引脚配置给

指定为TPM模块用

而不是给IO

给别的功能来使用

第三个步骤呢

就是对TPM模块自己的寄存器来进行编程

让它工作在我们想要的工作模式

产生我们要的频率的信号

就这三个步骤

那么我们一个个来看

对于如何把一个模块的时钟打开

我们已经非常非常熟的

它一直都在我们KL25的这个芯片的

系统集成模块的那些寄存器里头

也就是我们芯片手册的第12章

大家在192页能够找到

那么我们熟悉的那几个打开IO模块

PortA、PortB、PortC的寄存器的

那些时钟之外呢

在这个单元里头

TPM模块的时钟源

也在这个部分要做一点点额外的设置

所以会多写一两句话

首先第一个用到的寄存器

就是这个SIM

也就System integration module

SIM模块的SOPT2这个寄存器

这个寄存器如图中所示

在两个比特段可以进行配置

他们分别是选择

设置我们所有TPM模块的时钟源

所以在上面这个第24比特位置

我们把它设成01

让它使用片内的锁相环产生的时钟

然后在中间第16比特这个位置呢

我们把它设成0

虽然我这里给出的这句话是一个宏定义

大家想一想它的内容

或者大家在CodeWarrior单击右键

看一看它的宏定义

就能知道我们是把这个比特设为0

这样子呢

在这两个组合下我们指定所有的

TPM模块使用锁相环产生的

片内的默认时钟源

而且就是它原始频率

并不是除以2的频率

那么就完成一个时钟频率的选择

大家学的多了以后可以自己去改这些代码

改自己想要的设置

那么按照老师给的代码

我们选择片内锁相环产生的默认时钟

并且不除以2使用原始时钟是什么意思呢

就回到我们原来看过很多次的

这个片内的时钟Tree

在上电以后

使用片内的IRC振荡电路

经过锁频环然后产生的片内的振荡时钟

就是20.97兆

所以按照刚才的这个配置

我们简化了大家的理解

就是我们接下来这门课范围内

编程TPM模块的时钟源

用的都是这个20.97兆

这就完成了时钟的选择

时钟选择完了

我们要把时钟的开关打开 对不对

那么分两块

一块我们看一看我们这个板子的电路图

我们要干的一件事

干的一件有意思的事或者干的一件坏事

是我们要拿这个引脚来点一个蜂鸣器

放一放不同的声音

那么我发现点蜂鸣器这个引脚

我们对着电路图看叫Buzzer EN

这个Buzzer EN如果我们读电路图

所有net名相同的电路

等于是有一根线连接

我们会发现Buzzer EN这个引脚

接的是PTC8这样一个IO引脚

或者这样一个物理引脚

那么与之呼应的

大家一定要学会

在电路图芯片手册之间来回切换

我们这门课已经讲到第五类外设了

大家一定要有这个能力

我们读电路图发现蜂鸣器接的是Buzzer EN

Buzzer EN在电路图里接的是PTC8

一定记得回到你的芯片手册里

去查一查就是我们上面这张表PTC8这个引脚

有哪几个复用功能

那么大家查一查就会发现PTC8这个引脚

有若干个复用功能

其中编号0、1、2、3

第3号功能就是TPM0的Channel4

它是一个PWM的功能

也就说这个引脚 这个IO

是可以当PWM来使用的 对不对

这就是跟我们要的就一致了

那么与之呼应的是什么呢

在这个模块编程的时候

因为这是PTC

所以我们记得把PortC的时钟打开

所以就是SIM这个_SCGC5寄存器

对应我们之前编程过很多次的

这个打红圈的位置

我们要把它置1

把这个比特置1打开PortC的时钟

还有一件事呢就是

在同样的SIM_SCGC6这个寄存器里

有一个比特

我们刚才选了时钟源

这里要记得把对应的TPM0的时钟打开

把这个比特置1

所以合并起来我们就会发现

我们其实一共就是4句话

头两句话对于SIM模块的

SOPT2这个寄存器的两个比特

一个置01 一个置0

选择使用片内默认的这个锁频环

产生的时钟20.97兆

剩下两句话呢

SIM_SCGC5和SIM_SCGC6这两个寄存器

分别把PortC和我们要用到的TPM0

这两个模块的时钟打开

这样我们就完成了三个步骤里头的

第一个步骤

四句话 对吧

那么看看第二个步骤

第二个步骤其实大家也非常熟了

刚才隐隐约约都提到了

就是把刚才要用的这个引脚

配置给TPM模块用

而不是给别的模块用

那我这里如果不翻页

大家回忆一下是哪个寄存器啊

是有一个寄存器每个引脚

都对应的一个对不对

所以我们应该写这么一句话

就是把我们的PortC的第8个引脚

PTC8对应的这个PCR8这个寄存器

配置他中间那三个比特

所以赋值是等于0X0300

使用这个引脚的第三号功能

当TPM0的Channel4

这个PWM模块用

完成这个配置以后

这个引脚时钟也打开了

引脚也配置给PWM模块用了

是不是就是我们编程的第三个步骤

对这个TPM模块的寄存器进行编程

配置它究竟产生怎样的PWM信号

那究竟要产生怎样的PWM信号

能达到我们要的效果呢

那是下一小节我再跟大家讨论

我们先站在寄存器的角度

把刚才提到那些寄存器

串起来给大家讲讲怎么用

我们说过一个TPM模块有17个寄存器

从地址4008开始的那个段里头

17个寄存器用完了TPM1模块

再来17个这么循环

一共3个TPM模块

那么17个寄存器很多

大家不要怕

在我们这门课的范畴里

如果你翻到芯片手册第550页顺着往下看

我们实际上只用到了其中的5个寄存器

就可以完成对TPM模块的

一个最最简单的控制蜂鸣器这样一个编程

当然大家如果以后要使用它更强大的功能

你当然要看芯片手册

把别的寄存器的功能也适当的自己摸一摸

那么我们用到这些寄存器分别是什么含义呢

这五个寄存器我来一个一个给大家讲

首先呢我们建立一个概念

我们这个蜂鸣器

接在了芯片的PTC8这个引脚上

这个引脚上第三号复用功能

我们刚才已经说了是TPM0模块的通道4

也就是TPM0模块第四个通道当PWM使用

我们编程的时候

记住我们所使用的模块号和通道号

那么放在了这个寄存器的这个列表里头

我们仔细再来看的时候

我们会发现在550页这17个寄存器里头

我们只用其中五个

第一个就是TPM0的SC寄存器

Status and Control也就是他的状态

和他的控制都在这一个寄存器里

这一个寄存器是对TPM0的整个模块

所有六个Channel进行统一的

这个状态读取和控制的

那么我们在编程的时候

只使用到了他最低位的这几个比特

那么我们可以注意在最低位的这五个比特

其中CMOD这两个比特呢

是选择我们所使用这个TPM模块时钟是否打开

为00的时候

时钟是关闭的

也就计数器不计数

那么我们现在对它编程

按照芯片手册的解释应该配置为01

也就是使用我们刚才所选择的

片内20.97兆那个时钟

当然设置为10我们还可以选择使用

片外输入的时钟源

那么最低位这三个比特呢

也就是PS这三个比特呢

是对于这个时钟源

比如说20.97兆可能太快了

我们可以把它分一分频

再来当我们的时钟源使用

那么在这里我们将它设置为了111

也就数字7

把它对20.97兆做128倍的分频

所以大家记住我们通过编程

变成这样一句话

也就是TPM0_SC等于0X0008或上0007

也就是选择了片内的20.97兆时钟源

128分频的时钟频率

来作为我们PWM计数的时钟单元

那么它的时钟间隔是多少

大家可以自己算一算 对吧

那么第二个用到的寄存器呢

是我们TPM0的C4SC寄存器

这个寄存器是TPM0这个模块

第通道4所独有的寄存器

它配置通道4这一个引脚的工作模式和功能

那么这个寄存器里头

所能配置的值其实含义非常的复杂

MSB、MSA、ELSB和ELSA这四个比特排列组合

其实会形成对于功能的很多种配置

那么会形成一张表

我们在芯片手册里可以看到

那么我们顺着往功能

也就是mode这一列看的话

会发现我们每一个PWM模块的引脚

其实除了脉冲调制

还可以做输入俘获

输入比较等等

以后大家会用很多功能

我们现在只使用它刚才提到的

最简单的一类功能

也就产生边沿对齐的PWM的周期脉冲信号

那么我们很显然把这两个值

分别配置为10和10

也就是给TPM0_C4SC这个寄存器

写成这样一个赋值语句

就使它工作在我们想要的边沿对齐

PWM模式

那么通过这两个寄存器的设置

我们选择了我们这个模块的时钟源

以及这个引脚这个Channel的工作模式

那么剩下事情就很简单了

我们回顾一下PWM的基本原理

它就是一个累增的计数器

当分别遇到两个计数值的时候

完成边沿的跳转和周期的切换

所以我们实际上

未来就是三个寄存器会要使用

TPM0_CNT Counter寄存器

和TPM0 Modulater TPM0_MOD寄存器

是这样一个PWM模块

整个模块所有引脚共用的

那么Counter寄存器里头

永远存的是当前计数值

也就是数数数到多少了

那么TPM0_MOD寄存器

设置的是当前这个模块总的周期值

也就数到多少就溢出决定了我们的周期

也就决定了我们的频率

然后每个通道有一个独立的

TPMx_CNV寄存器

这个N就比如通道4 就是4 C4V

这样每个通道的寄存器

它决定了这个通道的占空比

也就数数数到这个值的时候

脉冲信号由1变0

那么这三个寄存器很显然都是计数器值

所以他们在地址上占4个字节

但是其内容都是16比特的计数器

高16位是忽略的

我们可以为它们分别设置16位的值

其中TPM0_CNT的值

是一个自动累加的计数值

我们没有办法对它进行写操作

只能读取

对它做写会导致它的值清零

TPM0_MOD寄存器

整个模块共用设定一个值

它根据计数的参考时钟频率

就决定了信号的周期

也就决定了我们输出信号的脉冲频率

TPM0_C4V就决定了我们TPM模块0

第四通道这一个通道的输出翻转值

换言之大家算一算

它就能决定我们脉冲信号的占空比

所以我们对三个计数器的值

进行设置和读取

就可以实现对PWM模块

最终输出信号的脉宽占空比

也就是我们频率的这些控制

那么好了

我们学习了这三个步骤

学习了如何对于一个PWM模块

把它的时钟打开

配置为PWM使用

以及如何对PWM里头

那仅仅不多的五个寄存器

进行配置让它工作起来

设置它的周期 频率

设置它的占空比

我们在下一个单元

来带大家做一点好玩的事情

就是用这个引脚

我们试着让我们这个板子来播放一下音乐吧

所以下节课来给大家讲我们的

实验程序的内容

ARM微控制器与嵌入式系统课程列表:

第一章 概览

-1.1 课程概览

--1.1 课程概览

-1.2 如何学好嵌入式系统

--1.2 如何学好嵌入式系统

第二章 绪论

-2.1 计算机的基本概念、发展历史

--2.1 计算机的基本概念、发展历史

-2.2 从晶体管到CPU

--2.2 从晶体管到CPU

-2.3 概念CPU、微控制器MCU和嵌入式系统

--2.3 概念CPU、微控制器MCU和嵌入式系统

-2.4 八卦计算机史

--2.4 八卦计算机史与创新

-2.5 不同领域、不同系列的嵌入式系统

--2.5 不同领域、不同系列的嵌入式系统

-2.6 ARM历史与MKL25Z128 MCU

--2.6 ARM历史与MKL25Z128 MCU

--2.6 ARM历史与MKL25Z128 MCU【习题】

--2.6 ARM历史与MKL25Z128 MCU【讨论】

第三章 MCU基础

-3.1 CPU的基本结构和运行机制

--3.1 CPU的基本结构和运行机制

-3.2.1 堆栈的概念

--3.2.1 堆栈的概念

--3.2.1 堆栈的概念【习题】

-3.2.2 堆栈的概念-头脑体操

--3.2.2 头脑体操

-3.3.1 ARM的体系结构

--3.3.1 ARM的体系结构

--3.3.1 ARM的体系结构【习题】

-3.3.2 ARM的体系结构-头脑体操

--3.3.2 ARM的体系结构-头脑体操

-3.4.1 中断的概念和机制

--3.4.1 中断的概念和机制

-3.4.2 中断子程的概念和编程

--3.4.2 中断子程的概念和编程

-3.5 复位、时钟、存储器和总线

--3.5 复位、时钟、存储器和总线

--3.5 复位、时钟、存储器和总线【习题】

-3.6 小结:MCU的总体结构和程序运行机制

--3.6 小结:MCU的总体结构和程序运行机制

--3.6 小结:MCU的总体结构和程序运行机制【习题】

第四章 ARM微控制器的开发

-4.1 第一种外设:IO

--4.1 第一种外设:IO

-4.2 IO外设的编程实操-点亮LED

--4.2 IO外设的编程实操-点亮LED

-4.3 IO外设的进阶知识

--4.3 IO外设的进阶知识

-4.4 嵌入式开发的基本概念与工具链

--4.4 嵌入式开发的基本概念与工具链

-4.5 嵌入式开发的进阶知识

--4.5 嵌入式开发的进阶知识

-4.6 嵌入式开发中的C语言(上)

--4.6 嵌入式开发中的C语言(上)

--4.6 嵌入式开发中的C语言(上)【习题】

-4.7 嵌入式开发中的C语言(下)

--4.7 嵌入式开发中的C语言(下)

--4.7 嵌入式开发中的C语言(下)【习题】

-E0.1 实验零 开发板的初步认识与工具链的安装

--E0.1 实验零 开发板的初步认识与工具链的安装

-E0.2 实验零 体验一个例程的编译与下载

--E0.2 实验零 体验一个例程的编译与下载

-E0.3 实验零 编写第一个程序:点亮核心板LED

--E0.3 实验零 编写第一个程序:点亮核心板LED

-E1 实验一 点灯秘籍

--E1 实验一 点灯秘籍

第五章 ARM微控制器的各种外设

-5.1 ARM微控制器外设学习概述

--5.1 ARM微控制器外设学习概述

-5.2.1 ARM微控制器外设:通讯

--5.2.1 ARM微控制器外设:通讯

-5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)

--5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)

--5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)【习题】

-5.2.3 ARM微控制器外设:异步串行通讯UART的原理(下)

--5.2.3 ARM微控制器的外设:异步串行通讯UART的原理(下)

--5.2.3 ARM微控制器外设:异步串行通讯UART的原理(下)【习题】

-5.2.4 ARM微控制器外设:RS-232串口与USB虚拟串口

--5.2.4 ARM微控制器外设:RS-232串口与USB虚拟串口

-5.2.5 ARM微控制器外设:UART的寄存器编程(上)

--5.2.5 ARM微控制器外设:UART的寄存器编程(上)

-5.2.6 ARM微控制器外设:UART的寄存器编程(下)

--5.2.6 ARM微控制器外设:UART的寄存器编程(下)

--5.2.6 ARM微控制器外设:UART的寄存器编程(下)【习题】

-E2 实验二 UART编程实操

--E2 实验二 UART编程实操

-5.3.1 ARM微控制器外设:IO的中断编程(上)

--5.3.1 ARM微控制器外设:IO的中断编程(上)

-5.3.2 ARM微控制器外设:IO的中断编程(下)

--5.3.2 ARM微控制器外设:IO的中断编程(下)

-5.4.1 ARM微控制器外设:定时器的原理

--5.4.1 ARM微控制器外设:定时器的原理

-5.4.2 ARM微控制器外设:定时器的编程

--5.4.2 ARM微控制器外设:定时器的编程

--5.4.2 ARM微控制器外设:定时器的编程【习题】

-E3 实验三 定时器中断编程实操

--E3 实验三 定时器中断编程实操

-5.5.1 ARM微控制器外设:PWM的原理

--5.5.1 ARM微控制器外设:PWM的原理

-5.5.2 ARM微控制器外设:PWM寄存器与编程

--5.5.2 ARM微控制器外设:PWM寄存器与编程

-5.5.3 ARM微控制器外设:PWM编程实例—电子音乐

--5.5.3 ARM微控制器外设:PWM编程实例—电子音乐

-E4 实验四 数码管显示编程实操

--E4 实验四 数码管显示编程实操

-5.6.1 ARM微控制器外设:SPI通讯简介

-- 5.6.1 ARM微控制器外设:SPI通讯简介

--5.6.1 ARM微控制器外设:SPI通讯简介【习题】

-5.6.2 ARM微控制器外设:SPI寄存器与编程

-- 5.6.2 ARM微控制器外设:SPI寄存器与编程

-5.6.3 ARM微控制器外设:SPI编程实例—OLED显示屏驱动

--5.6.3 ARM微控制器外设:SPI编程实例—OLED显示屏驱动

-5.7.1 ARM微控制器外设:I2C通讯简介

--5.7.1 ARM微控制器外设:I2C通讯简介

-5.7.2 ARM微控制器外设:I2C的通讯协议

--5.7.2 ARM微控制器外设:I2C的通讯协议

-5.7.3 ARM微控制器外设:I2C寄存器与编程

--5.7.3 ARM微控制器外设:I2C寄存器与编程

--5.7.3 ARM微控制器外设:I2C寄存器与编程【习题】

-5.7.4 ARM微控制器外设:I2C编程实例—加速度传感器

--5.7.4 ARM微控制器外设:I2C编程实例—加速度传感器

-5.8.1 ARM微控制器外设:ADC简介

--5.8.1 ARM微控制器外设:ADC简介

-5.8.2 ARM微控制器外设:ADC基础

--5.8.2 ARM微控制器外设:ADC基础

-5.8.3 ARM微控制器外设:ADC寄存器与编程

--5.8.3 ARM微控制器外设:ADC寄存器与编程

-E5 实验五 ADC编程实操

--E5 实验五 ADC编程实操

-E6 挑战实验

--E6 挑战实验

第六章 嵌入式系统设计

-6.1 嵌入式系统的接口与设计

--6.1 嵌入式系统的接口与设计

-6.2 嵌入式系统的实例

--6.2 嵌入式系统的实例

5.5.2 ARM微控制器外设:PWM寄存器与编程笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。