GPIO通用(输入I/输出O)引脚:
总引脚176
I/O引脚 144/16 = 9组
A,B,C,D,E,F,G,H,I
A0-A15
B0-B15
.....
I0-I15
输入
复位0
置位1
直接写入数据寄存器,会导致物理硬件跟不上MPU处理速度
输出
推挽输出:加快开关电路速度
推挽模式同时有高低电平
开漏输出
若选择开漏模式,外部必须接上拉电阻,否则只有低电平
若开漏,只有上面MOS管工作,若推挽,2个MOS管同时工作
高组态:介于高低电平之间,通过内部上拉,下拉电阻消除这种状态。
还有浮空这种状态。
MOS管(电压型控制器件-开关)
三极管(电流型控制器件)
上拉电阻
下拉电阻
ADC模拟信号采集
CMOS 3.3-2.4高电平 0.7-0低电平
施密特触发器:加快电平变化,只输出0/3.3
当电压出于高低电平之间,
输入,模拟输入
实质寄存器与寄存器之间的交互数据
复位信号使PC程序寄存器(32位) 地址 为0x 00 00 00 00 (4个字节 = 32bit)
栈空间
.c -> .o -> .exe
1.预处理
将所有.h文件复制到.c
宏展开/别名替换/枚举替换...
2.编译
.c -> .s(汇编文件)
每一个.c生成一个.s文件
3.汇编
.s -> .o(目标文件)
每一个.s生成一个.o文件
4.链接
生成可执行文件
.o -> .exe
Windows
.o -> .elf
Linux
.o -> .bin/.hex
嵌入式
交叉编译,在当期系统开发生成其他系统的可执行文件
可执行文件的构成:
.bss可优化(未被使用的数据)
.data数据段(全局变量,地址,常量,静态变量)
.code代码段
SRAM(256K Byte)
FLASH(1M Byte)
0x00创建一个栈空间和一个堆(malloc)空间
__main库函数
用寄存器的方式实现硬件的控制
地址映射
PH10---低电平点亮,高电平熄灭
AMBA总线
AHB高速
APB标准
1.硬件初始化
a) 时钟源打开
通过RCC打开GPIOH的时钟源
RCC首地址0x40023800
复位值不是0,应该用位运算
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. 硬件控制
3. 高低电平输出
GPIOH_ODR偏移0x14
高电平0x400
低电平0x00
使能enable/失能disable