实时操作系统应用开发技术 课件 第5章底层驱动构件_第1页
实时操作系统应用开发技术 课件 第5章底层驱动构件_第2页
实时操作系统应用开发技术 课件 第5章底层驱动构件_第3页
实时操作系统应用开发技术 课件 第5章底层驱动构件_第4页
实时操作系统应用开发技术 课件 第5章底层驱动构件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章底层驱动构件主讲人:王宜怀时间:2025.6实时操作系统应用开发技术CONTENT目录嵌入式构件概述底层驱动构件的设计原则与方法底层驱动构件设计与测试举例算法构件设计实例本章小结外部设备构件设计实例5.15.35.55.25.45.6嵌入式构件概述5.1PART-实时操作系统应用开发技术构件是软件复用的基础,传统产业通过标准化构件提高效率,软件产业借鉴此模式,构件标准化是软件复用与移植的重要前提。传统产业借鉴嵌入式系统硬件和软件设计复杂性增加,开发由个人转向团队,构件设计与应用成为提高软硬件设计可重用性与可移植性的基础与保障。嵌入式系统发展5.1.1制作构件的必要性4/43构件定义软件构件定义多样,但通常可理解为具有可复用价值的单位软件,是软件复用过程中可以明确辨别的成分,从程序角度看是有一定功能的程序体。构件的语义与语法构件在语义完整、语法正确的情况下,具有可复用价值,能够独立工作或与其他构件协同完成任务。5.1.2构件的基本概念5/43底层驱动构件直接干预硬件,如GPIO、UART等,面向芯片,不考虑具体应用,以功能模块独立性为准则进行封装。底层驱动构件01外部设备构件通过调用底层驱动构件完成,如LCD构件,面向实际MCU外围硬件模块,以硬件模块独立性为准则进行封装。外部设备构件02算法构件与硬件无关,如排序算法等,面向实际算法,以功能独立性为准则进行封装。算法构件035.1.3嵌入式开发中的构件分类6/43构件的表现形式构件的基本特征0102封装性、描述性、可移植性与可复用性是软件构件的基本特性,封装内部实现细节,提供规范接口,便于移植和复用。构件由头文件和源程序文件组成,对外接口函数命名规范,内部函数不暴露,与RTOS无关,便于应用和移植。5.1.4构件的基本特征与表现形式7/43底层驱动构件的设计原则与方法5.2PART-

实时操作系统应用开发技术底层驱动构件位于应用系统最底层,设计时需分层组织构件,上层构件可调用下层服务,同层构件不相互依赖。1.层次化原则在函数内部检测输入参数,处理异常情况,确保程序运行安全,避免出现异常状况。3.鲁棒性原则函数名简洁达意,接口参数清晰,使用说明规范,避免代码量过多,提高易用性。2.易用性原则优先使用静态分配内存,谨慎使用变量,防止“野指针”和缓冲区溢出,保证系统稳定运行。4.内存可靠原则5.2.1底层驱动构件设计的基本原则9/43该构件由gpio.h和gpio.c文件组成,使用时将其加入工程即可简化GPIO编程。经分析,GPIO构件通常包含若干函数,用于满足输入输出等不同场景的操作需求。1.模块初始化函数:voidgpio_init(uint16_tport_pin,uint8_tdir,uint8_tstate)2.设置引脚状态函数:voidgpio_set(uint16_tport_pin,uint8_tstate)3.获得引脚状态函数:uint8_tgpio_get(uint16_tport_pin)4.引脚状态反转函数:voidgpio_reverse(uint16_tport_pin)5.引脚上下拉使能函数:voidgpio_pull(uint16_tport_pin,uint8_tpullselect)GPIO构件设计5.2.2底层驱动构件设计要点分析10/43011.底层驱动构件的组成、存放位置与内容每个构件由头文件和源文件组成,放在以构件名命名的文件夹中,头文件仅包含对外接口函数声明。022.设计构件的最基本要求考虑使用与移植方便,统一编码风格与注释,限制宏的使用,禁止使用全局变量。5.2.3底层驱动构件封装规范概要11/43位操作宏函数定义位操作宏函数,如置位、清位、获得某一位状态等,方便寄存器操作。01不优化类型的简短别名给不优化类型定义简短别名,如vuint8_t等,方便嵌入式程序编写。025.2.4封装的前期准备:公共要素12/43底层驱动构件设计与测试举例5.3PART-

