嵌入式学习笔记19.12.10

2019-12-10  本文已影响0人  Mo1035

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

上一篇下一篇

猜你喜欢

热点阅读