1
GPIO(通用IO引腳)
總引腳176個(gè)? ? IO引腳144個(gè)? ??
每16個(gè)一組? A0-A15? ?16個(gè)? ? 9組
高低電平輸出? ?I O數(shù)字控制
GPIO? 輸出? ?
鉗位防止電壓過(guò)高 過(guò)低? ? 復(fù)位 0? 置位 1
推挽? ?加速高低電平切換? ? ? 實(shí)現(xiàn)高低電平的來(lái)回切換 控制
開(kāi)漏? ? 沒(méi)有高電平? ?想用高電平必須要用上拉電阻
GPIO 輸入
模擬? 不是數(shù)字信號(hào)?
通過(guò)施密特 低電平 0.7直接到0? ? 高電平2.4直接到3.3? 直接到峰值
出1 或者0? ?
施密特? ?防止高阻態(tài) (在高低電平之間)
上拉電阻(產(chǎn)生高電平)
下拉電阻(產(chǎn)生低電平)
浮空(既不是高電平也不是低電平)
復(fù)用? 其他串口 也可以用GPIO引腳
2
復(fù)位信號(hào)? ?32pc程序寄存器? (類似數(shù)組)硬件交互? pc之間交互數(shù)據(jù)
1 預(yù)處理? ? {? .h->.C? .h都變成.c文件
? ? ? ? ? ? ? ? ? ? 宏展開(kāi)? ?別名替換? ? 枚舉替換}
2 編譯? .c->.s(匯編語(yǔ)言) 每一個(gè).c生成一個(gè).s文件
3匯編? .s->.o(目標(biāo)文件) 每一個(gè).s生成一個(gè).o文件
4鏈接
.o? ? ? ? .exe
.o? ? ? ? .elf? linux
.o? ? ? ? .bin/.hex? ? ?keil
可執(zhí)行文件
交叉編譯? ?簡(jiǎn)單地說(shuō)荒典,就是在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。同一個(gè)體系結(jié)構(gòu)可以運(yùn)行不同的操作系統(tǒng)
可執(zhí)行文件? ??
.bss? ? 可優(yōu)化? ?沒(méi)有被使用的數(shù)據(jù)O0? ?O3 優(yōu)化等級(jí)
.date? 數(shù)據(jù)段? ? 全局變量? ?常量(沒(méi)有局部變量) 地址? 靜態(tài)變量
.code? 代碼段? ?ARM命令類? while? for if 判斷類? 或者那種循環(huán)? 命令類
3
flash創(chuàng)建
flash? 1Mbyte
棧空間? 指向????SRAM首地址
堆空間(malloc)申請(qǐng)? ? ?指向SRAM尾地址
SRAM? ?256kbyte
首地址與尾地址之間叫做堆棧增長(zhǎng)區(qū)
地址映射? ?根據(jù)地址找到GPIO引腳
AMBA? ?
高數(shù)總線? ?AHB
標(biāo)準(zhǔn)總線? ?APB
使能? ?EN? ?enable? ? 能
失能? ? DIS? disable? ? 不能
4
程序編寫流程
根據(jù)電路圖
1打開(kāi)時(shí)鐘源
2
外設(shè)初始化?
復(fù)位 GPIO引腳??
找到H首地址
找到輸出
上拉
低速
2
硬件控制
高低電平輸出
切換