当前位置: 首页 > news >正文

【STM32】STM32的Cube和HAL生态

1.单片机软件开发的时代变化

1.单片机的演进过程

(1)第1代:4004、8008、Zilog那个年代(大约1980年代之前)
(2)第2代:51、PIC8/16、AVR那个年代(大约2005年前)
(3)第3代:51、PIC32、Cortex-M0、M1、M3年代(大约2005年到现在)
(4)第4代:51、STM8/MSP430、PIC、Cortex-M4、M7、低功耗系列(现在到将来5-10年)

2.单片机开发的演进过程

(1)第1代:不讨论,没意义
(2)第2代:汇编和C都有,一般没有库或最多用标准C库
(3)第3代:出现单片机厂商提供的外设库,典型的如STM32的标准库
(4)第4代:库是标配和发展方向,库考虑更多硬件兼容性,库集成更多组件,库面向网络功能
(5)第5代:库面向云端对接、库面向上层语言如python的接口、提供辅助工具如STM32CubeMX

3.演进的内在动力和原因,方向

(1)单片机片上资源越来越多,越来越复杂,单片机编程的工程体量越来越大、复杂度和细节越来越多。因此必须要外设库来简化和加速开发。
(2)单片机型号越来越多,外设分布越来越散,引脚复用越来越多,需要专用配置工具协助工程师来设计引脚复用和基本功能配置,简化开发、快速评估。
(3)联网、USB、文件系统、加密算法、RTOS等第三方组件越来越重要
(4)物联网云管端模型,促进了单片机对联网对接的需求
(5)半导体厂商同质化竞争越来越激烈,不得不在开发生态上下功夫提升竞争力

4.演进的技术方向

(1)单片机开发在走PC、手机等以CPU为核心的产品的老路:底层和细节越来越成熟,ARM提供CPU的库、单片机厂商提供外设库,单片机软件工程师直接基于这些库来构建自己的应用。
(2)提供GUI式的辅助开发工具,加速并简化产品开发
(3)提供一整套开发生态而不只是一个SDK包
(4)提供HAL抽象层驱动来加速产品移植和选型,增加客户粘度。

2.STM32软件开发的各种模式

1、第1代:寄存器开发
2、第2代:标准库开发
3、第3代:HAL/LL库 + STM32CubeMX工具开发

(1)HAL(hardware abstract layer)、LL(lowerlevel layer)
(2)HAL库的优势是便于在不同型号的STM32芯片之间移植,劣势是代码效率低
(3)LL库几乎等同于直接操作寄存器
(4)CubeMX工具是ST的一站式开发包,层级高于SDK包,包含了STM32芯片开发的所有官方资源,提供了友好的使用方法;CubeMX是一个windows上的IDE软件;CubeMX是一个工具包加芯片容器,各系列芯片资料以插件补丁形式安装;
(4)HAL/LL库和CubeMX本质上是独立的东西,只是使用上纠缠在一起了而已。
(5)CubeMX和Keil MDK是不同作用的东西,要搞清楚。

4、我们应该如何学习

(1)拥抱变化,站在时代前沿。固守成规是最愚蠢的。
(2)换汤不换药,本质从未变过,变得只是表面。后面课程中会看到
(3)我推崇的态度:积极学习并使用新东西,好好利用新工具,但不要丢掉老知识和技能。
(4)原来就学了会了标准库的寄存器开发的,继续拓展学习HAL库和新工具就行了,你会发现体力活变少了,核心技能要求还是一样越来越高。
(5)新手入坑本来没底子的,可以直接学习新开发模式,然后逐步向底层靠拢,你会发现内部有不少秘密,这些深挖的东西其实就是前代的那一套······
(6)ARM、单片机厂商、MDK/IAR等IDE厂商、freeRTOS/LiteOS/rt-thread/AliOS/uCOS等厂商、华为云/阿里云/机智云/亚马逊/IBM等云厂商,大家都在布局,都在做体系,要注意去体会各家的不同资源和立场、不同玩法,找到最适合自己的东西来用。

3.STM32CubeMX工具入门

1、STM32CubeMX软件下载和安装

意法半导体-STMicroelectronics

