原文:链接:https://pan.baidu.com/s/12MKCVQ7mwsGtuZlDAGu8gw 提取码:xu9p
想必,在之前的两节课之中,即便是我多次提到放轻松,但未免感到懵逼,好多名词不懂,但,我想说的是:如果不懂,请暂从字面上来理解,还不懂?
本节课主要是给前面的点亮LED的超小项目来理解STM32的架构,首先,我们先来解决前面的疑问。
提醒:下面的内容是由以下两个官方资料整理所得,我们写代码的依据也都是根据这两本资料:
1、STM32F10x-参考手册
2、STM32F103xCDE_数据手册
1.jpg
1>STM32F103VET6                                
2.png
3.png 指南者所用的单片机是STM32F103VET6,一大串符号,有点迷,那么请看上面的两张图:
         通过查图,这个单片机属于基础版,主频72MHz(最高的时钟频率),100个引脚,512Kbytes,QFP封装,-40℃到85℃的工作温度。
2>GPIO
         GPIO是通用的输入输出口(General Purpose Input Output),如果会英语就很好记了,每个GPIO端口有两个32配置寄存器,两个32数据寄存器,一个32位置位/复位寄存器,一个16复位寄存器和一个32锁定寄存器。如果使用固件库的话,我们不讲底层的寄存器是如何配置的,只要简单知道的他的构成即可。
         每个GPIO是由寄存器和相关的控制电路构成。
  1.          GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  2.          GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
  3.          GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  4.          GPIO_Init(GPIOB,&GPIO_InitStructure);

         还记得之前的这几行代码么?通过初始化结构体变量来配置相关的寄存器,配置的有:
1、工作模式
4.png
     这是C语言中typedef(重定义)的enum(枚举类型),枚举类似于批量的define宏定义,我们还可以看到有两种输入和输出两种工作模式,因为STM32GPIO是复用的,也就是每一个IO口都有第二功能可以使用。
1-输入模式(模拟/浮空/上拉/下拉)
模拟输入:常用于电压采集。
浮空输入:输入的电平不是固定的,由外部器件的输入决定。
上拉/下拉输入:默认为低电平/高电平,例如获取按键的状态如果设置浮空输入,就不清楚是高电平还是低电平,必须加个上拉或者下拉电阻来保持稳定的电平状态,如果是下拉输入的话,就会方便很多。
2-输出模式(推挽/开漏)
推挽输出:可以通过单片机编程来控制IO的高低电平状态,底层是FET电路实现的。
开漏输出:可以通过单片机编程来控制IO的低电平状态和高阻态,底层是FET电路实现的。 3-复用功能(推挽/开漏)
唯一不同的是,上文所说的都是由单片机控制,复用功能的信号源来自于其它外设
2、引脚
选中挂载的指定引脚,之前学51的时候听过管脚的概念,其实引脚和管脚是一个东西,需要注意的是STM32的GPIO有16个引脚。
3、时钟速率
  1. typedef enum
  2. {
  3. GPIO_Speed_10MHz = 1,
  4.     GPIO_Speed_2MHz,
  5.     GPIO_Speed_50MHz
  6. }GPIOSpeed_TypeDef;
时钟速率设置的越快,响应的速度就越快,如果对于功耗有要求的话,需要关注下配置的时钟速率。




目录:
《stm32,我来了》小白教程之第一章:点亮LED灯
《stm32,我来了》小白教程之第二章:LED灯闪烁
《stm32,我来了》第三章:小项目大学问-1
《stm32,我来了》第三章:小项目大学问-2
《stm32,我来了》第四章:EXTI-使用按键点亮LED灯