目标:点亮E6位置的LED灯-将E6口置为低电平输出即可
实现方法:寄存器直接控制
一、准备工作
使用开发板为Kinetis K60-渡鸦系列开发板。
芯片为ARM-M4 内核的 MK60DN512ZVLQ10 芯片。
使用的开发工具为keil5,因此需要去官网下载相应的安装包。
1、新建工程,选择好相应的开发板
2、之后咱安装好了MK60的设备安装包之后,我们再keil的安装目录下去寻找相应的启动文件
E:\STM32keil5MDK\ARM\INC\Freescale\Kinetis(根据自己的安装目录寻找)
MK60D10.h
system_MK60D10.h
E:\STM32keil5MDK\ARM\Startup\Freescale\Kinetis
startup_MK60D10.s
system_MK60D10.c
3、将以上的文件添加入我们所新建的文件夹之中。
之后打开KEIL将我们的文件加入当前的Projet中。
4、为避免在使用的过程中堆栈的空间不足,我们需要将相应的堆栈空间进行增大,在startup中将相应的寄存器进行修改。
二、进行电灯操作总共要分为以下的4个配置步骤
1. 开启SIM开关-也就是开启我们所需要控制的端口的时钟
2. 选择Port口相应功能-由于引脚存在复用所以要对相应的引脚功能进行选择
3. GPIO配置-因为要点亮小灯所以使用GPIO功能进行信号的输出对小灯进行点亮。
4. 对GPIO进行位操作-将相应端口的相应位进行置0或者置1的操作。
三、正式开始点灯操作
芯片手册如何查找: 在我们下载好了相应的软件安装包之后我们便可以在book目录下找到我们所需要的芯片手册。
1、首先完成电灯的第一步,开启相关寄存器的时钟。
时钟相关的寄存器是在 SIM 位置 Chapter 12: System Integration Module (SIM)
而控制GPIO相关时钟的寄存器位于SIM->SCGC5位置
而在当前的寄存器想要对相应的Port口进行设置则要对当前寄存器的9-13位进行设置
而对于相应端口的控制需要将相应的位置0/1由于原理图中对LED的引脚挂在在PE6因此我们需要将PORTE端口位置1来使能时钟。
2、设置当前引脚的复用功能为GPIO
首先我们要在芯片手册中的==Chapter 11: Port control and interrupts (PORT)==找到我们需要设置的寄存器端口,为Pin Control Register n (PORTE_PCR6)3、在当前的寄存器位中要将MUX这三位设置成所需要的功能
由于使用的功能模式为GPIO因此只需要将MUX位设为001即可
4、之后需要找到GPIO相关功能的寄存器
Port Data Output Register (GPIOE_PDOR) - 端口数据输出寄存器(GPIOE_PDOR)
Port Data Direction Register (GPIOE_PDDR) - 端口数据方向寄存器(GPIOE_PDDR)
对端口的方向和电平进行设置。
我们这里需要将端口设置为输出低电平,因此只需要将相应的位设置即可。
完整参考代码
#include "stdio.h"
#include <MK60D10.h>
int main(void)
{
//将第13位置1 |上0x2000u (开启PORTE的时钟)
SIM->SCGC5 |= SIM_SCGC5_PORTE_MASK; //将第13位置1 |上0x2000u
//将MUX8~10位清空后再置为001(设置端口为GPIO模式)
PORTE->PCR[6] &=~PORT_PCR_MUX_MASK; //将相应的MUX位置0
PORTE->PCR[6] |= (1<<8); //将第8位置1 MUX=001
PTE->PDDR|=(1<<6); //设置PORTE中6号端口的模式为输出模式
PTE->PDOR&=~(1<<6); //设置PORTE中第6号端口为低电平
}