STM32學(xué)習(xí)筆記——控制GPIO輸出點(diǎn)亮LED燈
使用51單片機(jī)控制IO口相對(duì)來(lái)說(shuō)要簡(jiǎn)單得多,最小系統(tǒng)搭建完畢后直接通過(guò)軟件往各IO口寫“1”或者寫“0”即可。但使用STM32控制IO口輸入輸出卻遠(yuǎn)沒(méi)有這么容易,經(jīng)過(guò)一個(gè)下午的查閱文獻(xiàn)及探索后,略微有了頭緒。
本文引用地址:http://m.butianyuan.cn/article/201611/322904.htm個(gè)人所使用的STM32F103VBT6有100個(gè)引腳,其中有五組GPIO(GPIOA…GPIOE),每組有16個(gè)GPIO端口(GPIOx_Pin0…GPIOx_Pin15)共80個(gè),每個(gè)GPIO端口都有:
兩個(gè)32位配置寄存器(GPIOx_CRL,GPIOx_CRH);
兩個(gè)32位數(shù)據(jù)寄存器(GPIOx_IDR,GPIOx_ODR);
一個(gè)32位置位/復(fù)位寄存器(GPIOx_BSRR);
一個(gè)16位復(fù)位寄存器(GPIOx_BRR);
和一個(gè)32位鎖定寄存器(GPIOx_LCKR)。
其中各個(gè)寄存器的作用:
名稱 | 寄存器 | 意義 |
端口配置寄存器 | GPIOx_CRL GPIOx_CRH | 配置GPIO工作模式 |
端口輸入數(shù)據(jù)寄存器 | GPIOx_IDR | 讀取GPIO輸入狀態(tài) |
端口輸出數(shù)據(jù)寄存器 | GPIOx_ODR | 控制GPIO輸出狀態(tài) |
端口位設(shè)置/復(fù)位寄存器 | GPIOx_BSRR | 用于位操作GPIO的輸出狀態(tài)的:設(shè)置端口為0或1 |
端口位復(fù)位寄存器 | GPIOx_BRR | 用于位操作GPIO的輸出狀態(tài)的:設(shè)置端口為0 |
端口配置鎖定寄存器 | GPIOx_LCKR | 端口鎖定后下次系統(tǒng)復(fù)位之前將不能再更改端口位的配置 |
每個(gè)I/O端口位可以自由編程,然而I/0端口寄存器必須按32位字被訪問(wèn)(不允許半字或字節(jié)訪問(wèn))。GPIOx_BSRR和GPIOx_BRR寄存器允許對(duì)任何GPIO寄存器的讀/更改的獨(dú)立訪問(wèn);這樣,在讀和更改訪問(wèn)之間產(chǎn)生IRQ時(shí)不會(huì)發(fā)生危險(xiǎn)。
輸入數(shù)據(jù)寄存器(GPIOx_IDR)在每個(gè)APB2時(shí)鐘周期捕捉I/O引腳上的數(shù)據(jù)。因此,要控制GPIOC端口,必須先使能APB2時(shí)鐘。此外,STM32初始化外設(shè)第一步就是開啟APB時(shí)鐘。(時(shí)鐘部分知識(shí)暫時(shí)知道該如此,往后再學(xué)習(xí)。)
關(guān)于GPIO各寄存器的描述:
端口配置低寄存器(GPIOx_CRL) (x=A..E):
端口配置高寄存器(GPIOx_CRH) (x=A..E):
評(píng)論