stm32学习笔记

1KB(千字节)=1024B(字节)html

1B(字节)= 8 Bit(比特/位)python

两个字节一个汉字,字母和数字占一个字节编程

1、ARM概述及发展史数组

ARM是一家芯片设计公司,自己不生产,提供IP CORE
常见CPU生产厂家:ST、ATMEL、 SUMSUNG、 NXP缓存

ARM体系架构
ARM7:no MMU 66Mhz,32位CPU,表明型号:S3C4480
ARM9: MMU,400Mhz,32位CPU,S3C2440
ARM11: MMU,500Mhz,32位CPU,S3C6410服务器

Cortex体系架构
Cortex-A:(A8单核1Ghz/s5pv210,A9四核1.4Ghz/s5p4418/exynos4412,A53八核1.4Ghz/s5p6818)主要应用于高端消费电子设备、网络设备、移动互联网设备
Cortex-M:微控制器,主要应用于工业控制,汽车电子,医疗电子。具备快速中断处理,低功耗,性价比高的特色。
--->Cortex-M0(主频:48Mhz,32位CPU,STM32F051)
--->Cortex-M3 (主频:72Mhz,32位CPU,STM32F103)
--->Cortex-M4 (主频:168Mhz,32位CPU,STM32F407)
--->Cortex-M7 (主频:216Mhz,32位CPU,STM32F767)
Cortex-R:实时处理器,主要应用于对实时性要求比较高的场合微信

2、STM32项目开发方式(前提条件:电路原理图、芯片手册):
1)基于寄存器来开发项目
2)基于库函数来开发网络

3、寄存器:寄存器不依靠地址区分数据,而依靠名称。每个寄存器都有本身的名称,咱们告诉 CPU 去具体的哪个寄存器拿数据,这样的速度是最快的。有人比喻寄存器是 CPU 的零级缓存。如下是CPU调用存储设备的顺序:数据结构

8086寄存器架构

cortex-M0寄存器

 

R0-R12:通用目的寄存器
R13(MSP主栈指针,PSP进程栈指针): 堆栈指针寄存器(SP,Stack Pointer),操做系统两个指针才有用
R14连接寄存器(LR):专门用来存储子程序和中断时的返回地址
R15程序寄存器(PC):

内存空间中每个地址空间能够存放8bit的信息

Cortex‐M3 拥有两个堆栈指针,然而它们是 banked,所以任一时刻只能使用其中的一个。
主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操做系统内核以及异常处理例程(包括中断服务例程)
进程堆栈指针(PSP):由用户的应用程序代码使用。

堆栈概念:单片机应用中,堆栈是个特殊存储区,堆栈属于RAM空间的一部分,堆栈用于函数调用、中断切换时保存和恢复现场数据。


参考网址:http://blog.sina.com.cn/s/blog_13e68b0390102xgqo.html

疑问:这个堆栈究竟是哪一部分的存储空间?

 

3、中断/异常:中断服务程序存放在哪里? 记录在中断向量表,存放在地址空间开始的一块连续的地方。

 

4、嵌入式C编程要点:

一、static:建立全局变量、局部变量、函数。一直留内存,直到程序结束。

二、const int a=5; const定义的是只读的常量。且必须初始化,放在内容的一个符号表里,不是放在存储空间里。

三、Volatile int a;  编译器对访问该变量的代码就再也不进行优化。

四、extern int a;置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。

五、typedef int u32;  给已有的类型起一个别名。

六、define pi 3.14是宏定义,发生在预处理阶段,也就是编译以前,它只进行简单而机械的字符串替换,而不进行任何检查。

七、条件编译
#ifndef
#define
#endif

八、按位或|、按位与~操做

 

5、接口标准CMSIS:ARM Cortex™ 微控制器软件接口标准(CMSIS:Cortex Microcontroller SoftwareInterface Standard) 。 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层,使用CMSIS,能够为处理器和外设实现一致且简单的软件接口,从而简化软件的重用、缩短微控制器新开发人员的学习过程,并缩短新设备的上市时间。经过在全部Cortex-M芯片供应商产品中标准化软件接口,这一成本会明显下降,尤为是在建立新项目或将现有软件迁移到新设备时。

 

