STM32属于一个微控制器,自带了各种常用通信接口
1、串口—USART,用于跟跟串口接口的设备通信,比如:USB转串口模块、ESP8266
WIFI、GPS模块,GSM 模块,串口屏、指纹识别模块
STM32属于一个微控制器,自带了各种常用通信接口,功能非常强大
2、内部集成电路—I2C,用于跟I2C接口的设备通信,比如:EEPROM、电容屏、陀螺
仪MPU6050、0.96寸OLED模块
3、串行通信接口—SPI,用于跟SPI接口的设备通信,比如:串行FLASH、以太网
W5500、音频模块VS1053
4、SDIO、FSMC的超级、I2S、ADC、GPIO
仿真的概念:
仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。
在嵌入式系统的设计中,仿真应用的范围主要集中在对程序的仿真上。
例如,在单片机的开发过程中,程序的设计是最为重要的但也是难度最大的一种最简单和原始的开发流程是:
编写程序烧写芯片验证功能,
这种方法对于简单的小系统是可以对付的,但在大系统中使用这种方法则是完全不可能的。
仿真器的概念:
仿真器(emulator)以某一系统复现另一系统的功能。
与计算机模拟系统(Computer Simulation)的区别在于,
仿真器致力于模仿系统的外在表现、行为,而不是模拟系统的抽象模型。
仿真器可以替代你的目标系统中的MCU,仿真其运行。
仿真器运行起来和实际的目标处理器一样,但是增加了其它功能,
使你能够通过桌面计算机或其它调试界面来观察MCU中的程序和数据,并控制MCU的运行。
仿真器:
TMS 接数据引脚 //
GDN 接地 //支持SW模式 、JTAG
TCK 接时钟引脚 //
RST 接复位引脚:接上可以通过软件设置复位
最后目标版共地
仿真器的作用
:
单片机仿真器是一种在电子产品开发阶段代替单片机芯片进行软硬件调试的开发工具。
配合集成开发环境使用仿真器可以对单片机程序进行单步跟踪调试,
也可以使用断点、全速等调试手段,并可观察各种变量、RAM及寄存器的实时数据,跟踪程序的执行情况。
同时还可以对硬件电路进行实时的调试。
利用单片机仿真器可以迅速找到并排除程序中的逻辑错误,大大缩短单片机开发的周期。
在现场只利用烧录器反复烧写单片机,通过肉眼观察结果进行开发的方法大大增加了调试的难度,延长了整个开发周期,
并且不容易发现程序中许多隐含的错误,特别对于单片机开发经验不丰富的初学者来说更加困难,
【CCD】:
感光元件(CCD 摄像头
【PWM】:
脉冲宽度调制(Pulse Width Modulation,缩写为PWM),简称脉宽调制,
是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,
广泛应用在从测量、通信到功率控制与变换的许多领域中。
脉冲宽度调制的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。
GPIO:
GPI0是通用输入输出端口的简称,从名字上也可看出GPIO最基本的功能就输入和输出。
它也是芯片内部与外部电路连接的唯一的接口,换句话说只要我们使用片上外设几乎都会与GPIO打交道。
GPI0基本功能是输入和输出,但是STM32本身就是一个很复杂的系统,内部外设繁多,
那么GPIO的基本功能是肯定满足不了这么多外设的需求,芯片厂商为了解决此问题,将GPI0分为八种模式(输入4种+输出4种)。
八种模式分别为:
输入浮空 GPIO_Mode_IN_FLOATING
输入上拉 GPIO_Mode_IPU
输入下拉 GPIO_Mode_IPD
模拟输入 GPIO_Mode_AIN
具有上拉或下拉功能的开漏输出 GPIO_Mode_Out_OD
具有上拉或下拉功能的推挽输出 GPIO_Mode_Out_PP
具有上拉或下拉功能的复用功能推挽 GPIO_Mode_AF_PP
具有上拉或下拉功能的复用功能开漏 GPIO_Mode_AF_OD
由于STM32的GPIO工作模式有8种,所以在GPIO输出之前要先对要操作的GPIO进行配置: 定义GPIO的初始化结构体类型
使能GPIO的时钟
配置GPIO的引脚
配置GPIO口的输出类型为推挽
配置GPIO口的输出速度
初始化GPIO(初始化相应的寄存器)
eg、
GPIO_InitTypeDef GPIO_InitStructure; // 定义结构体变量
//打开PB口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//打开PE口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
//PB5,PE5引脚设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
//设置输出速率50MHz
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//推挽输出模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//初始化外设GPIOx寄存器
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_Init(GPIOE, &GPIO_InitStructure);
定义 特殊功能寄存器的位 变量。
bit和sbit都是 C51扩展的 变量类型。
典型应用是:sbit P0_0=P0^0;//即定义P0_0为P0口的第1位,以便进行 位操作
**头文件
#ifdef···
#define···
……
……
#endif
防止一个变量或一个函数被重复定义**
芯片(这里指内核,或者叫 CPU)和外设之间通过各种总线连接,其中驱动单元有 4
个,被动单元也有 4 个。为了方便理解,我们都可以把驱动单元理解成是
CPU 部分,被动单元都理解成外设。下面我们简单介绍下驱动单元和被动单元的各个部件
(如下图)
1. ICode总线
ICode 中的 I 表示 Instruction,即指令。我们写好的程序编译之后都是一条条指令,存
放在 FLASH中,内核要读取这些指令来执行程序就必须通过 ICode 总线,它几乎每时每刻
都需要被使用,它是专门用来取指的。
2. 驱动单元
DCode 总线
DCode 中的 D 表示 Data,即数据,那说明这条总线是用来取数的。我们在写程序的时
候,数据有常量和变量两种,常量就是固定不变的,用 C 语言中的 const 关键字修饰,是
放到内部的 FLASH 当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的
SRAM。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数
的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
系统总线
系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通
过这根系统总线来完成的。
DMA 总线
DMA 总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在
SRAM,可以在内部的 FLASH。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了
避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
3. 被动单元
内部的闪存存储器
内部的闪存存储器即 FLASH,我们编写好的程序就放在这个地方。内核通过 ICode 总
线来取里面的指令。
内部的SRAM
内部的 SRAM,即我们通常说的 RAM,程序的变量,堆栈等的开销都是基于内部的
SRAM。内核通过 DCode 总线来访问它。
FSMC
FSMC的英文全称是 Flexible static memory controller,叫灵活的静态的存储器控制器,
是 STM32F10xx 中一个很有特色的外设,通过 FSMC,我们可以扩展内存,如外部的
SRAM,NANDFLASH和 NORFLASH。但有一点我们要注意的是,FSMC只能扩展静态的
内存,即名称里面的 S:static,不能是动态的内存,比如 SDRAM 就不能扩展。
AHB 到 到 APB 的桥
从 AHB 总线延伸出来的两条 APB2 和 APB1 总线,上面挂载着 STM32 各种各样的特
色外设。我们经常说的 GPIO、串口、I2C、SPI 这些外设就挂载在这两条总线上,这个是
我们学习 STM32的重点,就是要学会编程这些外设去驱动外部的各种设备。
(如下图)
储器映射
被控单元的 FLASH,RAM,FSMC和 AHB到 APB的桥(即片上外设),
这些功能部件共同排列在一个 4GB 的地址空间内。我们在编程的时候,可以通过他们的地
址找到他们,然后来操作他们(通过 C语言对它们进行数据的读和写)。
存储器映射
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址
的过程就称为存储器映射,具体见图 6-5。如果给存储器再分配一个地址就叫存储器重映
射