实时操作系统应用开发技术1.GPIO知识要素5.3.1GPIO构件GPIO含义与作用GPIO是通用输入输出接口,用于控制和读取引脚状态。作为输入可获取外部信号,作为输出可控制外部设备,是嵌入式系统与外部交互的基本方式。输出引脚外部电路接法输出引脚可直接驱动小电流设备,如通过GPIO引脚控制LED灯的亮灭,或通过三极管驱动蜂鸣器发声,实现简单的外部设备控制。输入引脚外部电路接法输入引脚需合理接法以保证信号稳定,如使用上拉或下拉电阻避免信号悬空,确保输入信号的准确采样。14/432.GPIO构件API5.3.1GPIO构件15/433.GPIO构件的输出测试方法5.3.1GPIO构件1.给灯命名:在05_UserBoard\user.h文件中用宏定义蓝灯对应的GPIO引脚(如#defineLIGHT_BLUE(PTB_NUM|9)),避免在主程序中直接使用引脚号,保证工程可移植性。2.定义灯状态:在user.h中根据硬件电路定义灯的亮暗状态(如LIGHT_ON=0、LIGHT_OFF=1),便于后续编程适配硬件,若电路变更只需修改宏定义。3.初始化蓝灯:在07-AppPrg\main.c的用户外设初始化处,调用gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_OFF),将蓝灯初始化为输出模式,初始状态为暗。4.切换灯状态:在main函数主循环中,通过状态标志mFlag控制蓝灯闪烁。当mFlag='L'时,灯亮并计数;当mFlag='A'时,灯暗,使用gpio_set函数切换状态并通过printf输出调试信息。5.程序运行与调试:编译生成hex文件后下载到开发板,蓝灯每秒闪烁一次,同时串口显示灯状态变化信息,可通过printf语句直观调试程序16/43串行通信的基本概念与编程模型015.3.2UART构件异步串行通信采用NRZ数据格式,通过起始位、数据位和停止位传输数据,是嵌入式系统常用的通信方式。异步串行通信格式波特率表示每秒传输的位数,常用的波特率有9600、115200等,波特率的选择影响通信速度和可靠性。串行通信的波特率串行通信有单工、半双工和全双工三种传输方式,全双工通信效率最高,可同时收发数据。串行通信传输方式17/43串行通信的硬件信号变换025.3.2UART构件RS485采用差分信号负逻辑,-2V~-6V表示“1”,+2V~+6V表示“0”,通信距离在1000米左右,可较好地抑制电磁干扰,但二线的RS485通信只能工作于半双工方式。RS48502RS232采用负逻辑,-15V~-3V为逻辑“1”,+3V~+15V为逻辑“0”,最大传输距离30m,通信速率一般低于20kbps。RS23201TTL-USB串口芯片可将TTL电平转换为USB信号,方便与电脑通信。AHL-CH32V303-WiFi

开发板使用的是CH342芯片,通过

Typc-C连接电脑后可在设备管理器中看到串口提示。TTL-USB串口0318/433.UART构件API5.3.2UART构件19/434.中断编程步骤—以串口接收中断为例5.3.2UART构件20/431.Flash在线编程的通用基础知识5.3.3Flash构件Flash编程基本操作Flash编程的基本操作包括擦除和写入,擦除操作将存储单元内容由二进制的0变成1,写入操作将某些位由二进制的1变成0。写入前需先执行擦除操作,擦除操作包括整体擦除和以扇区为单位的擦除。Flash存储器特点Flash存储器具有固有不易失性、电可擦除、可在线编程、存储密度高、功耗低和成本较低等特点,广泛应用于MCU中,用于固化程序和保存运行参数。STEP02STEP0121/432.Flash驱动构件知识要素分析5.3.3Flash构件22/433.Flash驱动构件的使用方法5.3.3Flash构件测试扇区宏定义在user.h文件中对测试的扇区号及物理地址进行宏定义,如TEST_SECT定义为1800,TEST_ADDR为对应物理地址,便于在main.c中使用,提高代码复用性。初始化Flash模块时需对要擦除的区域进行解锁,为后续擦除和写入操作做好准备。执行写入操作前,调用flash_erase函数擦除要写入的扇区,确保写入区是空白的,避免数据冲突。调用flash_write函数进行数据写入,传入扇区号、偏移量、写入数据长度和写入数组等参数,写入后可通过读取操作核对数据。操作IDE的顶部菜单“工具”→“读地址操作”,根据user.h中给出的地址说明,读出指定地址的信息,确认写入情况。0102030405初始化Flash模块擦除要写入的区域写入数据通过IDE的工具读出查看23/431.ADC的通用基础知识5.3.4ADC构件量化误差:模拟量量化过程中产生的误差,理论上为±1/2LSB,不可消除。转换速度:与转换精度、采样时间等有关,硬件类型及制造工艺影响其特征值。A/D参考电压:为A/D转换提供基准,可使用单独电源以提高精度。与A/D转换编程关联度较弱的技术指标模拟量是连续变化的物理量,可取任意值;数字量是分立量,只能取一些分立值。模数转换器(ADC)是将模拟信号转换为数字信号的电子器件,用于将连续变化的模拟量转换为计算机可处理的数字量。模拟量、数字量及模/数转换器转换精度:用ADC的二进制位数表征,位数越大精度越高,如12位ADC的理论精度为1.22mV(参考电压5V时)。单端输入与差分输入:单端输入简单但易受干扰,差分输入可降低干扰但多用一个引脚。软件滤波问题:可通过中值滤波、均值滤波等方法提高采样稳定性。物理量回归问题:将A/D值与实际物理量对应起来,可转化为数学上的回归分析问题。与A/D转换编程直接相关的技术指标以光敏/温度传感器为例,光敏电阻器和热敏电阻器可接入采样电路,通过电阻变化反映光强或温度变化,A/D采样点电压随电阻变化而变化,从而实现模拟量到数字量的转换。最简单的A/D转换采样电路举例24/43提供ADC初始化、读一个通道的AD值、芯片温度、中值滤波、平均值等函数。2.ADC构件API基于AHL-CH32V303-WiFi

开发板,通过宏定义测量的ADC通道、声明局部变量、初始化ADC通道、在主循环中进行采样处理等步骤,采集芯片温度与6通道的AD值。3.ADC构件的测试方法5.3.4ADC构件25/435.3.4ADC构件26/431.脉宽调制PWM通用基础知识5.3.5PWM构件0102PWM知识要素PWM信号是高/低电平重复交替的输出信号,主要技术指标包括时钟源频率、PWM周期、占空比、脉冲宽度与分辨率、极性与对齐方式等。PWM最常见应用于电机控制,还可用于产生时钟信号、控制灯光闪烁、命令字编码等。PWM的应用场合PWM最常见应用于电机控制,通过调整占空比控制电机转速。还可用于产生类似时钟的信号控制灯光闪烁,或控制输入设备的平均电流或电压,替代D/A转换,也可用于命令字编码,通过不同宽度脉冲代表不同命令。27/43PWM构件的头文件pwm.h在工程的..\03_MCU\MCU_drivers文件夹中,这里给出其API接口函数的使用说明及函数声明,其源码参见样例工程。2.PWM构件API5.3.5PWM构件28/433.PWM构件的测试方法5.3.5PWM构件在UserBoard.h文件中对使用的PWM引脚进行宏定义,如定义PWM_USER为TIM1_CH1,指定使用的引脚。PWM硬件引脚宏定义在main.c文件中给变量赋初值,如mduty初始化为0.0,mCount初始化为0,mFlag初始化为1,为后续程序运行做好准备。给变量赋初值在主循环中通过mCount和mFlag控制占空比的逐步增加,调用pwm_update函数更新占空比,观察蓝灯状态变化,并通过串口输出当前占空比值。同时获取PWM引脚状态,根据状态控制蓝灯亮灭,并通过串口输出状态信息。打出PWM波并观察状态在main.c文件中声明相关变量,如mduty用于存储占空比,mCount用于计数,mPWM_state用于存储PWM引脚状态,mFlag用于标志电平切换。变量定义调用pwm_init函数初始化PWM,设置时钟频率、周期、占空比、对齐方式和极性等参数,使PWM引脚开始输出PWM波。初始化PWM下载程序后,观察板子上的蓝灯闪烁变化,运行PC端的PWM测试程序,打开对应的串口,通过PC机观察PWM波形,验证PWM构件的功能。测试现象29/434.测试现象5.3.5PWM构件30/43外部设备构件设计实例5.4PART-

实时操作系统应用开发技术printf函数调用形式为printf(“格式控制字符串”,输出表列),格式控制字符串由格式字符串和非格式字符串组成,用于指定输出格式。5.4.1printf构件使用格式32/43在printf构件头文件中,需根据实际使用的串口修改宏定义,实现通过串口输出调试信息。015.4.2嵌入式printf构件说明33/435.4.3printf构件编程实例程序编译通过后,下载到硬件运行,通过串口工具查看输出结果,验证printf函数的正确性。3.运行结果在UserBoard.h中包含printf.h,确保程序能够访问printf函数的定义。1.包含文件在main.c中使用printf函数输出不同类型的数据,如整数、浮点数、字符和字符串,验证功能。2.添加printf输出02030134/435.4.3printf构件编程实例35/43算法构件设计实例5.5PART-

实时操作系统应用开发技术3.冒泡排

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论