6、固件库:STM32标准外设库以前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器全部外设的性能特征。该函数库还包括每个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,经过使用固件函数库,无需深刻掌握底层硬件细节,开发者就能够轻松应用每个外设。所以,使用固态函数库能够大大减小用户的程序编写时间,进而下降开发成本。每一个外设驱动都由一组函数组成,这组函数覆盖了该外设全部功能。每一个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。

 

7、Arduino与stm32区别:Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各类型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti等。

Atmel(爱特梅尔):美国、产品类别:16位、32位、应用范围:汽车电子、工业用、电机控制、汽车、楼宇自动化、家用电器、家庭娱乐、工业自动化、照明、物联网、智能能源、移动电子设备、计算机外设。

https://www.w3cschool.cn/arduino/?

ST(意法半导体):意大利/法国、产品类别:32位、应用范围:CommunicaTIons and Networking、LED和普通照明、交通运输、医疗保健、多媒体融合、家电和电动工具、楼宇自动化技术电机控制、电源和功率转换器、能源和智能电网、自动化、计算机与通讯基础设施

对于Arduino不少人存在一个误解,若是你问他设计用的什么单片机,他也许会说Arduino单片机,这种说法说的真是太不专业了,或许玩Arduino的同窗都只是玩玩吧,真正的Arduino是一个采用AVR单片机为核心的硬件与软件相结合的开源平台,这个开源平台包括Arduino的原理图、PCB和bom表,还有Arduino库函数的开源。真正使Arduino大火的缘由是并非他所采用的AVR单片机,也不是他的硬件,主要缘由是库函数与底层硬件整合的完美无缺,下降了非专业人士玩电子的难度。导致不少不是学电子的同窗能够在Arduino上设计出PCB绘画机、WiFi小车等一系列的高级应用。

https://baijiahao.baidu.com/s?id=1593422328455300958&wfr=spider&for=pc

 

8、基于Cortex-M3 和IPv6的物联网技术开发与应用

https://item.taobao.com/item.htm?spm=a230r.1.14.20.2b771d6eP7Q8Zq&id=564434709873&ns=1&abbucket=10#detail

https://baike.baidu.com/item/%E5%9F%BA%E4%BA%8ECortex-M3%20%E5%92%8CIPv6%E7%9A%84%E7%89%A9%E8%81%94%E7%BD%91%E6%8A%80%E6%9C%AF%E5%BC%80%E5%8F%91%E4%B8%8E%E5%BA%94%E7%94%A8/22330893?fr=aladdin

热卖M2物联网无线遥控开关语音控制二次开发DIY智能家居 疯狂物联:

https://item.taobao.com/item.htm?spm=a230r.1.14.27.2b771d6eP7Q8Zq&id=567014390091&ns=1&abbucket=10#detail

淘宝搜索“疯狂物联、Arduino”

9、时钟

一、STM32 F103 时钟树详解:http://www.javashuo.com/article/p-mhzyzkti-hh.html

二、时钟是同步单片机系统各个部件工做时序的最小时间单位,时钟经过 CPU 控制,产生其余与时钟保持必定关系的同步控制信号,协调各部件的工做时序,没有时钟系统就崩溃了。
如 CPU 与存储器(RAM)传输数据,地址(A0 ~ Ax)、数据 (D0 ~ Dx)、读/写 (R/W) 等信号就必须按照必定的时序出如今各自的总线上,不然就乱套了。

单片机的时钟就是单片机工做所须要的节拍,实际上就是时钟源产生的方波信号,单片机的取指令,译指令等工做过程都要以时钟的一个周期为最小周期。

方波信号:就是指电路系统中信号的质量,若是在要求的时间内,信号能不失真地从源端传送到接收端,咱们就称该信号是方波信号。

三、上升沿与降低沿:

数字电路中,把电压的高低用逻辑电平来表示。逻辑电平包括高电平和低电平这两种。不一样的元器件造成的数字电路,电压对应的逻辑电平也不一样。在TTL门电路中,把大于3.5伏的电压规定为逻辑高电平,用数字1表示;把电压小于0.3伏的电压规定为逻辑低电平,用数字0表示。数字电平从低电平(数字“0”)变为高电平(数字“1”)的那一瞬间(时刻)叫做上升沿。

