新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM8學習筆記(一):GPIO

        STM8學習筆記(一):GPIO

        作者: 時間:2016-11-24 來源:網絡 收藏
        昨天晚上焊好了一塊STM8最小系統板,能跑,能下載

        晚上弄了一晚上。。。什么也沒有收獲

        本文引用地址:http://www.104case.com/article/201611/320895.htm

        可能受STM32的影響,一直想用它本身的庫,結果一直郁悶了半天

        不行,不用它本身的庫

        上網看了下一個操作LED的例程

        自己看了下幾個GPIO的寄存器

        主要有下面幾個

        1、端口 x 輸出數據寄存器 (Px_ODR)

        在輸出模式下,寫入寄存器的數值通過鎖存器加到相應的引腳上。讀ODR寄存器,返回之前鎖存的寄存器值。
        在輸入模式下,寫入ODR的值將被鎖存到寄存器中,但不會改變引腳狀態。ODR寄存器在復位后總是為0。位操作指令(BSET, BRST) 可以用來設置DR寄存器來驅動相應的引腳,但不會影響到其他引腳。

        2、端口 x 輸入寄存器 (Px_IDR)

        IDR[7:0]:端口輸入數據寄存器位
        不論引腳是輸入還是輸出模式,都可以通過該寄存器讀入引腳狀態值。該寄存器為只讀寄存器。
        0:邏輯低電平
        1:邏輯高電平

        3、端口 x 數據方向 (Px_DDR)

        這些位可通過軟件置1或置0,選擇引腳輸入或輸出
        0: 輸入模式
        1: 輸出模式

        4、端口 x 控制寄存器 1 (Px_CR1)

        在 輸入模式時(DDR=0):
        0:浮空輸入
        1::帶上拉電阻輸入
        在 輸出模式時(DDR=1):
        0:模擬開漏輸出(不是真正的開漏輸出)
        1: 推挽輸出, 由CR2相應的位做輸出擺率控制

        5、端口 x 控制寄存器 2 (Px_CR2)在 輸入模式時(DDR=0):

        0: 禁止外部中斷
        1: 使能外部中斷
        在 輸出模式時(DDR=1):
        0:輸出速度最大為2MHZ.
        1:輸出速度最大為10MHZ

        我用的IDE是STVD,新建工程后,把STM8S208R.h的庫文件放在剛剛新建的文件里

        下面就是編程了

        這個是我寫的代碼。。。。比較爛

        ///////////////////////////////////////////////////////////

        /*============================================================================*/
        /* PROJECT: LED Control by timer OC */
        /* MODULE: main.c */
        /* COMPILER: STM8 Cosmic C Compiler */
        /* DATE: Feb 2009 */
        /*----------------------------------------------------------------------------*/
        /* DESCRIPTION: Demonstration firmware for STM8 Mini Kit */
        /* Control LED blink, on/off/, brightness. */
        /*============================================================================*/
        /******************************************************************************
        *
        * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
        * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
        * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
        * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
        * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
        * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
        *
        * COPYRIGHT 2008 STMicroelectronics
        ******************************************************************************
        */

        /* Includes ------------------------------------------------------------------*/
        #include "stm8s208r.h" /* Registers and memory mapping file. */

        /******************************************************************************/
        /* Function definitions */
        /******************************************************************************/
        /* -------------------------------------------------------------------------- */
        /* ROUTINE NAME: GPIO_Init */
        /* INPUT/OUTPUT: None. */
        /* DESCRIPTION: Initialize GPIOs. */
        /* IN: None. */
        /* OUT: None. */
        /* -------------------------------------------------------------------------- */
        void GPIO_Init(void)
        {
        /* LED IO Configuration */
        /* LD3: PD3 */
        /* LD2: PD1 */
        /* LD1: PD0 */
        PD_DDR |= 0xFF; /* Output. */
        PD_CR1 |= 0xFF; /* PushPull. */
        PD_CR2 = 0x00; /* Output speed up to 2MHz. */
        PD_ODR |= 0x55;//IO口要輸出的數據
        }
        /* -------------------------------------------------------------------------- */
        /* ROUTINE NAME: CLK_Init */
        /* INPUT/OUTPUT: None. */
        /* DESCRIPTION: Initialize the clock source */
        /* -------------------------------------------------------------------------- */
        void CLK_Init(void)
        {
        /* Configure HSI prescaler*/
        CLK_CKDIVR &= ~0x10; /* 01: fHSI= fHSI RC output/2. */

        /* Configure CPU clock prescaler */
        CLK_CKDIVR |= 0x01; /* 001: fCPU=fMASTER/2. */
        }
        /* -------------------------------------------------------------------------- */
        /* ROUTINE: main */
        /* main entry */
        /* -------------------------------------------------------------------------- */
        void main ( void )
        {
        while(1)
        {
        CLK_Init();
        GPIO_Init();
        }
        }
        /*---------------------------- End of file -----------------------------------*/

        ////////////////////////////////////////////////////////////////

        這個只是實現很簡單的功能

        路漫漫其修遠兮,路還長著呢



        關鍵詞: STM8學習筆記GPI

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 岚皋县| 广平县| 浙江省| 万源市| 德化县| 望奎县| 墨脱县| 安国市| 绥中县| 会昌县| 高州市| 大荔县| 新竹市| 曲阳县| 崇文区| 库尔勒市| 博客| 岚皋县| 察雅县| 通江县| 新郑市| 安徽省| 阿勒泰市| 吴旗县| 休宁县| 紫云| 松潘县| 宁海县| 河西区| 青神县| 峡江县| 玛沁县| 桐乡市| 上林县| 共和县| 定兴县| 义乌市| 星子县| 石门县| 屯门区| 怀柔区|