AD软件、单片机开发、C++开发、系统和实体总结
前言
我创作这篇博客的目的是记录学习技术过程中的笔记。希望通过分享自己的学习经历,能够帮助到那些对相关领域感兴趣或者正在学习的人们。
AD软件
1.Altium Designer软件中物料清单的libRef代表的是这颗物料在集成库中的名称,即原理图库的Design Item ID,大部分情况下,我们出BOM的时候并不需要这个字段。
2.STEP、STL?
一般在嘉立创平台上进行打印,或者在淘宝上打印。
相对SolidWorks等其他软件,fusion360相对容易上手。
做小型项目可以,但是大型项目还是传统老牌SolidWorks比较好。
3.AD软件导出电路板3D文件进行装配。
4.AD软件的多板系统设计
每一个封装都要有3D元件体,给结构工程师参考。
为了将多个“子”PCB板从电气和物理上连接在一起,同时保持其引脚和网络连接的完整性,需要一个高水平的设计系统。
Altium Designer以专用多板设计环境的形式支持集成系统级设计,该环境具有系统设计的逻辑(原理图)和物理(PCB)两个方面。
在Altium Designer中,系统级多板设计由专用多板项目类型(.PrjMbd)及其基于原理图的逻辑设计文档(.MbsDoc)和基于物理PCB的文档(.MbaDoc)承载。
从子PCB项目设计创建多板系统原理图设计的基本步骤是:
-
创建Altium Designer多板项目并将多板原理图文档添加到项目中。
-
在原理图中放置图形块(模块Modules),以逻辑方式表示子项目。
-
将每个模块链接到其相应的子项目。
-
将子项目连接数据导入到系统设计中。
-
在模块之间添加连接以创建逻辑系统设计。
5.AD软件的不规则形状板框设计以及3D模型导入
第一种方法是使用CAD软件画出板子结构图,然后导入到AD的Keep Out Layer中去即可。第二种方法就是自己使用AD自带的绘制工具自己画图。
提前找到对应的原理图、封装、3D模型
6.同一张原理图的模数电分开
从器件型号、电路结构、端子名称、电源电压三方面判断,一般情况下:
1、模拟电路的放大器图形是三角形,正、负双电源供电,电源电压大于5V,输入、输出之间有反馈电阻连接。
2、数字电路是单电源供电,电源电压多数是5V 或3.3V,逻辑图型是长方形,不同的逻辑门有标准的图标,很容易识别。
真实的电路图,而不是纸上谈兵的作业,都有标明器件型号,一目了然。
分立元件的电路识别可以看偏置电路,数字电路没有偏置电路。
在同一原理图中,既然有模拟电路又有数字电路,那么,就有接口电路,如比较器、模数转换器、数模转换器,接口电路就是模拟与数字的分界线。
6.1器件布局
6.2地的处理
数字地和模拟地单独铺铜,最后单点连接,桥接处采用0欧电阻或小电感(磁珠亦可)。而数字电源和模拟电源则是由电感10mh左右(或者0欧姆电阻,或者磁珠,磁珠体积比较大,一般不用)分开。
7.动态交互式BOM,方便手工焊接及贴片
AD安装InteractiveHtmlBom插件即可
8.AD在原理图及PCB中高亮某一条网络的三种方法
9.altium designer 3D模式下如何进行旋转、移动、缩放
先切换到三维界面,按住SHIFT不放,按鼠标右键调整视图角度
单纯按鼠标右键调整视图位置
先切换到三维界面,按住CTRL不放,按鼠标右键调整视图比例
10.altium designer如何将元器件放置到板子背面
按住元器件按快捷键L或者设置属性的layer
11.原理图及原理图库参数
管脚:
Designator 管脚号——与封装库的序号对应
Name 管脚名称
整体:
Design Item ID 元件符号的命名,一般都设置为元器件的名字,例如RES、CAP
Designator R?、C?
Description 描述,指明元器件所属的类别,例如电阻
Comment 注释 一般电阻、电容、电感等写=Value ,其他写元器件的名字
在生成BOM表的时候,一般按照comment进行分类,而默认的是一类器件就是一个comment,而不能按Value或其它属性,将不同Value值的元件分成不同的列显示。
(举个例子来说,一块PCB板上有1个472的电阻,2个332的电阻,这3个元件Value属性分别为各电阻的阻值,但其Comment属性一致为"Res”,Description属性是一致为 "Resistor ”,那么在Altium Designer中导出BOM将会把1个472电阻和2个322电阻组成一列项,元件个数显示为3个。这样的效果显示不是我们想要的,把不同参数值的元件混在一起,不利于生产需要的评估和安排;我们想要的效果是,按不同参数值,将各类元件按参数大小进行分项和排列。)
Footprint 封装
12.altium designer的栅格的设置与意义
可视栅格:
就是在工作区上看到的网格,这是一种几何点或线构成的网格,其作用类似于坐标线,可帮助用户掌握图件间的距离。
原理图下切换可视栅格快捷键:Shift+Ctrl+G(只能可见或者可见,一个栅格的单位就是左下角的1mil或者1mm)
捕捉栅格:
其作用是控制光标每次移动的距离。
原理图下切换捕捉栅格快捷键:G(其单位见左下角的Grid:1mm即可)
电气栅格:
电气栅格的作用是在移动或放置元件时,当元件与周围电气实体的距离在电气栅格的设置范围内时,元件与电气实体会互相吸住。
原理图下切换电气栅格快捷键:Shift+E
13.altium designer的panels
SCH Library:原理图库总清单
Properties :属性 上面搜索代表搜索属性状态栏能用的参数,右上角漏斗代表过滤器,限制属性状态栏能用的参数,属性状态栏有Selection Filter
Project :工程
Message:消息 执行某种功能的结果,例如编译原理图、查找等
Navigator:导航 原理图看组件、网络标签等比较方便
component:元件库
PCB Library:PCB库总清单
PCBLIB Fliter:PCB库过滤器
SCHLIB Fliter:原理图库过滤器
View configuration:视图配置
14.原理图及PCB生成对应的原理图库及PCB库
在设计中生成原理图库及生成PCB库
15.原理图标注
点击工具→标注→原理图标注
点击更新更改列表→接受更改创建→执行变更→(验证变更)→执行变更
16.原理图的查找
快捷键Ctrl+F,可快速查找元器件、丝印、管脚等信息
17.原理图中批量修改元器件封装(封装管理器使用)
打开封装管理器
填写封装
浏览封装库列表和封装列表
添加封装库到项目
接受变化
18.原理图的编译设置及检查
将原理图更新到PCB之前需要对原理图进行编译以及电气性能的检查,可以利用AD自带的ERC功能对原理图进行检查
工程---->Compile PCB Project
工程---->工程选项 设置原理图的常用检测
19.画PCB库中如何设置中心参考点
编辑---->设置参考点
20.3D模型的创建和导入
3D模型能把结构的一些参数值对比于实物作为一个整体打包,给结构工程师进行参考,利用所给的参数看是否能将产品装进去,调整参数,使制作出来的外壳能用,并且给PCB工程师进行反馈
3D元件库默认放在mechanical 1层
Overall Height : 实体高度
Standoff Height:悬浮高度
21.固定孔绘制
放置焊盘(1.过孔大小和外形尺寸设置一样 2.取消镀金)
放置过孔(1.孔尺寸和直径设置一样 2.始层为Top layer 终层为Botter layer)
利用keepout层(禁止布线层)画安装孔
22.设计规则
https://blog.csdn.net/qq_43463741/article/details/102880720
23.单独显示一层
按shift+s键显示一层(单层显示好走线跟铺铜)
24.AD各层的含义
- top layer 顶层
- bottom layer 底层
- mechanical 机械层
- keepout layer 禁止布线层
- top overlay 顶层丝印层
- bottom overlay 底层丝印层
- top paste 顶层助焊层
- bottom paste 底层助焊层
- top solder 顶层阻焊层
- bottom solder 底层阻焊层
- drill guide 过孔引导层
- drill drawing 过孔钻孔层
- multilayer 多层
25.层叠设置器
工具---->层叠管理器
正片:信号层,所见即所得,有线的部分敷铜。小电源用正片。
负片:平面层,划线的位置没有铜。大电源、接地用负片,负片在移动器件时,可以自动避让。
26.交叉选择模式
工具---->交叉选择模式
在原理图选中相对应的器件,在PCB图中该器件就会高亮,同时被选中 这极大的方便了我们的布局处理
27.对象类浏览器
设计---->类
在Net Classes下,右键新建类,再添加即可。
PCB选项卡添加类
在PCB选项卡对某类进行连接隐藏跟显示关闭
类的作用:
1、建立走线规则时,可以根据不同类的进行不同的规则设置。
2、可以根据不同类,设置不同的颜色分布,进而更好的对布线进行提前规划。
3、在PCB类管理器中,可以单独选择类进行高亮,从而方便布线前进行散孔,也很方便走线管理。
28.altium designer 如何放置compile mask
工程中需要根据不同产品不同配置对外围器件进行增减,一般的做法是在一个完整的原理图上对需要增减的器件进行compile mask设置,被选中的部分会进行PCB编译,取消则不进行PCB编译。
具体的设置方法是原理图界面上place–>directives–>compile mask,拖动鼠标,框住不需编译的电路即可。
这样被框起来的区域就不被编译进pcb。若要取消,只需要在编译屏蔽区域的左上角有一个小三角箭头,点击即可。
29.altium designer 的drill table
具体的设置方法是PCB界面上place—drill table
30.altium designer 3D模式下也能shift+s高亮某层
单片机开发
1.PlatformIO是一个多元化的硬件平台开发环境,它可以支持市面上的大多数硬件处理器的程序开发。提供跨平台的代码构建器、集成开发环境(IDE),兼容 Arduino,ESP8266和mbed等。它支持超过350个的嵌入式设备,超过20个的开发平台,超过10个的框架。
平台:各个公司具体的系列芯片的开发平台
框架:类似于 SDK 的一个东西,本质是一个官方或第三方提供的软件库。一个平台有可能支持多个不同开发框架,比如 ST STM32 支持的开发框架有:Arduino、CMSIS(Cortex-M 处理器系列的与供应商无关的硬件抽象层,就是标准库)、libOpenCM3、mbed、SPL、STM32Cube就是**(HAL库)**。
库:第三方组件库
板子:PIO 针对支持的开发板都提供完整的项目生成脚本,新建项目从未如此快捷简单!
项目文件结构
2.STM32开发的3种方式
寄存器开发:需要启动文件startup_stm32f40_41xxx.s、SYSTEM 文件夹代码(该文件夹由 ALIENTEK 提供,是 STM32F4xx 系列的底层核心驱动函数,可以用在 STM32F4xx 系列的各个型号上面,方便大家 快速构建自己的工程。)
SYSTEM 文件夹所使用的代码
ST32FX官方固件库,函数的集合,其作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。遵循CMSIS标准,里面包含CMSIS框架。需要固件库包。目前最多人使用的方式。
HAL库,硬件抽象层,HAL库工程一般使用Cube软件来生成工程。方便的实现跨STM32产品的最大可移植性。优势就是不需要开发工程师再关注所用MCU型号,只需要专注所以要的功能软件开发工作。需要HAL库包。目前主力推的开发方式。
不同型号的 stm32 芯片它的标准库是不一样的,例如在 F4 上开发的程序移植到 F3 上是不能通用的,而使用 HAL 库,只要使用的是相通的外设,程序基本可以完全复制粘贴,注意是相通外设,意思也就是不能无中生有,例如 F7 比 F3 要多几个定时器,不能明明没有这个定时器却非要配置,但其实这种情况不多,绝大多数都可以直接复制粘贴。缺点就是执行效率低。
可以使用 ST 官方的 STM32CubeMX 图 形工具生成一个工程模板,也可以自己新建一个模板。
3.51单片机开发的方式
只有寄存器开发,加"reg52.h"头文件即可
4.ST的固件库
core_cm4.h CMSIS核心文件,提供进入核心文件,提供M4内核接口,这是ARM 公司提供,对所有CM4 内核的芯片都一样。
system_stm32f4xx.h 片上外设接入层系统头文件。主要是申明设置系统及总线时钟相关的函数。与其对应的源文件system_stm32f4xx.c,这个里面有一个非常重要的 SystemInit()函数申明,这个函数在我们系统启动的时候都会调用,用 来设置系统的整个系统和总线时钟。
stm32f4xx.h 是 STM32F4 片上外设访问层头文件。这个文件就相当重要了,只要你做 STM32F4 开发,你几乎时刻都要查看这个文件相关的定义。
stm32f4xx_it.c 和 stm32f4xx_it.h 里面是用来编写中断服务函数,中断服务函数也可以随意编写在工程里面的任意一个文件里面,个人觉得这个文件没太大意义。
stm32f4xx_conf.h 是外设驱动配置文件。文件打开可以看到一堆的#include,这里你建立工程的时候,可以注释掉一些你不用的外设头文件。
misc.c,misc.h,stm32f4xx_ppp.c,stm32f4xx_ppp.h 以及 stm32f4xx_rcc.c 和stm32f4xx_rcc.h 文件,这些文件 是 STM32F4 标准的外设库文件。其中 misc.c 和 misc.h 是定义中断优先级分组以及 Systick 定时 器相关的函数。stm32f3xx_rcc.c 和 stm32f4xx_rcc.h 是与 RCC 相关的一些操作函数,作用主要 是一些时钟的配置和使能。在任何一个 STM32 工程 RCC 相关的源文件和头文件是必须添加的。 对于文件 stm32f4xx_ppp.c 和 stm32f4xx_ppp.h,这就是 stm32F4 标准外设固件库对应的源 文件和头文件。包括一些常用外设 GPIO,ADC,USART 等。
文件 Application.c 实际就是说是应用层代码。
实际上一个完整的 STM32F4 的工程光有上面这些文件还是不够的。还缺少非常关键的启 动文件。对于不同型号的 STM32F4 系列对应 的启动文件也不一样。我们的开发板是 STM32F407 系列所以我们选择的启动文件为
startup_stm32f40_41xxx.s。
5.ST的HAL库
6.其他库,例如USMART组件、SDIO 组件、UCOSII组件、LWIP组件、GUI组件等等第三方组件
7.LVGL
LVGL用C语言编写,以实现最大的兼容性(与C ++兼容),模拟器可在没有嵌入式硬件的PC上启动嵌入式GUI设计,同时LVGL作为一个图形库,它自带着接近三十多种小工具可以供开发者使用。
LVGL 是最流行的免费开源嵌入式图形库,可为任何MCU、MPU和显示器类型创建美观的UI。
8.STM32CubeMX(STM32CubeIDE是类似MDK的开发环境)
STM32Cube初始化代码生成器
它集成了芯片选型、引脚分配和功能配置,中间件配置,时钟配置,初始代码和项目的功能。比如STM32Cube.AI就是基于STM32CubeMX的插件功能,来把训练好的模型部署到STM32上;比如在安全固件升级和安全固件安装,即SBSFU和SFI操作里,STM32CubeProgrammer就启动了代码加密,HSM实例化等功能。STM32支持丰富的开源和ST自主知识产权中间件,比如来自开源社区的FreeRTOS,FatFS,mbedTLS;ST自己的USB主机和设备协议栈,TouchGFX等。
https://blog.csdn.net/as480133937/article/details/98947162
默认时钟是使用内部RC振荡器(HSI) ,需要配置RCC才能够使用外部时钟源
设置RCC-设置外设(GPIO输出设置GPIO的速度、上下拉等、GPIO输入设置GPIO的速度、上下拉+中断NVIC等)-设置时钟(参考时钟树设置)-生成代码
9.STM32的时钟
时钟信号推动单片机内各个部分执行相应的指令。
使用任何外设都需要时钟才能启动,但并不是所有的外设都需要系统时钟那么高的频率,为了兼容不同速度的设备,有些高速,有些低速,如果都用高速时钟,势必造成浪费 ,并且,同一个电路,时钟越快功耗越快,同时抗电磁干扰能力也就越弱,所以较为复杂的MCU都是采用多时钟源的方法来解决这些问题。所以便有了STM32的时钟系统和时钟树。
系统时钟,是处理器运行时间基准(每一条机器指令一个时钟周期)。
不同的功能模块会有不同的时钟上限,因此提供不同的时钟,也能在一个单片机内放置更多的功能模块。对不同模块的时钟增加开启和关闭功能,可以降低单片机的功耗。
STM32为了低功耗,他将所有的外设时钟都设置为disable(不使能),用到什么外设,只要打开对应外设的时钟就可以, 其他的没用到的可以还是disable(不使能),这样耗能就会减少。 这就是为什么不管你配置什么功能都需要先打开对应的时钟的原因。
从左到右可以简单理解为 各个时钟源—>系统时钟来源的设置—>各个外设时钟的设置
时钟系统
各个时钟源 (左边的部分)
STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。
①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC 振荡器,频率为 40kHz。独立看门狗的时钟源只能是 LSI,同时 LSI 还可以作为 RTC 的时钟源。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
HSI高速内部时钟 HSE高速外部时钟 PLL锁相环时钟 这三个经过分频或者倍频 作为系统时钟来使用
下面介绍这 5 个时钟源是如何给各个外设以及系统提供时钟的
1、 MCO 是 STM32 的一个时钟输出 IO(PA8),它可以选择一个时钟信号输出,可以选择为 PLL 输出的 2 分频、HSI、HSE、或者系统时钟。这个时钟可以用来给外部其他系统提供时钟源。
2、 RTCCLK 从图上可以看出,RTC 的时钟源可以选择 LSI,LSE,以及HSE 的 128 分频。
3、 USBCLK 的时钟是来自 PLL 时钟源。 STM32 中有一个全速功能的 USB 模块,其串行接口引擎需要一个频率为 48MHz 的时钟源。该时钟源只能从 PLL 输出端获取,可以选择为 1.5 分频或者 1 分频,也就是,当需要使用 USB模块时,PLL 必须使能,并且时钟频率配置为 48MHz 或 72MHz。
4、SYSCLK 它是供 STM32 中绝大部分部件工作的时钟源。 系统时钟可选择为 PLL 输出、 HSI 或者 HSE。系统时钟最大频率为 72MHz
5、从时钟图上可以看出,其他所有外设的时钟最终来源都是 SYSCLK。SYSCLK 通过 AHB 分频器分频后送给各模块使用。这些模块包括:
①、AHB 总线、内核、内存和 DMA 使用的 HCLK 时钟。
②、通过 8 分频后送给 Cortex 的系统定时器时钟,也就是 systick 了。
③、直接送给 Cortex 的空闲运行时钟 FCLK。
④、送给 APB1 分频器。APB1 分频器输出一路供 APB1 外设使用(PCLK1,最大频率 36MHz),另一路送给定时器(Timer)2、3、4 倍频器使用。
⑤、送给 APB2 分频器。APB2 分频器分频输出一路供 APB2 外设使用(PCLK2,最大频率 72MHz),另一路送给定时器(Timer)1 倍频器使用。
其中需要理解的是 APB1 和 APB2 的区别,APB1 上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3 等等,APB2 上面连接的是高速外设包括 UART1、SPI1、Timer1、ADC1、ADC2、所有普通 IO 口(PA~PE)、第二功能 IO 口等。
SystemInit时钟系统初始化函数剖析
STM32 时钟系统的配置除了初始化的时候在 system_stm32f10x.c 中的 SystemInit()函数中外,其他的配置主要在 stm32f10x_rcc.c 文件中,里面有很多时钟设置函数。
对于系统时钟,默认情况下是在 SystemInit 函数的 SetSysClock()函数中间判断的,而设置是通过宏定义设置的。我们可以看看 SetSysClock()函数体:
static void SetSysClock(void)
{
#ifdef SYSCLK_FREQ_HSE
SetSysClockToHSE();
#elif defined SYSCLK_FREQ_24MHz
SetSysClockTo24();
#elif defined SYSCLK_FREQ_36MHz
SetSysClockTo36();
#elif defined SYSCLK_FREQ_48MHz
SetSysClockTo48();
#elif defined SYSCLK_FREQ_56MHz
SetSysClockTo56();
#elif defined SYSCLK_FREQ_72MHz
SetSysClockTo72();
#endif
}
我们系统默认宏定义是 72MHz:
#define SYSCLK_FREQ_72MHz 72000000
如果你要设置为 36MHz,只需要注释掉上面代码,然后加入下面代码即可:
#define SYSCLK_FREQ_36MHz 36000000
同时还要注意的是,当我们设置好系统时钟后,可以通过变量 SystemCoreClock 获取系统时钟值。
初始化之前首先通过宏定义定义系统时钟频率:
#define SYSCLK_FREQ_72MHz 72000000
(系统自动调用SystemInit()函数)
初始化之后的状态:
SYSCLK(系统时钟)=72MHz
AHB 总线时钟(使用 SYSCLK)=72MHz
APB1 总线时钟(PCLK1)=36MHz
APB2 总线时钟(PCLK2)=72MHz
PLL 时钟=72MHz
任何一个外设在使用之前,必须首先使能其相应的时钟。
RCC相关配置寄存器
typedef struct
{
__IO uint32_t CR; //HSI,HSE,CSS,PLL等的使能和就绪标志位
__IO uint32_t CFGR; //PLL等的时钟源选择,分频系数设定
__IO uint32_t CIR; // 清除/使能 时钟就绪中断
__IO uint32_t APB2RSTR; //APB2线上外设复位寄存器
__IO uint32_t APB1RSTR; //APB1线上外设复位寄存器
__IO uint32_t AHBENR; //DMA,SDIO等时钟使能
__IO uint32_t APB2ENR; //APB2线上外设时钟使能
__IO uint32_t APB1ENR; //APB1线上外设时钟使能
__IO uint32_t BDCR; //备份域控制寄存器
__IO uint32_t CSR; //控制状态寄存器
} RCC_TypeDef;
固件库时钟配置函数:
1、时钟使能配置:
RCC_LSEConfig() 、RCC_HSEConfig()、
RCC_HSICmd() 、 RCC_LSICmd() 、 RCC_PLLCmd() ……
2、时钟源相关配置:
RCC_PLLConfig ()、 RCC_SYSCLKConfig() 、
RCC_RTCCLKConfig() …
3、分频系数选择配置:
RCC_HCLKConfig() 、 RCC_PCLK1Config() 、 RCC_PCLK2Config()…
4、外设时钟使能:
RCC_APB1PeriphClockCmd(): //APB1线上外设时钟使能
RCC_APB2PeriphClockCmd(); //APB2线上外设时钟使能
RCC_AHBPeriphClockCmd(); //AHB线上外设时钟使能
5、 其他外设时钟配置:
RCC_ADCCLKConfig (); RCC_RTCCLKConfig();
6、状态参数获取参数:
RCC_GetClocksFreq();
RCC_GetSYSCLKSource();
RCC_GetFlagStatus()
7、RCC中断相关函数 :
RCC_ITConfig() 、 RCC_GetITStatus() 、 RCC_ClearITPendingBit()…
知识点补充:RCC寄存器(复位与时钟控制)
复位
STM32F10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。
系统复位: 除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器以外,系统复位将复位所有寄存器至它们的复位状态。
电源复位: 将复位除了备份区域外的所有寄存器。
备份区域复位: 备份区域拥有两个专门的复位,它们只影响备份区域。
时钟启动过程
1、开机或复位时使用内部时钟
2、用软件进行切换,尝试开启外部时钟
3、如果开启成功,则使用外部时钟,否则使用内部
10.51单片机的时钟
只有一个系统时钟
注:
1、系统时钟是CPU时钟,RCT是实时时钟。
2、系统时钟的目的是高速稳定,而实时时钟目的是低功耗精确。
11.实时操作系统
如果是一个巨大的项目,操作系统是必备的,他能提供很多支持,做很多基层的工作,方便以后的升级。但是他的维护和他所消耗的资源(空间),也成为了它在单片机领域推广的致命伤。所以相反的如果你只要某个功能,不装操作系统明显方便,而且易于维护。
RTOS有着下列优点:
1、RTOS会基于优先级进行任务调度,优先处理更加重要的进程;
2、RTOS提供API(Application Programming Interface,应用编程接口)功能,使应用程序代码更简洁;
3、抽象时序依赖性和基于任务的设计减少了模块之间的相互依赖性;
4、RTOS提供基于任务的模块化开发,可进行基于任务的模块化测试;
5、基于任务的API模式是模块化的,团队分工得以更加明确。
6、RTOS由事件驱动,不会造成性能浪费。
裸机开发:
这样的系统实时性很差。
比如“事务1”如果是一个用户输入的检测,当用户输入时,如果程序正在处理事务1下面的那些事务,那么这次用户输入将失效,用户的体验是“这个按键不灵敏,这个机器很慢”,而我们如果把事务放到中断里去处理,虽然改善了实时性但会导致另外一个问题,有可能会引发中断丢失,这个后果有时候比“慢一点”更加严重和恶劣!
又比如事务2是一个只需要1s钟处理一次的任务,那么显然事务2会白白浪费CPU的时间。
12.固件
固件(Firmware) 就是写入EROM(可擦写只读存储器)或EEPROM(电可擦可编程只读存储器)中的程序。
固件是一种嵌入在硬件设备中的软件,通常通过下载器下载到设备中,固件的功能应该包括系统(如果有的话)、驱动、应用的具体实现。
固件方案设计一般分两个模块,第一个是确定方案系统,第二个是确定应用架构,方案设计完成后,输出方案文档、系统框图、技术调研文档等资料,进入方案评审环节。
12.1 确定方案系统
根据产品的功能复杂度和硬件芯片的资源外设,确定方案是否应该上操作系统,常见的设备底层实现方式有:
1)裸机
2)RTOS
3)Linux/Android
12.2 确定通讯协议
1)设备与设备间通讯
常见的比如Modbus、CANopen(基于CAN)、CANopen(EtherCat),当然了,也可以根据应用情况自定通讯协议。
2)物联网设备与服务器端通讯
常见智能硬件设备通讯协议模型:
3)音视频流通讯
RTSP发起/终结流媒体、RTP传输流媒体数据 、RTCP对RTP进行控制,同步。
12.3 确定应用模块划分
12.4 确定外部业务接口
1)确定外部接口/SDK
如果设备中使用到第三方的SDK或接口的,例如语音识别、人脸识别等相关的,需提前确定好接口功能是否能满足业务需求以及商务相关事宜。
2)确定第三方库
如果设备中需要使用第三方库的,需要提前确定开源许可,是否有版权方面问题。
12.5 其它模块设计
1)低功耗设计
2)雾计算引擎
把脚本解析器移植到设备端,建立字典,然后动态对服务端来的脚本进行解析。
3)内存泄漏监测
4)UI相关
在选择非Android或Linux操作系统时,如果需要做交互UI,处理自己手写界面和交互,常用高效方式有littlevGL、freetype、CEGUI、MyGUI等
5)深度学习相关
13.GPIO
GPIO速率配置是指I/O口驱动电路的响应速度。
14.OTA
远程升级(Over The Air Update),是一种通过无线网络对智能设备(如汽车、手机等)进行软件更新或优化的技术。它可以让嵌入式设备在不需要物理连接的情况下,通过无线网络接收和安装新版本的固件。
15.文件结构?
Include是自己写的头文件,里面include lib目录文件或者所用板子的arduino文件
src是自己写的头文件的实现以及main文件
如果从platformio下载对应的库(例如fastled)的话,就在pio目录
对platformIO、fastled、lvgl、mpu6050等不了解看官方文档
16.STM系列器件选型及最小系统
最小系统(单片机工作的最低要求):电源+时钟+调试+复位+控制芯片
备用电池电路不是必需的,保证 RTC 的走时以及后备寄存器的内容不丢失。其中芯片采用采用 CR1220 纽扣电池和 VCC3.3 混合供电的方式。
器件选型直接在STM32cubemx选择就行,黄色限死了最小系统电路,其中时钟以及调试还要通过软件选择(也是绿色部分)。其他的绿色部分基本就是外设,满足的你所需功能需求即可。
https://zhuanlan.zhihu.com/p/92483993
C++开发
1.VSCode与VS 2017和GIT结合开发
VSCode什么都能做,高复杂度项目还是上VS、IDEA、Pycharm等专用集成开发环境
可以在终端编译并运行
2.make, makefile, cmake, qmake ?
gcc是GNU编译器套件,可编译很多种编程语言。当你的程序只有一个源文件时,直接就可以用gcc命令编译它。但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大,所以出现了make工具。
makefile在一些简单的工程完全可以人工手下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。
cmake可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。
如果你用IDE,类似VS这些一般它都能帮你弄好了,你只需要按一下那个三角形。
CMake可以跨平台,linux没有VS,可以把原先在Win上开发的程序移植到Linux上。
CMake可以生成VS项目。
3.算法模型的落地
- 算法任务确立
- 方法调研
- 模型选型和优化
- 数据采集标定
- 模型训练
- 部署验证
4.AI补全代码插件
Copilot插件已支持了 Visual Studio Code、Visual Studio、Neovim 和JetBrains IDE 等
5.VScode进行C/C++的编译
要么修改tasks.json进行配置,要么使用Cmake对CmakeLists.txt进行配置。
系统
1.bash和shell
操作系统运行起来后都会给用户提供一个操作接口,这个操作接口就叫shell。Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。类似linux的终端和window的cmd
Shell就是一个用户跟操作系统之间的一个命令解释器。
Shell 并不是简单的堆砌命令,我们还可以在 Shell 中编程。
我们平时所说的 Shell,有时候是指连接用户和内核的这个程序,有时候又是指 Shell 编程。
bash(/bin/bash)就是linux默认的shell。
2.当SSH远程连接到服务器上,然后运行一个服务 ./catalina.sh start,然后把终端开闭(切断SSH连接)之后,发现该服务中断,导致网页无法访问
使用nohup命令让程序在关闭窗口(切换SSH连接)的时候程序还能继续在后台运行。也可以使用screen(推荐)。
3.用户想把自家的能耗查询服务公布到互联网上,那么可以使用REST/HTTP来开放API服务
4.python的pyinstaller库可以直接将写好的python代码打包成可执行的.exe文件,生成好的文件不需要python运行环境和pycharm等IDE就可以直接双击运行。(还可以打包成安卓的apk安装文件等)
5.公网IP和私网IP
私网ip可以重复,公网ip世界上只有一个,在同一个局域网下面,比如路由是一个公网ip,那下面连接路由器的电脑手机等等设备本身具有一个ip,就是私网ip,这些设备通过路由的公网ip上网.而且公网是不能通过私有ip来找到对应的设备的,只能通过公网ip找到设备。
因为公网ip资源不足,很多宽带运营商默认就把家庭的宽带设置成了私网,简单解释就是一个ip 地址有几百家用户共同拥有,这个节省了ip资源。
6.LNMP/LAMP网站环境
L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。
L指Linux,A指Apache,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。
7.Nginx/Apache的作用
Nginx同Apache一样都是一种WEB服务器。
8.Django 确实有一个用于开发目的的内置 Web 服务器。 当你在本地运行 Web 应用时(例如在 Visual Studio 中调试时),就会使用此 Web 服务器。 然而,在部署到 Web 主机时,Django 会改为使用主机的 Web 服务器。 Django 项目中的 wsgi.py 模块负责挂接到生产服务器。
Django 是个Web 框架,框架的作用在于处理 request 和 response,其他的不是框架所关心的内容。Django 所提供的是一个开发服务器,这个开发服务器,没有经过安全测试,而且使用的是 Python 自带的 simple HTTPServer 创建的,在安全性和效率上都是不行的。
Express也能快速地创建Web网站服务器,但Nginx的优势在负载均衡和静态文件处理。你拿node做静态服务和动态服务均可,但稳定性不如nginx。
9.宝塔:傻逼化的服务器运维管理工具
10.手机APP开发、小程序开发、桌面开发与网站开发区别
手机App开发与网站开发会采用不同的编程语言,但是从技术体系结构上来看,手机App开发和传统的网站开发(静态为主)都属于前端开发的范畴,所以二者之间还是有很多相似之处的。
目前手机开发总体上来说分为两大部分,一部分是全新的App开发,涉及到Android开发和iOS开发两大块,另一部分是基于已有的App进行二次开发,比如各大互联网平台都基于自身的App开放了小程序开发接口,这一部分开发任务也是比较多的,而且未来的发展空间也相对比较广阔。
一般app的后端会提供RESTFUL接口供前端调用,也有http方式调用后端的接口。桌面开发也是类似。小程序可以使用自己定义的后端接口,也可以使用腾讯提供的云函数。(云开发快速上线但是流量较少、云数据库限制多、后台对外限制多(例如利用云数据库做后台管理系统))
11.无代码开发、低代码开发
zion:无代码开发平台(有前后端)
主流无代码开发平台:
主流低代码开发平台:阿里宜搭、腾讯云微搭等
12.软件开发流程
需求收集-产品原型设计-产品前后端开发-产品部署-产品运维
13.Serverless
Serverless通常被直译成“无服务器”,无服务器计算是可以让用户在不考虑服务器的情况下构建并运行应用程序。使用无服务器计算,应用程序仍在服务器上运行,但所有服务器管理工作均由Serverless平台负责。如机器申请、代码发布、机器宕机、实例扩缩容、机房容灾等都由平台帮助自动完成,业务开发只需考虑业务逻辑的实现即可。
基础设施从物理机到虚拟机,再从虚拟机到容器;服务架构从传统单体应用架构到SOA架构,再从SOA架构到微服务架构。
都是从大往小或者由巨到微的方向上演进,这种演变的本质原则无非是解决资源成本或者研发效率的问题。
实体
1.元器件购买一般在嘉立创等平台,若芯片稍贵可以到淘宝购买。
2.焊接工具:焊膏、镊子、拆焊台、电烙铁、焊锡膏、焊锡、洗板水。
标签:AD,原理图,C++,单片机,开发,PCB,RCC,外设,时钟 From: https://blog.csdn.net/2401_82965090/article/details/145592360