数字电路中,把电压的高低用逻辑电平来表示。逻辑电平包括高电平和低电平这两种。不一样的元器件造成的数字电路,电压对应的逻辑电平也不一样。在TTL门电路中,把大于3.5伏的电压规定为逻辑高电平,用数字1表示;把电压小于0.3伏的电压规定为逻辑低电平,用数字0表示。数字电路中,数字电平从高电平(数字“1”)变为低电平(数字“0”)的那一瞬间叫做降低沿。

上升沿等因而接通的瞬间给个瞬发信号,至关与通电信号。

降低沿等因而断开的瞬间给个瞬发信号,至关与断电信号。

四、什么是时钟呢 时钟信号的关键指标:http://www.elecfans.com/d/827743.html

五、时钟发生器:时钟发生器是用来产生时钟信号的器件。经常使用于数字产品中,产品中全部的组件将随着所产生的时钟信号来同步进行运算动做。数字产品必须有时钟的控制,才能精确处理数字信号。若时钟不稳定,轻则形成数字信号传送上的失误,重则致使数字设备没法正常运做。https://baike.baidu.com/item/%E6%97%B6%E9%92%9F%E5%8F%91%E7%94%9F%E5%99%A8/9827742

https://blog.csdn.net/qq_42384937/article/details/83512162

七、时序逻辑电路:http://m.elecfans.com/article/626631.html

十:定时器:http://www.sohu.com/a/127978571_464086

十一:NVIC:提供中断控制器,用于整体管理异常,称之为“内嵌向量中断控制器:Nested Vectored Interrupt Controller (NVIC)”。NVIC和处理器内核紧密相连.

十二:上位机与下位机:上位机是指能够直接发出操控命令的计算机,通常是PC/host computer/master computer/upper computer,屏幕上显示各类信号变化(液压,水位,温度等)。下位机是直接控制设备获取设备情况的计算机,通常是PLC/单片机single chip microcomputer/slave computer/lower computer之类的。上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据(通常为模拟量),转换成数字信号反馈给上位机。简言之如此,实际状况千差万别,但万变不离其宗:上下位机都须要编程,都有专门的开发系统。
在概念上,控制者和提供服务者是上位机,被控制者和被服务者是下位机,也能够理解为主机和从机的关系,但上位机和下位机是能够转换的。https://baike.baidu.com/item/%E4%B8%8A%E4%BD%8D%E6%9C%BA/9868149?fr=aladdin

十三:项目

一、微信,手机APP远程控制STM32(如可调速电风扇,电磁锁,LED灯,蜂鸣器,温湿度获取)https://www.cirmall.com/circuit/3401#/details

二、STM32四轴飞行器开发-通用I2C驱动库:https://www.cirmall.com/circuit/7025#/details

三、基于STM32小区用智能储物柜控制方案:https://www.docin.com/p-1624957529.html

四、TPYBoard V102基于STM32F405单片机,经过USB接口进行数据传输。内置4个LED灯、一个加速度传感器,可在3V-10V之间的电压正常工做。

MicroPython [1]  是 Python 3 语言的精简实现 ,包括Python标准库的一小部分,通过优化可在微控制器和受限环境中运行。
pyboard是官方提供的运行MicroPython的电子电路板,它能够运行MicroPython。

https://my.oschina.net/micropython/blog/1840577

https://item.taobao.com/item.htm?spm=a230r.1.14.228.145e4efbRrUNkQ&id=568583597995&ns=1&abbucket=10#detail

五、ZYduino智能循迹:https://item.taobao.com/item.htm?id=532719576264&ali_refid=a3_420434_1006:1110682510:N:%2Bj1g8qvcwRg2BD45j63tz3NebGjmeNzB:8096aae3e26605259b65657ff868fdc0&ali_trackid=1_8096aae3e26605259b65657ff868fdc0&spm=a230r.1.1957635.23

六、MQTT服务器:https://baijiahao.baidu.com/s?id=1610057452592802735&wfr=spider&for=pc

https://item.taobao.com/item.htm?spm=a230r.1.14.232.145e4efbRrUNkQ&id=561852194350&ns=1&abbucket=10#detail