stm32庫開發實戰指南讀書筆記(二)

2021-10-25 05:02:32 字數 3470 閱讀 4005

編寫自己的庫函式

.c檔案

具體實現機理

該部分主要是函式功能的實現,如按鍵點亮led的相應知識點。

主要實現目錄如下:

乙個基本的stm32應該包含如下:

博主使用的是正點原子stm32 mini開發板,實際開發過程中,引腳的巨集定義應根據實際電路來設定

基本硬體如下:

該部分包括了rs232轉ttl電路,實現如下:

注意

led0 -> paout(8)

led1 -> pdout(2)

key0 -> gpio_readinputdatabit(gpioc,gpio_pin_5)//讀取按鍵0

key1 -> gpio_readinputdatabit(gpioa,gpio_pin_15)//讀取按鍵1

wk_up -> gpio_readinputdatabit(gpioa,gpio_pin_0)//讀取按鍵2

.h中一般放的是同名.c檔案中定義的變數、陣列、函式的宣告,需要讓.c外部使用的宣告。這個宣告有啥用?只是讓需要用這些宣告的地方方便引用。因為#include 「xx.h」 這個巨集其實際意思就是把當前這一行刪掉,把xx.h 中的內容原封不動的插入在當前行的位置。

如本次寫的led庫函式以及按鈕庫函式的.**件如下

key.h

包含倆個函式的。

#ifndef __key_h

#define __key_h

#include "sys.h"

//#define key0 pcin(5)

//#define key1 pain(15)

//#define wk_up pain(0)

#define key0 gpio_readinputdatabit(gpioc,gpio_pin_5)//讀取按鍵0

#define key1 gpio_readinputdatabit(gpioa,gpio_pin_15)//讀取按鍵1

#define wk_up gpio_readinputdatabit(gpioa,gpio_pin_0)//讀取按鍵2

#define key0_pres 1 //key0

#define key1_pres 2 //key1

#define wkup_pres 3 //wk_up

void key_init(void);//io初始化

u8 key_scan(u8 mode); //按鍵掃瞄函式

#endif

led.h
#ifndef __led_h

#define __led_h

#include "sys.h"

#define led0 paout(8) // pa8

#define led1 pdout(2) // pd2

void led_init(void);//初始化

#endif

函式實現的內部邏輯led.c

#include "led.h"

/***

* @brief led io初始化

* @param 無

* @retval 無

* @note 初始化pa8和pd52為輸出口.並使能這兩個口的時鐘

* @note_time 2020-10-24,小劉同學製作

***/

void led_init(void)

key.c

按鍵初始化,以及相應的處理函式

#include "key.h"

#include "delay.h"

/***

* @brief 按鍵初始化函式

* @param 無

* @retval 無

* @note pa0.15和pc5 設定成輸入.並使能這兩個口的時鐘

* @note_time 2020-10-24,小劉同學製作

***/

void key_init(void)

/***

* @brief 按鍵處理函式

* @param mode:

0,不支援連續按;

1,支援連續按;

* @retval

key0_pres,key0按下

key1_pres,key1按下

wkup_pres,wk_up按下

* @note 注意此函式有響應優先順序,key0>key1>wk_up!!

* @note_time 2020-10-24,小劉同學製作

***/

u8 key_scan(u8 mode)

else if(key0==1&&key1==1&&wk_up==0)key_up=1;

return 0;// 無按鍵按下

}

完整的專案步驟如下:

/*---------------包含標頭檔案----------------------*/

#include "stm32f10x.h"

#include "sys.h"

#include "delay.h"

#include "key.h"

#include "led.h"

/*-------------------主函式---------------------------*/

/***

* @brief 迴圈讀取按鍵的值,並用led狀態表示

* @param 外部按鈕狀態

key_up 兩個燈狀態都反轉

key1 led1狀態反轉

key0 led0狀態反轉

* @retval

無 * @note 初始狀態led0被點亮

* @note_time 2020-10-24,小劉同學製作

***/

int main(void)

} }

仔細分析上面模組,可以基本了解了如何控制stm32的輸入與輸出。以及專案**的編寫規範。總的來說還是需要多加練習。

自學《STM32庫開發實戰指南》的筆記一

自學 stm32庫開發實戰指南 的筆記 基礎知識 stm32庫是對stm32提供的函式介面,api。通過呼叫函式介面來配置stm32暫存器。為解決不同晶元廠商生產的cortex微控制器軟體的相容性,建立了cmsis標準。cmsis層提供的是硬體抽象層,對軟體移植有好處。使用者層是要進行刪減 條件編譯...

STM32開發入門及實戰

本部落格的編寫目的 一 自我總結,記錄。二 分享,輸出,加深思考。三 不作細緻如書本般編排,儘管那樣的排版很好看,但是過於耗費時間,還有很多東西沒有必要說明,完全可以自己去解決,但還是盡量做好排版,便於閱讀。四 盡可能舉一反三,做到真正能夠處理實際問題。12 345stm32開發實戰 1 目錄一 概...

STM32 庫開發 位址對映

1.stm32有ahb,apb2,apb1匯流排。其中apb2外設位址空間是從0x40010000至0x40013fff位址。第乙個位址稱為基位址。gpio typedef gpiox gpiox gpioa gpiox crl 0xffffffff 3.配置gpio的暫存器要開啟外設時鐘!區別於5...