天天看點

STM32學習筆記【3】使用寄存器點亮LED燈使用寄存器點亮LED燈

使用寄存器點亮LED燈

1.配置輸出資料寄存器

找到LED燈的原理圖:

STM32學習筆記【3】使用寄存器點亮LED燈使用寄存器點亮LED燈

由原理圖可知,紅色燈對應的端口為PB5,綠色對應的端口為PB0,藍色對應的端口為PB1。當端口為低電平的時候,燈被點亮。

查閱手冊可知,GPIOB的存儲器映像為0X40010C00-0X40010FFF;而端口對應的輸出資料寄存器的偏移量為0Ch。

STM32學習筆記【3】使用寄存器點亮LED燈使用寄存器點亮LED燈

下面代碼使用了位移操作,詳情可看:【C語言知識】關于移位指令的使用。

配置寄存器的代碼為:

*(unsigned int *)0x40010C0C &=~(1<<0);

2.配置低端口寄存器(CRL)

在配置輸出資料寄存器之前,我們還需要配置端口模式和功能。查閱手冊可知,由CNF0和MODE0分别控制功能和模式,我們需要相應地配置,以用于GPIO口的使用。

STM32學習筆記【3】使用寄存器點亮LED燈使用寄存器點亮LED燈

LED燈需要使用推挽輸出(後面會解釋),這裡的速度我們使用10MHz。是以CNF0應該為00,MODE0應該為01,整體配置應該是0001。

具體代碼如下:

*(unsigned int *)0x40010C00 |=(1<<(4*0));

3.時鐘配置(RCC)

在絕大部分的應用中,都先需要首先啟動RCC時鐘控制,才能正常的運作程式。

由于GPIOB是APB2總線上的外設,是以我們需要打開APB2中GPIOB對應的時鐘。

STM32學習筆記【3】使用寄存器點亮LED燈使用寄存器點亮LED燈

IOPBEN的定義如下:

STM32學習筆記【3】使用寄存器點亮LED燈使用寄存器點亮LED燈

我們隻要打開對應端口的第三個寄存器即可。

查閱手冊得知,APB2的RCC的起始位址為0x40021000-0x400213FF。

具體代碼如下:

*(unsigned int *)0x40021018 |=(1<<3);

4.完整代碼如下

int main(void)
{
	//配置時鐘
	*(unsigned int *)0x40021018 |=(1<<3);
	
	//配置I/O口模式
	*(unsigned int *)0x40010C00 |=(1<<(4*0));
	
	//控制ODR寄存器
	*(unsigned int *)0x40010C0C &=~(1<<0);
}
           

這裡沒有使用固件庫,全部是寄存器程式設計,目的是為了強化對于寄存器的了解,以及複習C語言移位指令。

繼續閱讀