历史上的今天
返回首页

历史上的今天

今天是:2025年04月19日(星期六)

2020年04月19日 | STM32软件架构设计

2020-04-19 来源:eefocus

1、架构设计的意义

(1)应用代码逻辑清晰,且避免代码冗余;

(2)代码通用性,方便软件高速、有效的移植;

(3)最大限度做到无需大量修改即可复用;

(4)各功能独立,低耦合高内聚;

(5)利用架构及其规则进行开发,在开发时间、成本、生产率和产品质量方面具有极大的回报。


2、总体架构图

在这里插入图片描述

3、结构层说明

(1)应用层

应用层 为程序的总体运行框架,组织、整合、调用业务逻辑,完成产品整体功能;提供两种方案,如下:

a)使用 实时操作系统 ( FreeRTOS、μClinux、μC/OS-II) 实现多种任务,如 按键任务、显示任务、通信任务、心跳任务、定时任务 等;

b)由 消息队列搭建而成的多任务调度 方法,适合轻便型、内存小的芯片;持续更新……


(2)业务逻辑层

业务逻辑层 通过调用应用接口层API接口实现产品的各个业务功能,如:

a)按键处理业务;

b)显示更新业务;

c)通信收发业务;

d)线程守护业务;(看门狗)

e)定时处理业务;

……


(3)应用接口层

应用接口层 汇总功能模块接口,按照统一规则封装成API接口供业务逻辑层使用;


(4)功能模块层

功能模块层 封装实现具体功能的子模块,如 :

a)外设初始化模块;

b)电源管理模块;

c)显示模块;

d)算法模块;

e)按键模块;

f)通信模块;

……


(5)硬件抽象层

硬件抽象层 包含了两部分:

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模块接口;

d)PCB 3D图:

在这里插入图片描述

(2)项目文件结构

a)树形结构图:

在这里插入图片描述

b)文件说明:

kernel: 主架构目录,存放5个层,每个层带 src、inc;

obj: 工程编译输出文件,存放编译过程文件以及hex文件;

project: 工程项目编译及编辑文件,编译器 keil 工程文件、编辑器 source insight 4 工程文件;

readme: 说明文件,软件变更、软件版本、项目状态说明


(3)Keil 工程结构

在这里插入图片描述

7、总结

(1)初次写博客,总结 前人思想 + 个人见解,不足之处,欢迎指出,Thank you !!!

(2)文中的 消息队列搭建而成的多任务调度 后续以一篇独立博文说明,此处不做详细说明;

推荐阅读

史海拾趣

對餘科技(DIOFIT)公司的发展小趣事

在市场竞争日益激烈的情况下,DIOFIT公司凭借敏锐的市场洞察力和灵活的营销策略,不断拓展市场份额。他们针对不同地区、不同行业的需求,制定个性化的产品推广方案,通过线上线下相结合的方式,加强品牌推广和渠道建设。同时,DIOFIT公司还积极参与各类展会和论坛,与业界同仁交流合作,拓展国际视野,为公司的发展注入新的活力。

Hayashi Denko Co Ltd公司的发展小趣事

DIOFIT公司自创立之初,便面临着激烈的市场竞争和技术挑战。创始人团队凭借对电子技术的深入理解和热情,决心打造一家专注于高端电子产品研发和生产的企业。在资金紧张、人才匮乏的情况下,他们坚持自主研发,不断优化产品设计,最终成功推出了一款具有创新性的智能家居控制系统,赢得了市场的认可,为公司的发展奠定了坚实的基础。

APLUS Products公司的发展小趣事

在XXXX年,APLUS Products公司迎来了一次重要的技术突破。公司研发团队成功开发出了一款具有划时代意义的电子产品,该产品在性能、稳定性和用户体验等方面均达到了行业领先水平。这一技术突破不仅为公司赢得了大量订单,还进一步巩固了其在电子行业中的市场地位。

Aristo-Craft/ L M P Inc公司的发展小趣事

随着公司产品的不断升级和优化,Aristo-Craft/L M P Inc开始积极寻求市场拓展的机会。他们不仅在国内市场建立了稳定的销售渠道,还通过参加国际展会、与海外企业建立合作关系等方式,成功打入国际市场。同时,公司还积极寻求与其他行业领导者的战略合作,共同推动电子行业的发展。

Hittite Microwave(ADI)公司的发展小趣事

