編寫自己的庫函式
.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...