2019-12-10

GPIO:通用I/O引脚

总引脚数176个

I/O引脚144个

144/16=9组

A组-I组

A组:A0-A15

---------------------------------------------------------------

保护二极管钳卫作用,防止电压过高

复位0,置位1

---------------------------------------------------------------

CMOS    H高电平2.4V-3.3V    L高电平0V-0.7V

施密特触发器快速改变电平(2.4V-3.3V)

VSS电源,VDD接地

---------------------------------------------------------------

MOS管电压型控制器件

输入:模拟输入;复用(GPIO->串口)

输出:推挽(加快高低电平切换);开漏(自身截止,不能输出高电平,外部上拉电阻提供高电平)

高阻态介于高低电平之间

内部上/下拉电阻改变高低电平

---------------------------------------------------------------

复位信号    0x00000000-0xFFFFFFFF(4G) 全0程序从头开始运行

PC程序寄存器    硬件交互数据(寄存器之间交互)

---------------------------------------------------------------

.c-.exe

1.预处理

{

将.h内所有内容复制到.c

宏展开

别名替换

枚举替换等

}

2.编译

.c-.s(汇编语言)    每一个.c文件对应生成.s文件

3.汇编

将.s文件生成.o文件(目标文件)变成机器语言

每一个.s生成一个.o

4.链接

多个.o文件生成.exe(windows).elf(linux).bin/.hex可执行文件(烧写flash)

只抽取使用的函数库函数对大小没有影响

---------------------------------------------------------------

可执行文件构成

.code代码段    判断,循环等转换成ARM指令

.data数据段    全局变量,地址,静态变量,常量

.bss可优化    没有被使用的数据

-O0-O3优化等级越来越高

---------------------------------------------------------------

可执行文件烧写到内部flash

两个储存器flash(1M),SRAM(256K)

0地址创建栈空间和堆空间

栈空间放局部变量,函数内申请空间

堆空间malloc申请空间

stack size栈大小

_initial sp    按复位键    栈指针

---------------------------------------------------------------

Enable使能

disable失能

SystemInit启动外部时钟源

__main微库

用寄存器方式实现硬件控制

程序编写流程:

1.硬件初始化

(a)时钟源打开

通过RCC打开GPIOH的时钟源

RCC首地址0x40023800

RCC_AHB1ENR----0x100080偏移0x30

(b)外设初始化

GPIOH首地址0x40021C00

PH10

输出GPIOH_MODER----0x100000    偏移0x00

推挽GPIOH_OTYPER----0x00000000推挽    偏移0x04

上拉GPIOH_PUPDR----0x100000    偏移0x0C

低速GPIOH_OSPEEDR----0x00000000    偏移0x08

2.硬件控制

高低电平输出

GPIOH_ODR----偏移0x14

H----0x400

L----0x00000000

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容