用构建法进行GPIO应用编程

实际编程方法

实际编程中,应该把对底层硬件操作用构件法封装起来,给出函数名和接口参数,以供实际编程使用。
分析GPIO驱动构件封装方法与驱动构件封装规范,利用构件法控制小灯闪烁。

以KL25GPIO为例,有61个引脚可作为GPIO,分布在A~E五个端口,不可能使用直接地址去操作相关寄存器,那样无法实现软件移植与复用。
应该把对GPIO引脚的操作封装成构件,通过函数调用与传参的方式实现对引脚的干预与状态获取。

设计驱动构件

遵循一定规范,需要进行封装要点分析,即分析应该设计哪些函数以及函数的入口参数是什么。

首先,初始化模块(gpio_init)由于GPIO模块的引脚可以复用为不同的功能,在初始化时要先设置某一个引脚的功能为GPIO。
然后设置引脚是输入或输出,若输出,还需设置其初始状态,这些信息必须通过参数传递进来,初始化功能一般不需要返回值。

在这里插入图片描述

同理分析设置引脚状态和获得引脚状态功能函数,以及GPIO引脚状态翻转函数和GPIO引脚内部上拉函数。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

底层驱动构件封装规范概要

第一点 每个构件由头文件(.h)和源文件(.c)两个独立文件组成,放在以构件命名的文件夹中,驱动头文件(.h)中仅仅包含了对外接口函数的声明,相当于使用指南。

在这里插入图片描述在这里插入图片描述

封装好的GPIO构件存放在放置底层驱动文件夹"05_Driver"下的"gpio"文件夹中,方便拷贝使用。
要求只看头文件即可了解如何使用构件。

第二点 构件设计需要满足几个基本要求:
  考虑使用与移植的方便
  有统一,规范的编码风格与注释风格
  宏使用有限制,构件中不使用全局变量。

使用构件方法

小灯驱动构件函数

小灯初始化 设置小灯状态 翻转小灯状态

在这里插入图片描述

l

使用小灯构件完成对小灯的控制,须知芯片哪个引脚控制,且高电平还是低电平有效。

编程步骤

第一步 在light.h文件中给小灯起名字,并确定与MCU的引脚,进行宏定义。
  #define LIGHT_BLUE    (PTB_NUM|9)
  //蓝色RUN灯使用的端口/引脚
第二步 在light.h文件中对小灯亮暗进行宏定义,方便编程。
  #define LIGHT_ON    0    //小灯亮
  #define LIGHT_OFF   1    //小灯暗
第三步 在main函数中初始化LED灯的初始状态。
  lighr_init(LIGHT_BLUE,LIGHT_OFF) ;   
  //蓝灯初始化
第四步 在功能函数中控制小灯状态发生变化。
  light_control(LIGHT_BLUE,LIGHT_ON);
  //蓝灯亮
第五步 设计主函数

在这里插入图片描述
在这里插入图片描述

工程文件组织框架

一个嵌入式系统工程会包含工程说明文件,程序文件,头文件,与编译调试相关的文件,开发环境生成文件等。
合理组织文件,规范工程组织,提高阅读清晰度,提高可维护性,降低维护难度,提高项目开发效率。

以light工程为例,树形工程结构模版
文档文件夹 CPU文件夹 MCU文件夹 链接文件夹 驱动文件夹 应用构件文件夹 软件构件文件夹 源程序文件夹

在这里插入图片描述

无需新建工程,复制light工程后改名即为新工程。
08_Source源程序文件夹包含
总头文件includes.h内含常量,全局变量声明,主函数main调用其他函数的头文件。
主程序文件main.c是应用程序的启动后总入口,main函数即在该文件中实现。在main函数中包含了一个永久循环,在无操作系统环境下对具体事物过程的处理均在该主循环中。
中断编程在isr.c中完成。

芯片复位实现细节

芯片上电复位后,首先从flash的0x0000 0000地址中,取出第一个表项的内容赋给堆栈指针SP,完成堆栈指针初始化。
芯片内部机制将第二个表项的内容赋给程序计数器PC。
程序跳转至"…\03_MCU\starup_MKL25Z4.S"中的Reset_Handler函数执行,关闭总中断然后转至"…\03_MCU\starup_MKL25Z4.S"文件中的Systemlnit()函数,进行芯片部分初始化。
依次关闭看门狗,系统时钟初始化,再回到Reset_Handler中继续剩余部分初始化功能,包括开总中断,将ROM中的初始化数据拷贝到RAM中,清零未初始化BSS数据段,随后进入用户主函数main。

嵌入式技术基础与实践(第4版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值