(1)在http://www.stmicroelectronics.com.cn/ 首页搜索STM32CubeMX即可找到下载页
(2)分STM8版本和STM32版本
(3)尽量安装最新版,可以打开旧版本创建的工程;反之不可以。

2、MCU系列的firmware补丁包下载安装

(1)安装包搜STM32Cube也能搜到
(2)可以在CubeMX工具中在线下载安装,但是实际感觉不好用
(3)推荐到STM32官网下载离线包,然后本地导入

查看已经安装哪些依赖

注意导入离线包的版本与软件安装选择要对应得上

3、软件的大体浏览和基本介绍

查看开发板上的芯片信息

4.MDK5的全面介绍

STM32项目工程的搭建-CSDN博客

1、MDK5和之前的版本问题

1)MDK的前身是Keil,主页:www.keil.com。以前主要做51的IDE,后面被ARM收购增加了MDK

2)Keil开发51的是Keil C51 Keil 开发的是ARM的是Keil MDK

3)MDK主要用来开发Cortex-M系列的,ARM9,ARM11不太适合用MDK开发

4)MDK早期开发常用版本3.5 4.x,期间差异不大,到MDK5开始有了很大变化

2、MDK5的下载和安装

MDK5最新版本软件下载:http://www2.keil.com/mdk5
MDK的pack下载路径:https://www.keil.com/pack

keil C51

keil ARM

3、MDK5使用的一些细节

(1)工程建立和输出文件夹设计,MDK5已经默认设置了
(2)C/C++栏下的预定义宏


(3)C/C++栏下的头文件包含设计


(4)use microlib

(5)选择合适芯片

(6)选择正确的调试器型号:STLink

(7)Flash load下载算法设置

4、其他几种STM32开发的IDE

(1)IAR EWARM
(2)RVDS/ADS1.2
(3)gcc
(4)TrueStudio
(5)MDK4

5.STM32的FW补丁结构分析

1、整体情况

(1)每个系列(如L4、F1)是一个整体的补丁包
(2)每个系列都有不同的版本号,而且会不断升级
(3)可以在STM32CubeMX工具中在线升级安装,也可以到官网下载然后本地import
(4)所谓安装其实就是解压开放到了一个位置中

2.文件层级

Drivers

CMSIS

统一,方便移植

6.课程中用到的开发板介绍

1、首选NB476开发板(STM32L476)

因为开发比较晚,所以只能使用HAL库进行开发

F:主功能系列--》性能一般

L:专注与低功耗,不在乎性能

H:性能高

2、兼容讲HC6800 ARM3.0开发板

既可以使用标准库开发也可以使用HAL库开发

3、其他开发板怎么办

(1)HAL库设计的初衷就是解决代码在STM32各MCU系列间移植
(2)建议学习本课程用NB476开发板,学会了其实遇到哪个都能用起来
(3)除原有项目维护外,建议新项目一律切入HAL库不要再用标准库
(4)RTOS方面建议重点学第四季先掌握一个rtos,使用时尽量用liteos、rtt、alios等国产货

7.生态系统真的很重要

1、从小米的物联网生态说起

(1)商业上小米是比较早构建生态的,事实证明很成功
(2)生态系统的本质是资源的更合理、更低成本、更快速配置--小米的手机可以控制小米的家电
(3)信息化让商业生态重要性更高

2、软件开发行业也是生态为王

(1)Wintel时代围绕微软Windows和Office的PC软件生态帝国
(2)iOS的内聚生态成就了苹果的优秀和成功==软件+硬件
(3)android的开放生态主宰了当前的移动互联网时代,并将继续主宰

3、单片机开发领域生态竞争鏖战正酣

(1)物联网时代的来临使单片机站到了风口,列强环伺都盯上这块了
(2)ARM在CPU内核方面是目前霸主,但是也有RISC-V等在挑战
(3)开发环境方面MDK、IAR、gcc、DS等都有人用
(4)芯片方面STM32前几年积累的优势很大(尤其国内),STM32的开发生态也做的很好;但是TI、freescale、瑞萨、Atmel等其他厂商也有各自一定优势
(5)RTOS方面ucos、freertos、liteos(华为)、rtthread、alios(阿里云)等涌现出很多
(6)云方面国内阿里云、华为云、机智云等,国外amazon、google等也有很多
(7)无线通信领域WIFI、BT、nbiot、Lora、4G等多种方式都在快速发展演化
(8)下游应用厂商一大批也都在努力,各种新的开发模式和商业模式每天都在涌现

