STM32:32位微控制器
功能:
1、串口USART:接外设
2、内部集成电路I2C:用于与I2C接口设备通信
3、串行通讯接口SPI:用于与SPI接口设备通信
4、 SDIO( SDIO接口是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备。)、
FMC(通用模块)、
I2S(集成电路内置音频接口)、
SAI(音频接口)、
ADC(模数转换接口)、
GPIO(通用IO端口)
F1 基础型 72M
F4 高性能 180M
STM32F429IGT6
STM32家族 F产品类型 429具体特性 I引脚数目 (G)FLASH大小 T封装 6温度等级
原理图引脚分配:
电源、晶振IO、下载IO、BOOTIO、复位IO ,前5个构成最小系统,可另加GPIO
芯片点开始逆时针开始数引脚或者左上角开始逆时针数
存储器本身不具有地址信息,其地址是由芯片厂商或用户分配,为其分配地址的过程称为存储器映射。
给有特定功能的内存单元取一个别名,这个别名就是寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就是寄存器映射。
ODR输出数据寄存器
操作GPIO需要
开启MODER 00输入(复位状态) 01通用输出模式 10复用功能模式 11模拟模式
开启时钟
赋值操作,先清零
a &= ~(1<<xx) / a &= ~(xx<<(xx*xx))(一位清零xx为移位距离,从0开始 / 多位清零,3个xx分别为2的n位次幂-1、位数、n组位段,n从0开始)
后赋值
a |= (xx<<xx) / a |= (xx<<xx*xx)(多位赋值的xx分别为赋值数、n位、n组位段,从0开始)
//定义一个变量 a = 1001 1111 b (二进制数)
unsigned char a = 0x9f;
//对 bit2 清零
a &= ~(1<<2); 清零
对某几位赋值,先清零后设值。
1 //a = 1001 0011 b
2 //把 bit6 取反,其它位不变
3
4 a ^=(1<<6);
5 //a = 1101 0011 b
BOOT0、1设置 启动方式
0x 内部FLASH启动
10 系统存储器
11 内部SARM
默认接GND
SMT32
基本外设:GPIO输入输出、外部中断、定时器、串口
基本外设接口:SPI、IIC、WDG(看门狗)、FSMC、ADC/DAC、SDIO等
高级功能:UCOS(操作系统)、FATFS(文件系统)、EMWIN(图形界面)等,以及一些应用。
IDR
库函数
GPIO工作模式:
输入模式
输入浮空
输入上拉
输入下拉:上拉电阻关闭,打开下拉电阻。
模拟输入
输出模式
开漏输出
开漏复用功能:走复用功能输出方向。
推挽式输出
推挽复用功能:走复用功能输出方向。
GPIO初始化步骤:
具体参考STM32F1xx中文参考手册
- 确定工作模式及工作速度(配置CRL和CRH)。
- 具体要输出的内容(置位复位寄存器:BSRR和数据输出寄存器)。
RTC 30k
GPIO 72m
PLLCLK锁相环时钟 72m
HSI 8m
HSE 8m
SYSCLK 72m
5个时钟源:高速(H、PLL)、低速时钟源(L)/内部(I)、外部时钟源(E)
MCO时钟输出IO
位带操作
通用定义:#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr & 0xFFFFF)<<5)+(bitnum<<2))
SysTick 定时器也叫 SysTick 滴答定时器,它是 Cortex-M3 内核的一个外设。
时=是个 24 位向下递减的定时器,每计数一次所需时间为1/SYSTICK,SYSTICK 是系统定时器时钟。
它可以直接取自系统时钟【每计数一次所需时间为1/(72)us】,还可以通过系统时钟 8 分频后获取【每计数一次所需时间为1/(72/8)us】,即在 1us 的时间内会计数 72次或972/8次。
CTRL 控制及状态寄存器
LOAD 重装载数值寄存器
VAL 当前数值寄存器
CALIB 校准数值寄存器
SysTick 定时器的操作可以分为 4 步:
(1)设置 SysTick 定时器的时钟源。
(2)设置 SysTick 定时器的重装初始值(如果要使用中断的话,就将中断
使能打开)。
(3)清零 SysTick 定时器当前计数器的值。
(4)打开 SysTick 定时器。
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电
蜂鸣器主要分为压电式(无源)蜂鸣器和电磁式(有源)蜂鸣器两种类型
通常无源蜂鸣器输出1.5~5kHZ的音频信号时,才会发声
改变音调即修改管脚输出频率,改变声音大小即修改占空比
中断源
中断的嵌套
NVIC 嵌套中断向量控制器
STM32F10x芯片有84个中断通道,包括 16 个内核中断和 68 个可屏蔽中断
抢占式优先级和响应优先级,通常也把响应优先级称为“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。
中断优先级控制字节共8位,但stm32中仅高四位有效
外部中断
STM32F10x外部中断/事件控制器(EXTI)包含多达 20 个用于产生事件/中断请求的边沿检测器
定时器
STM32F1的定时器由2个基本定时器(TIM6、TIM7)、4个通用定时器(TIM2-TIM5 16位)和2个高级定时器(TIM1、TIM8)组成。通用定时器增加了输入捕获与输出比较等功能。高级定时器主要针对工业电机控制方面。
定时器定时时间计算公式:Tout= ((per)*(psc+1))/Tclk;
PWM
PWM是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,其信号仍然是数字的
STM32F1高级定时器可以同时产生多达 7 路的 PWM 输出,而通用定时器也能同时产生多达4路的PWM输出
PWM的输出其实就是对外输出脉宽可调(即占空比调节)的方波信号,信号频率是由自动重装寄存器 ARR 的值决定,占空比由比较寄存器 CCR 的值决定。
PWM输出比较模式共有8种,常用输出模式:PWM1和PWM2
边沿对齐模式和中心对齐模式。
配置
(1)使能定时器及端口时钟,并设置引脚复用器映射
(2)初始化定时器参数,包含自动重装值,分频系数,计数方式等
(3)初始化PWM输出参数,包含PWM模式、输出极性,使能等
(4)开启定时器
(5)修改TIMx_CCRx的值控制占空比
(6)使能TIMx在CCRx上的预装载寄存器
(7)使能 TIMx 在 ARR 上的预装载寄存器允许位
USART即通用同步异步收发器
通信速率,即比特率(Bitrate) 单位是:位/秒(bps)。
如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为:10位×240个/秒 = 2400 bps
串口通讯使用协议一般为96-N-8-1格式
通信波特率为9600,没有校验位, 通信数据长度为8位,停止位
Tx ( Rx) 波特率 =fCK / [16*( USARTDIV )]
这里的fCK是给外设的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1)
USARTDIV是一个无符号的定点数。这12位的值设置在USART_BRR寄存器。
printf函数默认输出设备是显示器,若要在串口或者LCD上显示,
必须重定义标准库函数里调用的与输出设备相关的函数。
比如使用printf输出到串口,需要将fputc里面的输出指向串口,这一过程就叫重定向。
IWDG、WWDG
独立看门狗IWDG 12位递减计数器
当计数器从某一个值递减到0时(如果看门狗已激活),系统就会产生一次复位。
如果在计数器递减到0之前刷新了计数器值,那么系统就不会产生复位。
刷新即为“喂狗”。
看门狗功能由
窗口看门狗WWDG 7位递减计数器
当减到一个固定值0X40(窗口的下限)时还不喂狗的话,产生一个MCU复位
另外窗口看门狗的计数器的值在减到某一个数之前喂狗的话也会产生复位,这个值叫窗口的上限
上限值由用户独立设置
窗口看门狗计数器的值必须在上窗口和下窗口之间才可以刷新(喂狗)
输入捕获
STM32F1除了基本定时器TIM6和TIM7,其他定时器都具有输入捕获功能。
输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,通常用于测量输入信号的脉宽、测量
工作原理:在输入捕获模式下,当相应的
待机模式:
在运行模式下,可以通过如下方式降低功耗:
(1)降低系统时钟速度
(2)不使用 APBx 和 AHB 外设时,将对应的外设时钟关闭
STM32 3种低功耗模式
(1)睡眠模式( CM3 内核停止工作,外设仍在运行)
(2)停止模式(所有时钟都停止)
(3)待机模式( 1.8 V 内核电源关闭)
这三种模式所需的功耗是逐级递减,待机模式功耗最低
在停止模式中,重新开启时钟后,还可以从上次停止处继续执行代码。
在待机模式中,由于没有之前代码的运行记录,只能对芯片复位,重新检测BOOT条件,从头开始执行程序。
ADC模数转换器
按转换原理主要分为逐次逼近型、双积分型、电压频率转换型三种
STM32F1的ADC是逐次逼近型
STM32F103 3个ADC 可以独立使用,也可以使用双重
STM32F1 的 ADC 是 12 位逐次逼近型的模拟数字转换器
18个复用通道,可测量来自16 个外部源、2 个内部源信号。
可以单次、连续、扫描或间断模式执行
ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。
ADC具有模拟看门狗特性,允许应用程序检测输入电压是否超出用户定义的阀值上限或者下限。
.