其实STM32内部的是由基础电路构造,有些程序的过程想当于把设置之前设计好未连接的硬件电路连接,程序转移成二进制,有些二进制位便是配置电路的连接状态, ,举例0打开开关(不连接电路),1闭合开关(连接电路),二进制在很多硬件编程中扮演着开和关的重要角色.
STM32拥有32根数据线传输32位二进制数据,而基于51内核的单片机是8位数据线,搬运一次数据的数量级根本不是一个概念.
32的时钟频率经过锁相环倍频高达72M,而51仅为12M.
重要概念:只有当时钟的脉冲(上升/下降沿)到来时才能改变寄存器的值,举例子,我想改变IO口状态为低电平,时钟脉冲到来时我才能改变,32(72M频率)则比51(12M频率)快6倍!
当然STM32比51块还因为它的哈佛结构等,只需要大概了解就好了.
自定义函数:是为了避免主函数有大量的程序而进行封装的函数,主函数一般仅仅是几行函数调用.
库函数: ST公司为使用者配置好的函数,避免使用者直接使用寄存器的繁琐工作,必须有一个思想:我需要用到的配置函数ST都帮我们写好了,我们只需要去找函数来调用!
大家注意黑色框中的图,系统时钟72M分成2个重要的部分APB1和APB2
APB1时钟管理普通定时器2\3\4等
APB2时钟管理GPIO,高级定时器1\8,ADC等
启用对应的功能都要开启时钟,时钟的脉冲才能改变对应寄存器的值.(上升沿和下降沿都能改变寄存器的值)
有人问过我为什么51的时钟不用开启啊??
因为51单片机的时钟都默认统一开启了,而32需要分别开启时钟的,好处是避免不必要的MCU资源浪费和能耗.
STM32 IO口分组是按字母分组例如PA/PB/P(A-G),而STC是按数字分组P0/P1/P(0-3)
STM32一组有16个口例如A组有16个口,而STC一组只有8个口
GPIO 8种模式
-输入浮空
-输入下拉
-输入上拉
-模拟输入 (模拟量输入-AD,DA)
-开漏输出 : 外设电压比单片机电压低的时启用
-推挽式输出 (常用): 可以输出高(电源电压)/低电平,连接数字器件
-推挽式复用功能 (常用)
-开漏复用功能
重点:我们等会用程序去配置GPIO模式便是配置电路的连接来决定启用那种电路!!!
函数名字都概括了函数的作用!
问题来了?我们无法确定具体的函数,只能大概确定名字
例如GPIO_Init ,一个特别重要的功能启用:代码提醒功能,新手最好启用,快速上手!
–KEIL下ARM编译环境功能十分强大
下面为启用设置
注意:参数已经是ST帮你定义好的了,那么如何知道我该赋入什么形参呢???
找到了.h文件(宏定义和结构体都在.h文件声明)
如何配置这些结构体的量?
记住我们一旦调用库函数则只需要往库的头文件(.h)中便能找到ST为我们定义好的参数进行配置
搜寻关键词快捷键:CTRL+F
选定管脚
之后我们便找到了
有人奇怪了?为什么要ST这样做呢?
试想32的寄存器和管脚如此之多,对于快速开发的人员来说,预先宏定义好所需函数和配置参数简直再好不过了,甚至不用阅读手册都能进行快速开发!
配置模式
GPIO速度配置同样原理
自定义个函数对需要到GPIO设备进行配置
源码下载
KEIL波形仿真