4、朱老师的看法

(1)开发生态的本质是让开发更快速、更简单、更直达目标、更低成本。
(2)开发者的个人价值和发展和开发生态的价值和发展并不完全重合,甚至有时候还矛盾冲突
(3)建议1:回归本质,打好根基、练好内功,以不变应万变
(4)建议2:积极拥抱变化,学习新技术、新开发方式、新语言、努力跟上时代
(5)单片机开发的未来在于:低功耗、联网连云、RTOS、安全和加密等方向点

相关文章:

【STM32】STM32的Cube和HAL生态

1.单片机软件开发的时代变化 1.单片机的演进过程 (1)第1代:4004、8008、Zilog那个年代(大约1980年代之前) (2)第2代:51、PIC8/16、AVR那个年代(大约2005年前) (3)第3代:51、PIC32、Cortex-M0、…...

汇编-EQU伪指令(数值替换)

EQU伪指令将一个符号名称与一个整数表达式或一个任意文本相关联, 它有3种格式 在第一种格式中, expression必须是一个有效的整数表达式。在第二种格式中, symbol是一个已存在的符号名称, 已经用或EQU定义过。在第三种格式中&…...

超声波俱乐部分享:Enter AI native application

11月5日,2023年第十四期超声波俱乐部内部分享会在北京望京举行。本期的主题是:Enter AI native application。 到场的嘉宾有:超声波创始人杨子超,超声波联合创始人、和牛商业创始人刘思雨,蓝驰创投合伙人刘勇&#xf…...

软件测试项目实战经验附视频以及源码【商城项目,app项目,电商项目,银行项目,医药项目,金融项目】(web+app+h5+小程序)

前言: ​​大家好,我是阿里测试君。 最近很多小伙伴都在面试,但是对于自己的项目经验比较缺少。阿里测试君再度出马,给大家找了一个非常适合练手的软件测试项目,此项目涵盖web端、app端、h5端、小程序端,…...

HarmonyOS应用开发-ArkTS基础知识

作者:杨亮Jerry 作为多年的大前端程序开发工作者,就目前的形式,个人浅见,在未来3-5年,移动端依旧是Android系统和iOS系统的天下。不过基于鸿蒙系统的应用开发还是值得我们去花点时间去了解下的,阅读并实践官…...

mybatis嵌套查询子集合只有一条数据

我们再用mybatis做嵌套查询时&#xff0c;有时会遇到子集合只有1条数据的情况&#xff0c;例如下这样&#xff1a; 数据库查询结果 xml <resultMap id"userMap" type"com.springboot.demo.test.entity.User"><id column"uid" property…...

Github 生成SSH秘钥及相关问题

1.生成过程参考&#xff1a;Github 生成SSH秘钥&#xff08;详细教程&#xff09;_github生成密钥controller节点生成ssh秘钥-CSDN博客 2.遇到的问题&#xff1a;GitHub Connect: kex_exchange_identification: Connection closed by remote host 注意&#xff1a;如果.ssh文…...

STM32外设系列—MPU6050角度传感器

&#x1f380; 文章作者&#xff1a;二土电子 &#x1f338; 关注公众号获取更多资料&#xff01; &#x1f438; 期待大家一起学习交流&#xff01; 文章目录 一、MPU6050简介二、MPU6050寄存器简介2.1 PWR_MGMT_1寄存器2.2 GYRO_CONFIG寄存器2.3 ACCEL_CONFIG寄存器2.4 PW…...

网站小程序分类目录网源码系统+会员登录注册功能 带完整搭建教程

大家好啊&#xff0c;源码小编今天来给大家分享一款网站小程序分类目录网源码系统会员登录注册功能 。 以下是核心代码图模块&#xff1a; 系统特色功能一览&#xff1a; 分类目录&#xff1a;系统按照不同的类别对网站进行分类&#xff0c;方便用户查找自己需要的网站。用户可…...

【Linux网络】手把手实操Linux系统网络服务DHCP

