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

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

5.2.5 ARM微控制器外设:UART的寄存器编程(上)在线视频

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

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

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

5.2.5 ARM微控制器外设:UART的寄存器编程(上)课程教案、知识点、字幕

各位同学大家好

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

欢迎大家回到我们

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

我们继续进行

这个章节关于外设里头UART异步通讯的学习

那么在前面几个单元呢

我们也认识了UART那样一个数据帧

也认识了包括RS232在内的

这样具体的电平标准这样的硬件实现

那么这个单元和下个单元

我来教大家如何编程真正把它用起来

去跟计算机通讯

去跟GPS、GSM模块这些外设模块通讯

如何把这样一个通讯真正实现出来

那么大家回忆一下第四章

我们所学的那一类编程开发的基本概念里头

我们讲的最最简单的一类外设

它也非常典型 就是IO

我们回忆当时选IO编程的时候

有两个基本概念

一个就是对于所有外设的编程

都是通过映射在地址上的

一系列寄存器的写0写1

我们写的是数据

但是实际工作是这些0和1对电路的控制

来实现对于外设工作方式 工作状态的控制

那么实现让它工作

第二个概念就是说

我们对于这样一个编程大家回忆一下

把一个IO用起来点灯

当时曾老师开了个玩笑

说要几个步骤呢

说要三个步骤

就跟大象塞到冰箱里一样

第一个步骤把这个模块所用到的时钟给打开

因为在默认状态下

这些时钟是关闭的

这样一个模块是处于低功耗的

第二个步骤呢

就是我们包括IO在内

所有的这些功能

它是复用在若干个物理的金属的引脚上的

我们要把这样的对应的引脚这个模块 这PORT

给指定为对应的功能来用

比如默认的功能1

可能是给IO用

但如果我们要把它给UART给串行通讯用

它就不能当IO用

这是要配置的

那么最后一个步骤呢

是对于每一个模块比如IO它就有

输入 输出 方向 这样一些寄存器进行控制

那么对于UART也是一样的

我们要有一系列寄存器来约定

我们刚才讲的那个数据帧

它的波特率它的奇偶校验等等

这些功能的使用

最后让它真正的通讯起来

那么在这个单元里我们先讲前两个步骤

最后一个步骤在下一个单元我来给大家讲

一个UART模块里有哪些寄存器

怎么用它

那么我们来看第一个步骤

第一个步骤把UART通讯要用到的时钟给打开

我们即使在原来讲一个IO的时候

也要用到时钟

时钟对于一个微控制器系统

就像一个动物的心脏

一下下的跳动指挥着所有的模块

在这个节奏下去工作

那么在一个微控制器里头

会有一个时钟树的概念

也就我们一开始讲过的这张图

那么这个时钟分配到了每一个模块

在同相位下以不同的频率

各自的速度来工作协调

那么我们在这门课的范畴里

如果不使用锁相环去进行倍频

不使用外部的晶振

那么上电默认状态

是使用片内的32KHz的IRC振荡器

产生的这样一个时钟

经过FLL锁频环

产生一个更高频率的时钟

一直沿着箭头的链路输出

产生片内的锁频环时钟

也就是MCGFLLCLK

它的频率在上电默认的值下面

大家记住对于MKL25Z128这块

我们学习的微控制器

这块ARM微控制器

默认值上电以后是20.97MHz

那么还有一个很重要的值就是所谓的Bus Clock

总线时钟

一般上电后是它的一半 二分频

也就是20.97MHz除以2

也就是10.485MHz

那么我们进行UART时钟的配置的时候

记住不仅仅是把时钟打开

我们要有一个概念

就是我们的UART模块用的是这个时钟

作为它的时钟来源

它直接影响到我们待会编程怎么来配置波特率

那么多说一句的是

在我们KL25这样一个微控制器里头

一共有三个UART模块

分别是UART0、UART1、UART2

大家可以理解是

我们有三个串行通讯接口可以用

每一个都可以通过编程

独立的与不同的设备进行通讯

那么其中UART1、UART2

后面这两个

它锁定了就是使用Bus clock

比如上电默认后就是10.485MHz作为它的时钟源

UART0我待会会讲到

它的时钟源是可选的

但是作为初学者

我们一般就把它配置成也使用Bus Clock

也就是10.485MHz

这样编程理解上会比较简单

那么怎么把这个时钟给打开呢

回忆我们做IO的时候我们会发现

如果我们看我们芯片手册的第192页

也就是第12章有一个模块单元

叫System integration module

也就是系统集成模块

里头有一系列的寄存器

那么在IO的时候

我们实际上是找了其中一个寄存器的一个比特

打开对应的比如说PORTA或者PORTB

它的那个时钟置0或者置1就打开

那么在我们这个单元里要把一个UART用起来

我们会用到两个寄存器

这两个寄存器

一个负责打开我们要用的那个UART模块的时钟源

一个负责打开这个UART模块

用的那两个引脚

所对应的那个PORT的时钟源

也就说你要把通讯打开

把通讯复用的这个引脚

对应的PORT的时钟也打开

保证这个引脚能够正确的用起来

那么在哪呢

一个寄存器就是我们刚才表中所写的

SIM_SCGC4这个寄存器

那么我们有一个概念寄存器

都是映射在物理地址上

一段可以写0写1的一个存储空间

但是它的0和1

又会变成高低电平去控制电路

所以这个寄存器名称是SIM_SCGC4

在我们开发里知道它是一个名称

而它实际的物质地址

在芯片手册可以看到

就是32位地址总线上的4004 8034这个地址

那么寄存器的定义也在芯片手册可以找着

