STM32-自学笔记(3.丰富多样的外部设备上)

通用设备单元

STM32上的通用设备单元包括:通用输入/输出口(简称GPIO,也称通用I/O),外部中断单元,ADC转换模块,通用/高级定时器,实时时钟RTC,备份寄存器以及入侵检测引脚。

1.通用输入/输出口

STM32提供多达80个GPIO,他们分别分布在五个端口中,所以每个端口有16个GPIO。这些端口分别以A~E命名(GPIOA~GPIOE),最大耐压值为5v,大部分的外部引脚都可以从通用的GPIO切换为用户设备的专用I/O口,如USART接口设备的RX/TX通道,或者I2C接口设备的SCL/SDA引脚。此外stm32还有一个外部中断控制单元,允许将每个端口的16个GPIO通过映射成为外部中断输入口。

当GPIO作为输入口时:可以选择是否使用内部上拉/下拉电阻。

当GPIO作为输出口时:可以选择推挽输出方式和开漏极输出方式。同时可以将最大翻转频率限制在2MHz,10MHz,50MHz三个级别。

 

2.外部中断单元

STM32的外部中断单元共有19个外部中断(EXTI)通道,通过NVIC和中断向量进行映射。其中的0~15EXTI通道与GPIO引脚相连可以通过产生电平边沿(上升沿或下降沿)触发中断。剩下的三个中断通道分别被RTC警报中断,USB唤醒终端和电源检测单元所占据。STM32的NVIC为0~4号EXTI通道提供单独的中断向量,而5~9通道和10~15通道则各自共用一个中断向量。EXTI对STM32的功耗控制有着非同小可的作用。因为外部中断单元不需要时钟的驱动就可以工作,所以外部中断单元可以唤醒停机状态下的控制器。用户可以让几个外部引脚使用同一个

EXTI通道。

 

3.ADC转换模块

STM32的ADC模块拥有12位精度,其转换速率达到100万次每秒(1MHz),最大通道数为18,其中16个可以用作测试外部信号,而剩下的两个通道,其一与ADC内部温度传感器连接,其二与内部基准电压源连接。

STM32-自学笔记(3.丰富多样的外部设备上)_第1张图片
1.每个ADC都有两种基本转换模式:注入模式常规模式

常规模式下,用户可以使ADC的单个或部分通道轮流进行A/D转换,最多可以使用16个通道进行转换。此外各个通道的转换次序也是可以定制的,一个通道在一个转换周期内可以进行多次转换。

每次转换结束,转换结果都会放在一个单独的结果寄存器中,同时可以选择产生一个中断。由于adc的转换结果是12位,但存放在一个16位的寄存器中,所以采用左对齐或者右对齐的方式存放。如图

STM32-自学笔记(3.丰富多样的外部设备上)_第2张图片
通过一个专门的DMA通道,可以将ADC的转换结果从结果寄存器中传输到内存中。用户可以使每次组转换周期结束时产生中断请求DMA传输。

STM32-自学笔记(3.丰富多样的外部设备上)_第3张图片
ADC还有一种转换模式称为注入模式。注入转换组最多使用4个通道,可以使用软件或者硬件触发(和常规模式一样)。一旦注入模式触发之后,当前运行的常规转换会被终止,转而执行注入转换。注入转化完成之后,在返回执行常规转换(有点像cpu的中断嵌套)。和常规转换一样,一个通道在一个转换周期内可以进行多次转换。

和常规转换不同的是,注入转换组使用不同于常规转换组使用的结果寄存器。

STM32-自学笔记(3.丰富多样的外部设备上)_第4张图片
ADC注入转换通道数据移位寄存器用以存储一个16位的数值。当ADC注入转换完成后,其转换结果会自动减去移位寄存器里的值,这才是最终的注入转换结果。其结果有可能成为负数,所以图中用SEXT表示符号位。和常规转换一样,可以采用左对齐或者右对齐的方式存放。

 

2.模拟看门狗:

如图用户可以设置看门狗的上下限电压值。一旦超过这个上下限,就会触发模拟看门狗中断。

STM32-自学笔记(3.丰富多样的外部设备上)_第5张图片
3.ADC的基本设置:

ADC寄存器模块包括以下寄存器:

ADC状态寄存器

ADC控制寄存器

ADC采样时间寄存器

ADC注入通道数据偏移寄存器

ADC看门狗高阈值寄存器

ADC规则序列寄存器

ADC注入数据寄存器

ADC规则数据寄存器

 

ADC的寄存器模块可以设置如下参数:单次采样时间,常规模式和注入模式的偏移值以及看门狗上下电压阈值。

ADC的全部工作参数都在ADC状态寄存器和ADC控制寄存器中设置。

使用DMA传输配合ADC转换效率更高。

 

4.双ADC模式

 

5.通用/高级定时器

STM32分为好几个类别,有以下:

1.高级定时器

2.通用定时器

3.基本定时器

4.看门狗定时器

5.SysTick定时器

高级定时器 通用定时器 基本定时器,这三个定时器成上下级的关系,即基本定时器有的功能通用定时器都有,而且还增加了向下、向上/向下计数器、PWM生成、输出比较、输入捕获等等功能;而高级定时器又包含了通用定时器的所有功能,另外还增加了死区互补输出、刹车信号、加入重复计数器等等。
      所以学习STM32 定时器实际就是学习一下高级定时器,然后适当的删减后就是后面的两种定时器了。

STM32有4个定时器单元,共计8个定时器。定时器1和定时器8为高级定时器,专门用于电机控制。

剩下的定时器为通用定时器,所有的定时器都有类似的结构,高级定时器中加入了一些高级的硬件特性。

(1)通用定时器:所有的通用定时器都是基于16位宽度的计数器,带有16位预分频器和自动重载寄存器。定时器的计数模式可以设置为向上计数、向下计数和中央计数模式(从中间向两边计数)。定时器的时钟驱动源多达8个可选,这里甚至包括系统主时钟提供的专用时钟,另一个定时器所产生的边沿输出时钟,通过捕获比较引脚输入的外部时钟。如果使用定时器所产生的边沿输出时钟和外部时钟,就需要通过ETR引脚将定时器内部的输入门控打开。

STM32-自学笔记(3.丰富多样的外部设备上)_第6张图片
除了基本的计时功能之外,每一个定时器还带有4个捕获比较单元。这些单元不仅具备基本的捕获比较功能,还有一些特殊的工作模式。如:在捕获模式下,定时器将启用一个输入过滤器和一个特殊的PWM测量模块,同时还支持编码输入;在比较模式下,定时器可实现标准的比较功能,输出可定制的PWM波形,产生单次脉冲。此外,每个定时器都支持中断和DMA传输。

捕获单元:

通用定时器的捕获单元,有四个捕获比较通道。分别有一个可配置的边沿检测器连接。当检测器检测到电平边沿变化时,定时器当前计数值就会被捕获存入16位捕获比较寄存器中。当捕获事件发生时,用户可以选择停止计数或者复位计数器,此外捕获时间还可以用于触发中断和申请DMA传输。下图

STM32-自学笔记(3.丰富多样的外部设备上)_第7张图片
 

(摘自STM32自学笔记)

你可能感兴趣的:(STM32)