目录 一、什么是dhcp 二、详解dhcp的工作原理 三、dhcp的实操 第一步&#xff1a;3台机器的防火墙和安全机制都需要关闭&#xff01;&#xff01;&#xff01; 第二步&#xff1a;Linux下载dhcp软件&#xff0c;并查看配置文件位置 第三步&#xff1a;读配置文件&#xf…...

Huggingface网页解析和下载爬虫

解析网页&#xff1a; import requests from bs4 import BeautifulSoup# 目标网页URL url https://huggingface.co/internlm/internlm-20b/tree/main# 发送GET请求 response requests.get(url)# 检查请求是否成功 if response.status_code 200:# 使用BeautifulSoup解析HTML…...

C# Winform 自定义带SWITCH的卡片

1、创建卡片用户控件 在控件库中添加用户控件&#xff08;Windows窗体&#xff09;&#xff0c;命名为Card&#xff1b; 在属性/布局栏设置Size为148,128. 2、修改Card.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; u…...

我用Devchat开发了公务员报名确认系统自动登录脚本,再也不用担心挤不进去了

#AI编程助手哪家好&#xff1f;DevChat“真”好用 # 演示效果 我用Devchat开发了公务员报名确认系统自动登录&#xff0c;再也不用担心挤不进去了 目录 演示效果前言粉丝独家专属红包码DevChat是什么&#xff1f;DevChat AI编程助手有哪些优势一、安装Vscode1、下载vscode链接…...

如何低门槛开发有趣实用的ZigBee产品?

一、什么是 Zigbee 协议&#xff1f; Zigbee 技术是一种连接距离短、功耗低、复杂程度低、数据传输量低的无线通信技术&#xff0c;其命名灵感源自于蜜蜂在群体中的信息传输。它主要通过网关与互联网进行通信&#xff0c;并嵌入各种智能设备&#xff0c;最终实现自动控制和远程…...

ChatGPT和API发生重大中断!

11月9日凌晨&#xff0c;OpenAI在官网发布&#xff0c;ChatGPT和API发生重大中断&#xff0c;导致全球所有用户无法正常使用&#xff0c;宕机时间超过2小时。 目前&#xff0c;OpenAI已经找到问题所在并进行了修复&#xff0c;但仍然不稳定&#xff0c;会继续进行安全监控。 …...

SQL第五次上机实验

1.向图书表&#xff08;Book&#xff09;插入以下记录 USE TSGL GO INSERT INTO Book VALUES(7-5402-1800-3,文学类,边城,沈从文,燕山出版社,10,5,5)2.向借阅表插入以下两条记录 USE TSGL GO INSERT INTO Lend VALUES(201207034201,7-5402-1800-3,00366240,2013-04-22),(2012…...

Matplotlib数据可视化综合应用Matplotlib图形配置在线闯关_头歌实践教学平台

Matplotlib数据可视化综合应用图形配置 第1关 配置颜色条第2关 设置注释第3关 自定义坐标刻度第4关 配置文件与样式表 第1关 配置颜色条 任务描述 本关任务&#xff1a;使用colorbar绘制一个热成像图。 编程要求 在右侧编辑器Begin-End处补充代码&#xff0c;根据输入数据绘制…...

CSS实现瀑布流的两种方式

column 多行布局实现瀑布流 1.column 实现瀑布流主要依赖两个属性。 2.column-count 属性&#xff0c;是控制屏幕分为多少列。 3.column-gap 属性&#xff0c;是控制列与列之间的距离。 <!DOCTYPE html> <html lang"en"> <head><meta charset&q…...

Hadoop 视频分析系统

视频分析系统 业务流程 原始数据 vedio.json {"rank":1,"title":"《逃出大英博物馆》第二集","dzl":"77.8","bfl":"523.9","zfl":"39000","type":"影视",&quo…...

Flutter android和ios闪屏页配置

一.概念理解 闪屏页 1.当点击app开始的一瞬间&#xff0c;所呈现出来的页面就是闪屏页。 2.为什么会有闪屏也&#xff0c;由于app启动需要加载代码&#xff0c;这个过程需要耗时&#xff0c;在没有加载完成之前&#xff0c;是看不到app真正的页面。所以app在没有完全加载完时…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...