STM32学习笔记NO1. STM32外设使用总结

版权声明:请尊重原创成果,未经允许,禁止转载 https://blog.csdn.net/qq_31441951/article/details/86737081

目录

1.各种输入输出模式

1.1 输入模式

1.2 输出模式

2.输出频率设置

2.1 如何选择输出频率

二、时钟源

1.1各个时钟源作用

 

三、存储器

1.SRAM

2.存储器结构

四、中断与事件


1.各种输入输出模式

1.1 输入模式

  • 模拟输入 GPIO_AIN:应用ADC模拟输入,或者低功耗下省电
  • 浮空输入 GPIO_IN_FLOATING:引脚处于浮空模式,电平状态是不确定的。外部信号输入什么,IO口就是什么状态。
  • 上拉输入 GPIO_IPU:防止IO口出现不确定的状态,比如,当IO口悬空时,就会通过内部的上拉电阻将该点钳位在高电平
  • 下拉输入 GPIO_IPD:功能与上拉电阻类似,防止IO口出现不确定的状态,比如,当IO口悬空时,就会通过内部的下拉电阻将该点钳位在低电平

注:

  • IO端口复位后处于浮空状态,也就是其电平状态由外围电路决定
  • STM32上电复位瞬间I/O口的电平状态默认是浮空输入,因此是高阻。做到低功耗
  • STM32的IO管脚配置口默认为浮空输入,把选择权留给用户,这是一个很大的优势:一方面浮空输入确保不会出现用户不希望的默认电平(此时电平取决于用户的外围电路);另一方面降低了功耗,因为不管是上拉还是下拉都会有电流消耗。从另一个角度来看,不管I/O管脚的默认配置如何,还是需要在输出的管脚外加上拉或下拉,这是为了保证芯片上电期间和复位时输出的管脚始终处于已知的电平
  • 关于模拟输入&低功耗,根据STM32的低功耗AN(AN2629)及其源文件,在STOP模式下,为了得到尽量低的功耗,确实把所有的IO(包括非A/D输入的GPIO)都设置为模拟输入

1.2 输出模式

  • 开漏输出GPIO_OUT_ODIO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变 。可以读IO输入电平变化,实现C51的IO双向功能
  • 推挽输出GPIO_OUT_PP  :IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的
  • 复用功能的推挽输出GPIO_AF_PP  :一般设置片内外设功能(I2C的SCL,SDA)
  • 复用功能的开漏输出GPIO_AF_OD : 片内外设功能(TX1,MOSI,MISO.SCK.SS)

注:

  • 在没有任何操作的情况下,STM32通用推挽输出模式的引脚默认低电平,也就是有电的状态。所以在配置的时候通常会先把引脚的电平设置拉高,让电路不产生电流。有电到没电这一过程也就是引脚电平从低到高的过程。
  • 模拟I2C使用开漏输出GPIO_OUT_OD,接上拉电阻,能够正确输出0和1;读值时先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以读IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用带上拉输入_IPU和浮空输入GPIO_IN_FLOATING和 开漏输出GPIO_OUT_OD;
  • 推挽输出:推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。可以输出高,低电平,连接数字器件;
  • 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)

2.输出频率设置

        STM32的GPIO有3种输出速度(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。

2.1 如何选择输出频率

输出频率一般是应用频率的10倍为宜,例如:

  • 对于串口,假如波特率115200,只需115.2k,那么用2M的GPIO的引脚速度就够了,既低功耗也噪声小
  • 对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度
  • 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度

二、时钟源

1.1各个时钟源作用

STM32有5个时钟源HSI、HSE、LSI、LSE、PLL,其实它只有四个,PLL是由HSI或HSE提供的。

  • 高速外部时钟(HSE):以外部晶振作时钟源,晶振频率可取范围为4~16MHz,我们一般采用8MHz的晶振
  • 高速内部时钟(HSI): 由内部RC振荡器产生,频率为8MHz,但不稳定
  • 低速外部时钟(LSE):以外部晶振作时钟源,主要提供给实时时钟模块,所以一般采用32.768KHz
  • 低速内部时钟(LSI):由内部RC振荡器产生,也主要提供给实时时钟模块,频率大约为40KHz

 

三、存储器

1.SRAM

不同类型的STM32单片机的SRAM大小是不一样的,但是他们的起始地址都是0x2000 0000,终止地址都是0x2000 0000+其固定的容量大小。其作用是用来存取各种动态的输入输出数据、中间计算结果以及与外部存储器交换的数据和暂存数据。设备断电后,SRAM中存储的数据就会丢失。

注:Cache 就是为了缓解低速存储器而设计的. STM32的数据通常在 SRAM 中, 是零等待的, 不需要缓存. 所以 STM32 的缓存技术只是针对 FLASH 的指令缓存.

2.存储器结构

                                     

其中:

  • Peripherals:外设的存储器映射,对该区域操作,就是对相应的外设进行操作;
  • SRAM:运行时临时存放代码的地方;
  • Flash:存放代码的地方;
  • System Memory:STM32出厂时自带的你只能使用,不能写或擦除
  • Option Bytes:可以按照用户的需要进行配置(如配置看门狗为硬件实现还是软件实现)

四、中断与事件

这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套。图中的蓝色虚线箭头,标出了外部中断信号的传输路径。图中红色虚线箭头,标出了外部事件信号的传输路径。

简单举例:外部I/O触发AD转换,来测量外部物品的重量;如果使用传统的中断通道,需要I/O触发产生外部中断,外部中断服务程序启动AD转换,AD转换完成中断服务程序提交最后结果;要是使用事件通道,I/O触发产生事件,然后联动触发AD转换,AD转换完成中断服务程序提交最后结果;相比之下,后者不要软件参与AD触发,并且响应速度也更块;要是使用事件触发DMA操作,就完全不用软件参与就可以完成某些联动任务了。(引用:http://www.eeworld.com.cn/mcu/2015/1009/article_22780.html

 


持续更新~~

猜你喜欢

转载自blog.csdn.net/qq_31441951/article/details/86737081