最近學(xué)習(xí)使用STM32,做個記錄吧。
剛接觸,就先從點(diǎn)燈程序開始。單片機(jī)的點(diǎn)燈程序,就相當(dāng)于學(xué)語言的hello world程序了。
先簡單介紹下開發(fā)環(huán)境,芯片類型是STM32F030C8,集成開發(fā)環(huán)境用的是Keil5 MDK-ARM,仿真器使用JLINK。
要點(diǎn)燈,先要確定接燈的引腳。我的板子上是PA0接的一個led燈。
在程序中,就是GPIO_Pin_0了。為了擴(kuò)展性,或者說,為了方便修改引腳,我使用了一個函數(shù)來封裝。如下:
int get_gpios(){
return GPIO_Pin_0 ;//連接到燈的gpio引腳,可以有多個
}
要點(diǎn)燈,也就是要將這個引腳設(shè)置為輸出,并控制它的高低電平。我們先來進(jìn)行初始化設(shè)置:
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能GPIOA時鐘 */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
/* 配置LED相應(yīng)引腳PA1*/
GPIO_InitStructure.GPIO_Pin = get_gpios();
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIOA->BSRR = get_gpios() ;//點(diǎn)亮燈
}
具體的閃燈的實(shí)現(xiàn),也寫了一個函數(shù),方便后面調(diào)用:
int flag_led_on=0;
void LED_toggle(){
flag_led_on = 1 - flag_led_on;
if(flag_led_on!=0){
GPIOA->BRR = get_gpios() ; //reset
} else {
GPIOA->BSRR = get_gpios() ; //set
}
}
這樣,主體的功能就完成了,剩下的就是在主循環(huán)中進(jìn)行調(diào)用了。
主函數(shù)非常簡單:
int main(void)
{
LED_Init();//燈的初始化
while(1){
Delay(1600000);//延時1s
LED_toggle(); //LED翻轉(zhuǎn)
}
}
這里還有一個新函數(shù):Delay(),就是一個延時函數(shù)。為了簡化代碼,所以延時函數(shù)沒有使用定時器,是簡單的循環(huán)等待。如下:
void Delay(uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
至此,這個點(diǎn)燈程序就完成了,是不是很簡單。
另外,簡單說明下延時函數(shù)為什么使用了 1600000 為參數(shù)。
是我通過實(shí)驗(yàn),發(fā)現(xiàn)設(shè)置為這個值對應(yīng)的時間基本上是1s。
但是,在不同的板子上,程序做不同的優(yōu)化,或者延時代碼的寫法有所不同,都會導(dǎo)致延時時間的差異。具體取值可以自己根據(jù)實(shí)際運(yùn)行情況調(diào)整。
以后,我再仔細(xì)分析下這個取值的道理。
上一篇:STM32-基于匯編來分析延時
下一篇:一則STM32f103莫名反復(fù)復(fù)位的經(jīng)驗(yàn)記錄
推薦閱讀
史海拾趣
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- 座椅、天窗、電動尾門應(yīng)用 國產(chǎn)車規(guī)級高壓霍爾效應(yīng)傳感器推薦
- 突發(fā)!又一車企車機(jī)“崩了”
- 寧德時代為陳立泉院士頒發(fā)“卓越貢獻(xiàn)獎”
- 一文速覽吉利雷神 AI 電混 2.0 發(fā)布會重點(diǎn)
- 2025年1-4月ADAS供應(yīng)商裝機(jī)量排行榜:頭部集中與國產(chǎn)突圍并存
- 國內(nèi)飛行汽車無線通信測試成功,通信安全新突破
- SPAD席卷車載激光雷達(dá)市場
- 大聯(lián)大品佳集團(tuán)推出基于Microchip和ams OSRAM產(chǎn)品的10Base-T1S萬級像素大燈方案
- 哈曼推出采用三星Neo QLED技術(shù)的全新顯示屏
- Syntiant推出超低功耗汽車AI創(chuàng)新技術(shù) 提升車輛安全性和用戶體驗(yàn)
- 羅姆有獎直播|從0到1,帶你了解電機(jī)及其驅(qū)動 開始報名啦~
- 省錢、省心的購買租賃方案,讓您不再為預(yù)算煩惱!
- Discover mmWave 走進(jìn) TI 毫米波雷達(dá)世界 快速獲得設(shè)計技能
- 嵌入式Rust修煉營:動手寫串口燒錄工具和MCU例程,Rust達(dá)人Hunter直播帶你入門Rust
- EEWorld 芯積分兌換年度回饋來襲~多種賺積分捷徑曝光+禮品兌換劇透
- 有獎直播:艾邁斯歐司朗智慧農(nóng)業(yè)與植物照明
- ADI有獎下載活動之7 可編程邏輯控制器(PLCs)解決方案
- 開發(fā)板芯幣競拍,每日一款!今日競拍開發(fā)板:大黃蜂開發(fā)板
- ADI有獎下載活動之13升級版ADI電機(jī)控制解決方案—伺服控制
- LG開發(fā)出熱電半導(dǎo)體 可使家電體積縮小40%
- 糖尿病治療里的“科技浪潮”,究竟是被低估還是過譽(yù)?
- 海信拿下LG OLED電視面板:產(chǎn)品有望三季度上市
- CESA上演視覺大戰(zhàn):國產(chǎn)、合資電視“大亂斗”
- 應(yīng)用比例不到10% 家電巨頭造“芯”壓力有多大?
- 四元LED淡季不淡 陸廠藍(lán)光LED價格波動陷入亂流
- 1月中國LED封裝價格部分小幅下調(diào),廠商主推中功率3030產(chǎn)品
- Spotify智能音箱新品鴻海有望操刀
- 高通 Wi-Fi 技術(shù)創(chuàng)新正引領(lǐng)行業(yè)增長,支持更智能的家居
- 惠普財報超預(yù)期 PC產(chǎn)業(yè)鏈復(fù)蘇?