KEIL集成开发环境安装过程必须安装MCU库,路径不能含中文
可利用DAP仿真器和串口ISP一键下载程序,配置BOOT0和BOOT1引脚可选择启动方式
三种启动方式:内部FLASH启动,系统存储器启动,内部SRAM启动
STM32F103ZET6:STM32表示32bit的MCU,F表示基础型,Z表示有144个引脚,E表示内部FLASH为512KB,T表示QFP封装,6表示工作温度
STM32F103RCT6:STM32表示32bit的MCU,F表示基础型,R表示有64个引脚,C表示内部FLASH为256KB,T表示QFP封装,6表示工作温度
文件系统类型举例:FAT32,NTFS,ext2,ext3,RAMFS,NFS,SMBFS...
STM32左下角小圆点表示1脚,然后按逆时针的顺序排列
STM32芯片由内核(CPU)和片上外设(GPIO,USART,I2C,SPI,DMA等)组成,采用Cortex-M3内核,由ARM公司设计,ARM公司不生产芯片,仅仅出售技术授权,片上外设由芯片生产商例如ST,飞思卡尔等负责,并生产整个芯片
内核和片上外设通过各种总线连接,其中驱动单元4个(内核部分),被动单元4个(片上外设部分)
4个驱动单元:ICode总线,Dcode总线,系统总线,DMA总线
1)ICode总线从内部FLASH取指令
2)系统总线主要用来访问寄存器,适用于寄存器编程
3)Dcode总线用来取数据,数据分为常量(位于内部FLASH)和变量(位于内部SRAM)
4)DMA总线也是用来取数据,利用总线矩阵来仲裁
4个被动部分:内部FLASH,内部SRAM,FSMC,AHB到APB的桥
1)内部FLASH用于存放程序和常量
2)内部SRAM用于存放变量
3)FSMC为灵活的静态存储控制器,用于扩展静态内存(注意不能是动态内存SDRAM)
4)AHB到APB的桥上挂载片上外设
STM32有4G地址空间,内部FLASH、内部SRAM、FSMC、AHB到APB的桥都分布于此,给存储器分配地址的过程叫存储器映射
4G地址空间分8块(Block0~Block7),每块512MB,Block0设计成内部FLASH,Block1设计成内部SRAM,Bolck2设计成片上外设,给已经分配好地址的并且有特定功能的内存单元区别名的过程叫寄存器映射,利用结构体封装寄存器
GPIO是通用输入输出,也就是STM32可控制的引脚,通过GPIO引脚可以让STM32与外部设备连接起来,实现通讯、控制以及数据采集的功能
GPIO基本构成:保护电路,输出电路和输入电路
STM32可以利用GPIO位带别名区的方式来访问原始寄存器bit位的效果
推挽输出:PMOS管和NMOS管交替导通,PMOS导通对外输出3.3V高电平(灌电流),NMOS导通对外输出0V低电平(拉电流),可极大提高开关速度和带负载能力
开漏输出:PMOS管截止,只有NMOS管导通,NMOS管导通对外输出低电平,NMOS管截止对外为高阻态,此时可外接上拉电阻对外输出高电平,具有“线与”特性,即所有引脚同为高阻态时才可对外显示高阻态
外设总线:AHB,APB1,APB2 //AHB和APB2时钟频率为72MHz,APB1为36MHz
GPIO引脚工作模式:上拉/下拉/浮空/模拟输入,推挽/开漏输出,复用推挽/开漏输出
上拉/下拉输入的电平由上拉或者下拉开关决定
浮空输入电平不确定,由外接输入决定,例如按键
模拟输入施密特触发器关闭,输入为模拟信号,用于ADC采集
复用推挽/开漏输出信号源来源于其他外设
输入模式下输出被禁止,输出模式下可打开输入模式以获取IO实际工作状态
STM32启动文件主要流程:
1、初始化堆栈指针SP
2、初始化PC寄存器
3、初始化中断向量表
4、配置系统时钟(HSE/HSI)
5、调用C库函数_main函数初始化用户堆栈,从而调用main函数进入C语言世界
NVIC嵌套中断向量控制器,控制着STM32中断相关的功能,它是一个片上外设
三个常用寄存器:中断使能寄存器,中断清除寄存器,中断优先级寄存器
中断优先级寄存器用来配置外部中断的优先级,宽度为8bit位,在STM32只使用高4位,根据 主优先级 和 子优先级 所占 bit 位不同可将 优先级 分为5组,以主优先级所占bit位分组(0,1,2,3,4组)
中断编程3要素:
1、使能外设某个中断,如串口发送完成中断,接收完成中断
2、给NVIC_InitTypeDef结构体赋值,配置中断源、主优先级、子优先级、使能中断
3、编写中断服务子函数
GPIO初始化过程:
1、定义一个GPOI_InitTypeDef结构体,用于配置GPIO
2、使能GPIO端口时钟
3、给GPIO结构体赋值,选择哪一个GPIO引脚,设置引脚速率(2、10、50MHz),设置引脚工作模式
4、调用库函数 GPOI_Init() 初始化GPIO
串口通信是一种设备间常用的串行通信方式
物理层:使用RS232标准(逻辑0表示+3V~+15V,逻辑1表示-15V~-3V),COM口多为DB9接口
但电子电路中常用TTL标准为 逻辑0表示0~0.7V,逻辑1表示2.4V~5V,两者间通常使用电平转换芯片
一般只使用RXD、TXD及GND三条信号线
协议层:规定数据包内容,包括起始位、数据帧,校验位和停止位
波特率通常为4800,9600,115200,表示每秒传送 码元 符号的个数,是衡量数据传输速率的指标,单位为(B)
说明:常见的通讯传输中,用 0V 表示数字 0, 5V 表示数字 1,那么一个码元可以表示两种状态 0 和 1,所以一个码元等于一个二进制比特位,此时波特率的大小与比特率一致。如果在通讯传输中,有 0V、2V、 4V 以及 6V 分别表示二进制数 00、 01、 10、 11,那么每个码元可以表示四种状态,即两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的一半。因为很多常见的通讯( 比如串口通讯 )中一个码元都是表示两种状态,所以大家常常直接以波特率来表示比特率 。
UART数据传输协议
空闲状态为高电平
发送时首先是一个起始位(一个周期的低电平)
发送数据时从LSB开始发送
每帧中数据位的个数5~8bit (变化)
发送可能存在的1bit奇偶校验位 (变化) 奇校验指1的个数为奇数,偶校验指1的个数为偶数
发送1~2bit的停止位(高电平)(变化)
波特率: 4800,9600,115200(变化)
通用同步异步收发器 (USART) 是一个串行通信设备,全双工,需要时钟线
UART为异步通信,全双工,不需要时钟线
USART初始化过程:
1、定义GPOI_InitTypeDef结构体,用于配置GPIO;定义USART_InitTypeDef结构体,用于配置USART
2、使能GPIO时钟及USART串口外设时钟
3、将USART_TX配置为复用推挽输出并初始化;将USART_RX配置为浮空输入并初始化;
4、给USART_InitTypeDef结构体赋值,配置波特率、数据字长、停止位、校验位、硬件流控制、收发模式(收发一起)
5、调用库函数 SUART_Init() 初始化串口
6、NVIC嵌套中断向量控制器配置
7、使能串口 接收 中断
8、调用cmd函数使能串口
NVIC嵌套中断向量控制器配置过程:
1、定义 NVIC_InitTypeDef结构体
2、中断控制器组选择
3、给NVIC_InitTypeDef结构体赋值,配置中断源为USART、抢占优先级设为1、子优先级设为1、使能中断
4、调用库函数 NVIC_Init() 初始化NVIC
使用 fputc 重定向C库函数printf到串口可使用 printf 函数
使用 fgetc 重定向C库函数scanf到串口可使用 scanf 函数
I2C协议是菲利普公司设计出来的一种简单、双向、二线制、同步串行通信协议,半双工
物理层:有两根线,SCL时钟线和SDA数据线,支持多主机和多从机通讯,每个设备都拥有独立的地址,总线通过上拉电阻接到电源,所有设备都空闲时输出高阻态,多主机通讯时会产生仲裁,通讯过程由主机控制
传输模式有三种,标准模式(100Kbit/s)、快速模式(400Kbit/s)、高速模式(3.4Mbit/s)
协议层:定义了数据的起始信号、结束信号、数据有效性、响应、仲裁、时钟同步、地址广播等
起始信号:在SCL为高电平期间,SDA上出现下降沿
结束信号:在SCL为高电平期间,SDA上出现上升沿
数据有效性:在SCL为高电平期间,SDA数据有效,在SCL为低电平期间,SDA数据无效,此时可进行电平切换,每次数据传输以字节为单位,MSB先行
地址及读写方向:地址一般为7位或10位,紧跟地址后一位表示读或写,0表示写、为1表示读
响应:包括应答信号(ACK)和非应答信号(NACK),一次传输8个数据位后,在第9个时钟周期,由数据接收端控制SDA线,SDA为0表示应答信号,SDA为1表示非应答信号
地址广播:不是主机给从机发送地址,而是主机给总线发地址,挂载在I2C上的从机都能收到地址,如果发过来的地址和自己的地址匹配上了,从机就会给主机一个应答,这样就建立起来了一个通讯
I2C写时序:发start,发从机地址+写方向,收ACK,发数据,收ACK...发数据,收ACK,发stop
I2C读时序:发start,发从机地址+写方向,收ACK,发寄存器地址,收ACK,重发start,发从机地址+读方向,收ACK,收数据,发ACK...收数据,发NACK,发stop
初始化I2C过程:
1、定义一个 I2C_InitTypeDef 结构体,用于配置I2C;定义 GPOI_InitTypeDef 结构体,用于配置GPIO
2、使能GPIO时钟及I2C外设时钟
3、将 SCL,SDA 引脚 GPIO 配置成开漏输出并初始化
4、给 I2C_InitTypeDef 结构体赋值,设置成I2C模式,占空比,使能应答,自身地址,寻址模式(7bit位),通信速率(400000)
5、使用库函数 I2C_Init 初始化I2C
6、I2C中断控制器配置
7、使能 I2C 接收中断
8、调用cmd函数使能I2C
SPI协议是由摩托罗拉公司设计的通讯协议,即串行外围设备接口,高速,全双工,大多使用在DAC、LCD等设备与MCU之间,要求通信速率较高的场合,时钟频率最高f/2(36MHz),具体看他挂载在APB1还是APB2总线上
物理层:通讯时有四根线,分别为SS/CS片选信号线,时钟线SCK,MISO(从机到主机),MOSI(主机到从机),每个从设备都有独立的CS线
协议层:协议层规定了通讯的起始和终止信号、数据有效性、时钟同步等环节
起始和终止信号:CS由高变低为起始信号、CS由低变高为终止信号
数据有效性:MISO和MOSI在SCK每个时钟周期传输1位数据,上升沿或者下降沿有效,且输入输出同时进行,MSB先行或LSB先行可自行设置,SPI每次数据传输可以8位或16位为单位,根据时钟极性(CPOL)和时钟相位(CPHA)可分为4种模式,CPOL决定空闲时期的SCK时钟电平,CPHA决定采样时奇数边沿还是偶数边沿采样