1. 程式人生 > >STM8S自學筆記之利用庫函式點亮一個LED

STM8S自學筆記之利用庫函式點亮一個LED

  1. 準備工作及前提
    a、已安裝IAR或者STVD
    b、下載標準韌體庫(StdPeriph_Lib_V2.1.0)備用;
    c、已建立好一個程式模板,如未建立請參考我的部落格中的帖子STVD+STM8官方韌體庫建立工程模板
    d、(非必要)已下載STM8s庫函式所在的程式版手冊;
    e、(非必要)Flash Loader Demonstrator,這是ST的ISP燒寫,對於STM8只有支援BootLoader的才行,STM8SF103本身木有BootLoader,需要自己寫故而此處只是提及,但不要求,後期學習時再更新,但還是裝上較好,因為要是後期我更新了呢。

  2. 使用軟體
    STVD(全稱ST Visual Develop)——程式設計使用;
    stm8slib(使用手冊程式版) ——查詢庫函式及庫函式的呼叫方法;
    STVP(全稱ST Visual Programmer)——燒錄程式;

  3. 開始
    1)模板準備工作
    a、複製程式模板,並重命名資料夾為LED,這樣既保留了程式模板,又便於後期開發其他專案時不用再重新一步一步執行建立模板時的必要過程,節省時間;
    b、開啟STVD後,選擇File->Open Wodkspace,選中LED模板Cosmic下的Demo.stw開啟即可,但還不忙寫自己所要實現的任何功能的函式;
    c、為自己的主函式檔案開始處新增塊註釋資訊如下,完成後點選左側方塊收起塊(如圖)註釋,方便管理和修改:
    /**********************************************
    ** 檔名    :  main.c
    ** 作       者 :  Killer
    ** 建立日期 :  2017.12.16
    ** 版       本 :  V0.1
    ** 功能描述 :  ANSI C.主函式呼叫其他函式實驗點
    **                    亮LED或者熄滅LED.
    **********************************************

    /這裡寫圖片描述

    d、編譯模板,沒有錯誤時,開始新增自己要實現的功能程式碼。


    2)功能實現
    3.2.1、理清點亮LED邏輯思路
    a、LED的亮滅是由LED所在GPIO埠引腳輸出高低電平來實現;
    b、根據電路接法選擇GPIO埠、或者引腳工作模式、電平翻轉速率;
    c、(非必要)可以在初始化埠前將對應GPIO埠暫存器恢復到預設值。
    注意:此處埠是指如GPIOA、GPIOB等,由8位(或者說8個引腳)組成,如51微控制器的P0、P1等;而GPIO埠引腳、GPIO引腳、引腳則是這些埠的某一個引腳,如51微控制器的P0.0,P1.1等,此處可以理解為GPIOA.0 GPIOB.2等;

    3.2.2、根據思路在stm8s_gpio.c檔案中查詢響應函式


    a、經檢視檔案可將對應高低電平輸出到引腳的函式原型如下:
    void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal);
    void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
    void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
    void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
    引數解釋如下
    GPIO_TypeDef* GPIOx:埠型別引數為GPIOA、GPIOB等具體埠;
    uint8_t PortVal:8位二進位制組成的一個埠值,每一位操作一個引腳;
    GPIO_Pin_TypeDef PortPins:引腳型別資料,具體為GPIO_Pin_0~GPIO_Pin_7,神奇的是庫函式還讓你一次性操作高四位或者第四位引數為GPIO_PIN_LNIB(低四位),GPIO_PIN_HNIB(高四位),全部8位就是GPIO_PIN_ALL。


    3.2.3、初始化LED所在引腳
    繼續查詢stm8s_gpio.c,並找到類似Init字樣即可,其中Init是Initialize的縮寫。
    void GPIO_DeInit(GPIO_TypeDef* GPIOx);
    void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode);
    其中第一個為恢復到預設值(De【fault】)的初始化;第二個則是對應引腳的初始化;


    3.2.4、使用程式辦庫函式使用手冊配置GPIO引腳
    a、執行這裡寫圖片描述


    b、選擇庫函式功能及配置
    這裡寫圖片描述


    圖中手繪步驟數字描述:
    1步:選擇對應功能的庫函式;
    2~4步:選擇該庫函式的對應引數,例如本函式GPIO_Init:
    第一個引數為步驟2的LED所在埠;
    第二個引數為步驟3的對應LED在埠中所在引腳;
    第三個引數為該引腳工作模式選擇;
    5步,將所選引數生成程式碼;
    6步:將生成的程式碼剪下至系統剪貼簿,在STVD或其他IDE中貼上即可。

  4. 總體程式碼實現
    這裡寫圖片描述

  5. 總結
    對於GPIO操作時須有如下步驟,即使是STM32、STC15等微控制器,不論是庫函式還是暫存器亦是如此:
    1、初始化埠
    2、初始化所在引腳並設定翻轉速度、工作模式,如:開漏/推輓、輸入/輸出;
    3、對埠或者指定引腳寫入資料;