stm32介绍
NVIC是配置管理中断,如配置中断优先级
SYsTick主要给操作系统提供定时服务的,可以加入操作系统如F
RCC中系统不会设定时钟,需要自己使能时钟,外设才能工作,目的是降低功耗
AFIO是复用端口,可以完成端口的重定义,和中断端口的配置
EXTI外部中断,当引脚有电平变化时,可以触发中断,让cpu来处理任务
TIM是定时器,通用、基本、高级定时器
ADC模数转换器,可以直接读取IO口的模拟电压值,无需外部连接AD芯片
DMA可以帮助cpu完成大量繁杂等任务
USART是同步或者异步串口
RTC实时时钟可以完成stm32时分秒等操作,可以接外部备用电池,掉电也能正常运行
CRC是一种数据校验的方式,用于判断数据的正确性
PWR电源控制,可以让芯片进入睡眠模式,达到省电的目的
BKP备份寄存器,当系统掉电时仍可由备用电池保持数据
FSMC可用于扩展内存或者配置成其他总线协议
引脚定义:
小黑点是1号引脚,然后逆时针依次排列
标蓝色是最小系统相关的引脚,标绿色是io口
类型:s代表电源,i代表输入,o代表输出,io代表输入输出,有FT 的代表容忍5v电压,无FT的能容忍3.3v电压,如果没有FT的需要接5V电平,就需要加装电平转换电路
启动配置:在ppt里
- 打开stm32的参考手册,RCC寄存器使能GPIOC的时钟,GPIO是APB2的外设,在那个引脚图片就有的
- IOPCE:IO端口C时钟使能(因为灯接在PC13)
- library用来存放库函数
- stm32f103x_conf.h这个conf文件是用来配置库函数头文件的包含关系的,还有参数检查和参数定义的和两个it结尾的(it.c
it.h) - RCC_APB2PeriphClockCmd————APB2外设时钟控制
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//APB2外设时钟控制(第一个是选择外设,第二个选择新的状态)
配置端口模式:GPIO_Init(第一个是选择哪个GPIO,第二个是参数的结构体) GPIOx可以是(A,G)
GPIO_InitTypeDef GPIO_InitStructure;其中GPIO_InitTypeDef是结构体,GPIO_InitStructure官方给的结构体起的名字
Mode模式,pin端口,speed速度
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//Out_pp通用推免输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
注释里面的代码没办法跳转了:选中这个字符—按ctrl+f搜索定义的位置
GPIO_SetBits(GPIOC, GPIO_Pin_13);//把指定端口设置为高电平
GPIO_ResetBits(GPIOC, GPIO_Pin_13);//把指定端口设置为低电平
型号
工程架构
启动文件startup,是程序最基本的文件,用汇编写的。
当stm32上电复位后,程序就会进行复位中断,复位中断做了2个事,第一个调用Systemlnit函数,第二个main函数。也会有其他的中断
Systeammlnit函数就是定义在system_xx.c/.h里
GPIO
-
数据0是低电平0v,数据1就是高电平3.3v 部分引脚容忍5v,对于输出来说最大就能输出3.3v,因为供电只有3.3v
-
哪些端口能容忍5v,stm32引脚定义:带FT能容忍5v,不带FT的只能接入3.3v GPIO输出模式可以模拟通信协议,I2C,SPI等
-
每个GPIO外设有16个引脚,编号是从0到15,在每个GPIO内包含着寄存器和驱动器,寄存器是一段特殊的寄存器,内核可以通过APB2总线对寄存器进行读写的,可以完成输出电平和读取电平的功能,寄存器每一位对应一个引脚,其输出寄存器写1,输出高电平,0就是低电平。
-
STM32是32位的单片机,内部的寄存器都是32位的,但这个端口只有16位,so寄存器只有低16位有对应的端口,高16位没有。
-
驱动器用来增加信号的驱动能力
GPIO位结构
- 保护二极管作用:对输入电压限制
- 上拉电阻VDD和下拉电阻VSS:如果上面VDD导通,下面VSS断开就输上拉输入模式,反之亦然,如果两个都断开就是浮空输入模式。上拉输入模式默认为高电平的输入模式,下拉输入默认为低电平的输入模式。
- TTL施密特触发器作用:对输入电压进行整行。执行逻辑是:如果输入电压大于某阈值,输出为高电平,如果输入电压低于某阈值,输出为低电平。(对于触发器来说高于上限或低于下限,输出才会变化)
- 模拟输入:ADC
- 复用功能输入:其他需要读取端口的外设(串口输入引脚)
- 输出控制部分:是由输出数据寄存器和片上外设控制的
- 位设置/清除寄存器:可以用来单独操作输出数据寄存器的某一位,而不影响其他位
- 它这个输出寄存器同时控制16个端口,并且这个寄存器只能整体读写,要想单独控制其中某一个端口而不被其他端口影响的话,特殊的操作方式:第一种方式是先读出寄存器,用按位与和按位或的方式更改某一位,最后将更改后的数据写回去,在C中就是(&=)和(|=)操作。缺点:麻烦,效率不高
第二种方式是通过操作位设置和清除寄存器,对某一位进行置1的操作,在位设置寄存器的对应写1即可,剩下的位写0保持不变。 - 如果想对某一位清0的操作,就在清除寄存器的对应写1即可。
- 第三种操作方式:读写STM32中的“”位带“”区域,与51的位寻址查不多。在STM32中有专门分配的一段地址区域,这段映射了RAM和外设寄存器所有的位,读写这段地址中的数据,相当于读写所映射位置的某一位,这就是位带操作的方式。
- 两个MOS管:上面是P-MOS,下面是N-MOS管,这个相当于电子开关,信号来控制开关的导通和关闭,开关负责将IO口接到VDD或VSS。可以选择推免、开漏、关闭三种输出方式。
- 推挽输出: 在该结构中输入高电平时,上方的P-MOS导通,下方的N-MOS截止,对外输出高电平 。
而在该结构中输入低电平时,N-MOS管导通,P-MOS截止,对外输出低电平。
当引脚高低电平切换时,两个管子轮流导通,P管负责灌电流,N管负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。推挽输出的低电平为0伏,高电平为3.3伏。 - 开漏输出:
在开漏输出模式时,上方的P-MOS管始终处于截止状态。当输入低电平时,P-MOS管截止,N-MOS管导通,对外输出低电平。P-MOS是无效的,只有N-MOS在工作。
若控制输入为高电平,则P-MOS管关闭,N-MOS管处于截止状态,所以引脚既不输出高电平,也不输出低电平,为高阻态。如需要输出高电平(5V),必须在外部接一个上拉电阻。 - 它具有“线与”特性。也就是说,若有很多个开漏模式引脚连接到一起时,只有当所有引脚都输出高阻态,才由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接的电源的电压。若其中一个引脚为低电平,那线路就相当于短路接地,使得整条线路都为低电平,0伏。
- 关闭状态:当引脚为输入模式的时候,N-MOS和P-MOS管都无效,也就是输出关闭,端口的电平由外部信号来控制。
GPIO模式
注:在使用浮空输入时端口一定要接上一个连续的驱动电源,不能出现悬空的状态。
浮空/上拉/下拉输入
模拟输入
注:输出断开,输入的施密特触发器也是关闭状态
开漏/推挽输出
注:输出是由输出寄存器控制的,P-MOS无效就是开漏输出,如P-MOS何N-MOS都有效就是推挽输出。
- 在输出模式下,输入模式也是有效的:因为一个端口只能有一个输出,但可以有多个输入。
复用开漏/推挽输出
片上外设:iic,TIM定时器,EXTI中断等
GPIO寄存器:
端口配置低寄存器(GPIOx_CRL) (x=A…E)
端口配置高寄存器(GPIOx_CRH) (x=A…E)
端口输入数据寄存器(GPIOx_IDR) (x=A…E)
端口输出数据寄存器(GPIOx_ODR) (x=A…E)
端口位设置/清除寄存器(GPIOx_BSRR) (x=A…E)
端口位清除寄存器(GPIOx_BRR) (x=A…E)
端口配置锁定寄存器(GPIOx_LCKR) (x=A…E)
STM32外部设备和电路
LED:发光二极管,正向通电点亮,反向通电不亮
有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定。
无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音