STM32软件架构设计

1、架构设计的意义

(1)应用代码逻辑清晰、避免代码冗余、;
(2)代码通用,方便软件移植;
(3)最大限度做到无需大量修改即可复用;
(4)各功能独立,低耦合高内聚;
(5)利用架构及其规则进行开发,在开发时间、成本、生产率和产品质量方面具有极大的回报。

2、总体架构图

在这里插入图片描述

3、结构层说明

(1)应用层

应用层 为程序的总体运行框架,组织、整合、调用业务逻辑,完成产品整体功能;提供两种方案,如下:
a)使用 实时操作系统 ( FreeRTOS、μClinux、μC/OS-II) 实现多种任务,如 按键任务、显示任务、通信任务、心跳任务、定时任务 等;
b)由 消息队列搭建而成的多任务调度 方法,适合轻便型、内存小的芯片;准备中……

(2)业务逻辑层

业务逻辑层 通过调用应用接口层API接口实现产品的各个业务功能,如:
a)按键事件业务;
b)用户GUI业务;
c)通信收发业务;
d)线程守护业务;(看门狗
e)系统自检业务;
……

(3)功能模块层

功能模块层 封装实现具体功能的子模块,如 :
a)储存读写 模组;
b)按键触发 模组;
c)系统心跳 模组;
d)显示操作 模组;
e)串口收发 模组;
f )数据采集 模组;
……

(4)硬件抽象层

硬件抽象层 包含了两部分:
a)STM32片内外设驱动( GPIO、RCC、ADC、SPI、I2C、USART、etc );
b)外设底层驱动 ( Screen font library、Sensor I2C / SPI read and write );

4、遵循规则

(1)命名

a)文件名添加前缀:硬件抽象层( hal_ )、功能模块层( fml_ )、应用接口层( api_ )、业务逻辑层( bll_ )、应用层( app_ );
b)api接口命名规则:api_功能名称例:lis3dh传感器初始化接口命名 api_lis3dh_init()

(2)调用

a)同一级别的层相互独立,互不影响、互不干扰、互不关联,不能相互调用,只能调用下层接口;
b)各个层之间不能跨层调用,如:业务逻辑层不能直接调用功能模块层的代码 ,仅能调用应用接口层代码

(3)增删

a)新增接口要求与整体规则统一,后续只能增加,不允许修改、不允许删除;
b)每次新增接口,需在文件头备注 (作者、版本信息、状态功能) ;

5、优劣评估

(1)优势

a)底层驱动变动、更换平台,只需更改底层驱动,其他的层次结构不受影响、干扰,无需重新修改;
b)功能模块变动,只需单独升级功能模块,其他模块不受影响,应用层也不受影响;
c)架构设计完成后主要的工作区在业务逻辑层,应用层的作为整体架构的调度者、领导者,通过调用业务逻辑完成产品功能。

(2)劣势

a)架构设计一般比较复杂,设计和实现一个好的架构需要相当的时间。所以,一般只有在架构可以被多次反复应用的时候,前期投入的时间成本会得到丰厚的回报;
b)架构设计规定了一系列的接口和规则,这虽然简化了二次开发工作,但同时也要求二次开发者必须记住很多规则,如果违反了这些规则,就不能工作。但是由于架构屏蔽了大量的领域细节,相对而言,其学习成本还是大大降低了;
c)架构的升级对已有产品可能会造成严重的影响,导致需要完整的回归测试。

6、实例

(1)说明

本例以stm32f030k6t6为主控的小玩具为介绍,内部资源及外部设备 如下:
a)MCU内部资源: 32k flash、4k ram、DMA、ADC、TIM、I2C、SPI、USART……
b)软件运行框架: 由于内存较小,所以采用 消息队列搭建而成的多任务调度
c)外部设备:LED x 4、KEY x 2、DS1302、LIS3DH、OLED、锂电池充电管理、预留ESP32模块接口;

(2)项目文件结构

a)树形结构图:
在这里插入图片描述
b)文件说明:
kernel: 主架构目录,存放5个层,每个层带 src、inc;
obj: 工程编译输出文件,存放编译过程文件以及hex文件;
project: 工程项目编译及编辑文件,编译器 keil 工程文件、编辑器 source insight 4 工程文件;
readme: 说明文件,软件变更、软件版本、项目状态说明

(3)Keil 工程结构

在这里插入图片描述

7、总结

(1)初次写博客,总结 前人思想 + 个人见解,不足之处,欢迎指出,Thank you !!!
(2)文中的 消息队列搭建而成的多任务调度 后续以一篇独立博文说明,此处不做详细说明;
(3)没有最好的程序架构,只有只有最适合的!