面对未来电子行业的快速发展和变革,Aristo-Craft/L M P Inc制定了明确的战略规划。他们将继续加大在研发和创新方面的投入,推出更多具有创新性和竞争力的产品。同时,公司还将积极拓展新的应用领域和市场,寻求更多的合作机会,以实现更加广泛的发展。

请注意,这些故事仅为概述性的框架,并非具体的事实描述。如果您需要更详细、具体的故事内容,建议查阅Aristo-Craft/L M P Inc公司的官方资料、新闻报道或行业分析报告等,以获取更准确的信息。

Anvo-Systems公司的发展小趣事

随着公司业务的不断扩展,Anvo-Systems开始实施国际化战略。公司先后在亚洲、欧洲和北美等地设立了研发中心和生产基地,以更好地满足不同地区的市场需求。同时,Anvo-Systems积极参与国际电子展会和技术交流活动,与全球同行建立了广泛的合作关系。这一全球化布局不仅提升了公司的竞争力,也为公司的长期发展打开了新的空间。

问答坊 | AI 解惑

uwb无线定位应用

工业生产自动化★ iLocateTM生产可视化系统是采用超宽带射频技术构建的实时定位系统(RTLS)。该系统具有高速率、低功耗、抗干扰的特点,并能够在传统的应用环境中达到15cm的3D定位精度。在现代工业制造领域,该系统能够真实地虚拟工厂车间生产环境 ...…

查看全部问答>

什么是混得好

前年的春节,我去参加了高中同学毕业后的第一次聚会,聚会后一位因事无缘参加的同学问我:“咱们同学里谁混得最好?”这个问题着实让我愣了一下,同学中有自由职业者、有自己办企业的老板、有打工的职业经理、有专业领域的技术专家、有政府部局委办 ...…

查看全部问答>

[求助]关于用GPRS终端与我的电脑通信的问题

大家好,请教个问题~ 打算用ARM+GPRS模块做个终端,欲让它与我的电脑通信,现在有如下问题: 我电脑是ADSL上网的,ipconfig显示IP为192.168.0.xx; 在www.ip138.com上显示的我的公网IP是125.37.172.xx。 那么我的电脑到底具有不具有公网IP?我的 ...…

查看全部问答>

请教多显示终端的问题!

50台以上触摸屏! 怎么样才能实现,一台服务器,向触摸屏发送不同的数据, 以及,触摸屏发送不同的数据到,一台服务器呢? 或者是,触摸屏+单片机+无线网卡! 这样能不能实现呢? 敬请赐教!考虑成本与效率!…

查看全部问答>

今天在STM32的英文论坛上看到一个网友写的STM32ISP下载器

大家可以试试看:http://www.mcuisp.com/software/eispV05.rar英文论坛的有关讨论:http://www.st.com/mcu/forums-cat-7588-23.html…

查看全部问答>

ST宣布以90nm工艺生产的STM32系列,带Flash的MCU产品

即将交付给重要客户进行测试,并在2010年投入量产。 中文版新闻见13楼。 ST Unveils World’s First ARM Cortex-M Series Microcontrollers Featuring Advanced 90nm Embedded Flash Technology 90nm Embedded Flash technology will furt ...…

查看全部问答>

STM32F的flash当做EPROM用,出问题

                                 STM32说flash可以当EPROM用,我用了一个多月后发现不能读写(同一块板,同一个CPU)不知怎么搞的,后来考虑到安全 ...…

查看全部问答>

天楹(上海)光电科技有限公司急聘!!

天楹(上海)光电科技有限公司急聘以下岗位:岗位名称:测试技术员具体要求:1、协助测试工程师完成指定的测试项目;2、对测试结果进行记录并填写测试记录表;3、对测试设备和测试场地进行日常的维护及清洁。1、中专以上学历,机电、机械、电子、测 ...…

查看全部问答>

HID设备通信难题

自己的硬件设备模拟成HID设备,然后在内核层通过 IOCTL_HID_SET_FEATURE 和 IOCTL_HID_GET_FEATURE 与之通信都是失败的,返回错误值为0xc00000010(STATUS_INVALID_DEVICE_REQUEST),但是通过 IOCTL_HID_GET_COLLECTION_INFORMATION 确能通信成功 ...…

查看全部问答>

FPGA 3G数据传输项目探讨

本人要做一个3G数据传输的项目,在网上找资料时发现基本上都是用ARM+LINUX做的,用FPGA做的比较少,相关资料也比较少。研究了两天,大致想了下方案,现在有几个问题和大家讨论下。 1.3G模块打算华为的EM770W或MU509,可是这样的模块都是MINI PCI接 ...…

查看全部问答>