江科大學(xué)習(xí)筆記 _1.寄存器點燈
從0新建工程,用寄存器點燈:
?
啟動文件選擇

使用STM32F10x固件庫,找到下面6個文件



將這6個文件添加到一個文件夾內(nèi),命名為Start

新建一個文件夾,用于存放用戶代碼,命名為User
添加一個新的.c文件,命名為main

?
??
用魔法棒設(shè)置文件夾的路徑,使編譯器能找到文件


編譯,無報錯,工程新建好了。
?
?
?
?
?
寄存器點燈
首先添加頭文件

寫入main函數(shù)
Int main()
{
????????While(1)
????{
?????
????}
}
PB3|PB4|PB5上連接了3個燈,低電平點亮
需要控制輸出PB3|PB4|PB5低電平
?
首先需要開GPIOB時鐘,GPIOB掛載在APB2總線下

RCC->APB2ENR = (1 << 3);//開啟GPIOB時鐘
?PB3|PB4|PB5是低位引腳,使用GPIO的CRL寄存器
0011對應(yīng)16進制就是3


使用推挽輸出,速度50MHZ,所以CRL寄存器:?
GPIOB->CRL = 0X00333000;
GPIOB->CRL = 0X00333000;
也能這樣寫:
GPIOB->CRL &= 0XFF000FFF;
GPIOB->CRL |= 0X00333000;
?
?
GPIO 輸出ODR寄存器輸出0;
?

或者
GPIOB->ODR = (0 << 3)|(0 << 4)|(0 << 5);
編譯下載,發(fā)現(xiàn)只亮了PB5
?
原因是PB3和PB4默認(rèn)做JTAG調(diào)試使用,如當(dāng)GPIO使用,
需要關(guān)閉JTAG調(diào)試功能 且 開啟復(fù)用功能
?


RCC->APB2ENR = (1 << 3)|(1 << 0);//開GPIOB|AFIO時鐘
AFIO->MAPR = 0x02000000; //關(guān)閉JTAG 釋放出PB3,PB4,PA15
?
?RCC->APB2ENR = (1 << 3)|(1 << 0);//開GPIOB|AFIO時鐘
????
????//PB3和PB4默認(rèn)做JTAG調(diào)試使用,如當(dāng)GPIO使用,需要關(guān)閉JTAG調(diào)試功能
??AFIO->MAPR = 0x02000000; //關(guān)閉JTAG 釋放出PB3,PB4,PA15
????
??#if 0
??GPIOB->CRL = 0X00333000;//PB3|PB4|PB5
??#else
? GPIOB->CRL &= 0XFF000FFF;
? GPIOB->CRL |= 0X00333000;
? #endif?
GPIOB->ODR = (0 << 3)|(1 << 4)|(0 << 5);
?
?
?
?
?
?