### 回答1: STM32 是一款基于ARM Cortex-M 内核的微控制器系列,其软件架构设计主要包括以下几个方面。 首先,STM32软件架构设计根据其内核特性,采用分层结构,包括底层驱动层、中间层应用层。底层驱动层负责与硬件外设进行交互,中间层提供一些常用的库函数协议栈,应用层则是开发者实现自己的业务逻辑的地方。这种分层的设计使得软件开发更加模块化可维护。 其次,STM32软件架构设计采用了面向对象的编程思想,使用多种软件设计模式,如事件驱动模型、观察者模式等。通过事件驱动模型,外设的操作可以通过中断方式触发,有效解决了资源竞争实时性的问题。而观察者模式可以实现不同模块之间的解耦,方便软件的扩展维护。 另外,STM32软件架构设计还注重数据结构的设计优化。根据不同的应用场景,可以合理选择适当的数据结构算法,提高软件的效率性能。同时,还可以利用DMA (直接内存访问)控制器外设的硬件加速功能,减轻CPU 的负担,提高系统的实时性。 最后,STM32软件架构设计还包括低功耗优化。通过合理的休眠模式的选择,以及中断时钟的管理,可以降低系统的功耗,延长电池寿命。此外,还可以通过软件设计实现功耗管理策略,根据系统的实际工作状态动态调整功耗模式,更好地满足应用要求。 综上所述,STM32软件架构设计是一个以分层结构为基础,面向对象、事件驱动、数据结构优化低功耗优化为特点的系统设计。这种设计可以提高系统的灵活性、扩展性实时性,满足不同应用场景的需求。 ### 回答2: STM32软件架构设计是指在使用STM32系列微控制器开发应用程序时所设计软件体系结构。它是一个基于嵌入式系统的设计,涉及到硬件平台软件层面的设计软件架构设计通常包括以下几个方面: 1. 硬件平台选择:首先,需要选择合适的STM32微控制器作为硬件平台。选择合适的芯片型号,根据项目需求确定其性能、接口、存储等硬件资源。 2. 系统划分:将整个系统按功能进行划分,确定主控制逻辑、外设驱动、通信协议等模块的划分。 3. 任务调度:设计任务调度器,将不同的任务分配到不同的优先级中,确保系统中各个任务之间的协调工作。 4. 驱动程序设计:根据硬件平台的要求,编写相应的驱动程序,实现对外设的访问控制。 5. 中断处理:设计中断处理程序,响应外部中断事件(例如,按键触发)。 6. 通信协议设计:如有需要,根据项目需求,选择合适的通信协议(如CAN、UART、SPI等),并进行相应的协议设计实现。 7. 任务逻辑设计:根据需求,设计各个任务的逻辑流程,并实现任务之间的交互、数据传输等操作。 8. 软件测试调试:对软件进行测试调试,确保系统功能的正确性稳定性。 总之,STM32软件架构设计对于嵌入式系统的开发非常重要。它能够提高系统的稳定性、可扩展性可维护性,同时也能够优化资源的利用,提升系统的性能。有一个良好的软件架构设计可以有效地降低开发难度时间,提高开发效率。 ### 回答3: STM32是一款32位的嵌入式微控制器系列,软件架构设计是指在STM32开发过程中,根据系统需求硬件特性,设计出合理的软件架构,用于实现系统功能性能的优化。 首先,软件架构设计要考虑系统的模块划分。针对不同的功能模块,将其划分为独立的模块,并通过合适的接口进行通信。例如,将外设控制模块、通信模块、数据处理模块等划分为不同的模块,便于模块之间的独立设计后续的维护。 其次,软件架构设计要考虑系统的任务调度与管理。采用合适的任务调度算法,实现任务的优先级管理任务切换。通过任务调度器,合理安排任务的执行顺序,提高系统的响应能力效率。 此外,软件架构设计还要考虑系统的中断管理。STM32采用了中断机制,对于外部事件的响应十分重要。在软件架构设计中,应合理配置中断优先级,确保中断的及时响应处理。同时,针对不同的中断类型,设计合适的中断服务程序,以实现相应的功能需求。 另外,软件架构设计要考虑系统的存储管理。在STM32中,具有不同的存储器,例如Flash、RAM等。针对不同的存储器,设计合适的存储管理模块,实现数据的读写管理。同时,还要考虑存储器的分配使用,在有限的存储容量内实现系统功能的完整性。 最后,软件架构设计还要考虑系统的通信协议接口设计。在STM32开发中,通常需要与外部设备或其他硬件进行通信。根据具体需求,选择合适的通信协议,并设计相应的通信接口模块,以实现数据的传输交互。 综上所述,STM32软件架构设计是一个系统工程,需要考虑多方面的因素。通过合理的模块划分、任务调度与管理、中断管理、存储管理以及通信协议接口设计,可以实现系统功能性能的优化,满足不同应用场合的需求。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值