我们可以发现有这么一个比特

他管着UART1的时钟置1就是打开

置0就是关闭

它的旁边分别是UART0和UART2的时钟开关

所以我们要把UART1的时钟打开很简单

就是SIM_SCGC4或一个0x0800

这个8是个比特1对不对

写成二进制就是00001000

一或,这一位

就置1了

我们就把对应的时钟开关打开了

我们完成了打开UART这个模块的时钟

那么我们还要记得

把现在复用的UART这个引脚

所对应的那个物理引脚PORT的时钟打开

那么这个时候我们就需要读一下电路图

在日后的学习当中

如果我们要真正的把我们编的程序

在实际电路上跑起来 玩起来

我们会反复阅读电路图

比如在我们这张图里我们会看到

我们使用了一个叫CP2102的

USB虚拟串口的芯片

完成与计算机USB口的连接

而它给出了一对UART的数据通信引脚

与我们的ARM微控制器的UART口连接

来帮助我们完成通讯

那么这对引脚呢

接到了我们ARM微控制器 大家看电路图里头

第216、217这两个引脚

那这两个引脚分别功能是

UART1的收RX和UART1的发送TX

我们之所以这么接

是因为我们知道这两个引脚

也就是PORTC的第三号引脚

和PORTC的第四号引脚

在芯片设计的功能里有一个复用的功能

是当UART数据通讯用

而不是当IO用

所以如果我们去看一看

芯片手册的时候就会发现

这两个引脚在芯片手册的复用功能表里头

是它的ALT3

也就是第三号功能

那么这个功能的配置是待会第二个步骤

我们会讲到的

现在想

我们要想把这两个引脚UART功能用起来

光把UART模块的时钟打开是不够的

我们要把它对应的PORTC这个模块的时钟也打开

就跟我们做IO的编程一样

那么PORTC的时钟打开

跟我们做IO编程里头一样

在SIM_SCGC5这个寄存器里头

也就是它的物理地址

是4004 8038这个物理地址的寄存器里头

有这么若干个比特

每个比特管一个PORT的时钟开关

从PORTA B C D这么一直下去

所以我们只需要把PORTC对应的这个比特置1

就把刚才所说的这个复用模块

所对应引脚的时钟打开了

那么方法就是编程这么简单的一句话

SIM_SCGC5这个寄存器或等于0x 同样是0800

这样就把这一个比特值通过或运算置1

于是这样子

我们就完成了打开UART模块的时钟

也打开了对应引脚的这个PORT口的时钟

写出来就是这两句话

所以说起来很复杂

实践起来C语言就两句话

大家学习编程的时候

一定要知其然知其所以然

既能把曾老师这两句话给自己写出来

也能根据自己日后开发的需要

自己去写出这句话

那么大家就学会了如何去使用这样一个模块

好 那我们看看除了UART1和UART2

如果我们要把UART0用起来

我们还要多做一件什么事呢

在这里我简单做个介绍

就是最开始提到在时钟树里

UART0的时钟源

不一定是Bus clock那个10.485MHz

大家是可以选的

那么这个寄存器叫做SIM_SOPT2

有兴趣同学可以通过芯片手册去读一读它

那么所要使用的是我标红框的这两个位置

各两个比特的配置

那么比如说我们给他们分别赋值都选择01

就会选择同样的20.97MHz的一半

作为我们UART0的时钟源

也就是10.485MHz

使我们的编程能够跟UART1是一样的

那么这是一个额外的内容

如果要用UART0大家可以学习一下

好 到这里我们完成了三个步骤里头的

第一个步骤

这个单元我们接下来再讲一讲第二个步骤

我们打开了时钟源

万事俱备之前我们还差一个步骤

就是要把这个引脚

这个PORT里的这个物理的引脚

指定给UART用

而不是给别的功能比如IO用

比如说AD用对吧

那么这样一个配置功能非常简单

跟我们在第四章学IO编程的时候一样

有一系列的寄存器在我们芯片手册第177页

也就是PORT引脚管理的这个模块里头

给了一系列这样的寄存器

而用的最多的呢

就是我们现在打框的这个寄存器

我们之前用过了

叫PORTx_PCRn

这样一个寄存器是每个引脚对应一个

有多少个引脚

就会对应多少个一模一样的寄存器

比如PORTC PTC3和PTC4对应的

就是PORTC_PCR3和PORTC_PCR4

这样两个一模一样的独立寄存器

那么在这样两个寄存器

就像我们刚才看电路图一样

我们会发现PORTC3和PORTC4

它对应的从000到111

也就是0到7这八个可用的功能里头

第3号功能

是我们现在想希望它使用的UART1的

收和发送数据这两个功能

那么对应到PORTC_PCR3或者PORTC_PCR4

这个寄存器里头

就是我们之前学过有这么三个比特的值

可以进行设置

它的值可以从000设置到111

对应我们希望这个引脚使用第几号功能

因为我们要使用第三号功能

那这三个比特就得置成011

所以这个寄存器我们虽然用过

可能大家忘了

我们现在回忆起来

对两个引脚的功能

进行指定写出来就是两句话

PORTC_PCR3如果用强行赋值等于0x0300

PORTC_PCR4等于0x0300

所以做完这两句话

我们就把我们想用的这两个引脚

指定为了给UART用

接下来怎么用

就是怎么给UART寄存器编程的问题了

也就是我们下一个单元

要给大家讲的第三个步骤

那么这个单元到这儿就结束了

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.2.5 ARM微控制器外设:UART的寄存器编程(上)笔记与讨论

也许你还感兴趣的课程:

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