STM32 IO口
STM32的IO口可以由軟件來(lái)配置輸入輸出模式员淫,主要有輸入懸空合蔽、輸入上拉、輸入下拉满粗、模擬輸入辈末、開(kāi)漏輸出、推挽輸出映皆、推挽式復(fù)用功能挤聘、開(kāi)漏式復(fù)用功能。
image.png
每個(gè)IO口由7個(gè)寄存器控制捅彻,配置模式的2個(gè)32位端口配置寄存器CRL和CRH组去;2個(gè)32位數(shù)據(jù)寄存器IDR和ODR;一個(gè)32位復(fù)位/置位寄存器BSRR步淹;一個(gè)16位復(fù)位寄存器BRR从隆;一個(gè)32位鎖存寄存器LCKR;常用的是四個(gè)寄存器CRL缭裆、CRH键闺、IDR、ODR澈驼。
想要使用GPIO的功能辛燥,需要按照以下的順序。
- 使能端口時(shí)鐘:即RCC->APB2ENR設(shè)置相應(yīng)位置為1.
APB2ENR寄存器
例如開(kāi)啟PORTB:
RCC->APB2ENR|=1<<3;
- 配置IO口的模式 低8位IO設(shè)置CRL缝其、高8位設(shè)置CRH挎塌。每個(gè)IO占用4位,配置表如下圖:
IO配置表
比如常用的PB5推挽輸出應(yīng)當(dāng)設(shè)置CRL為:
GPIOB->CRL&=0xFF0FFFFF;
GPIOB->CRL|=0x00300000;
- 配置IO端口輸出或者輸入的電平内边,即設(shè)置端口IDR或ODR寄存器榴都。
其中IDR為一個(gè)只讀寄存器,并且只使用了低16位漠其,讀取的時(shí)候只能以16為形式讀出嘴高。
ODR也只使用了低16位,其可以讀寫(xiě)和屎。
這兩個(gè)寄存器各對(duì)應(yīng)著16個(gè)IO口阳惹,例如要在PB5口輸出高如下:
GPIOB->ODR|=1<<5;
這樣IO口的初步使用就完成了,但是注意一下ODR寄存器不支持寫(xiě)0眶俩,只能置1莹汤,所以要改變ODR可以使用BRR/BSRR進(jìn)行復(fù)位。