新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32學習筆記——控制GPIO輸出點亮LED燈

        STM32學習筆記——控制GPIO輸出點亮LED燈

        作者: 時間:2016-11-28 來源:網絡 收藏

        具體編程:

        新建工程并設置好環境,添加c文件,鍵入如下程序:

        //**********************************************

        //*通過直接操作存儲器控制GPIO輸出點亮LED燈*

        //* LED1=GPIOC_Pin6;*

        //* LED2=GPIOC_Pin7;*

        //* LED3=GPIOC_Pin8;*

        //* LED4=GPIOC_Pin9;*

        //* ------------------Sah_Pah----------------- *

        //**********************************************

        #include

        //定義各寄存器地址

        #define GPIOC_CRL(* (volatile unsigned long *)(0x40011000))

        #define GPIOC_CRH(* (volatile unsigned long *)(0x40011004))

        #define GPIOC_ODR(* (volatile unsigned long *)(0x4001100C))

        #define GPIOC_BSRR (* (volatile unsigned long *)(0x40011010))

        #define GPIOC_BRR(* (volatile unsigned long *)(0x40011014))

        #define RCC_APB2ENR (*(volatile unsigned long *)(0x40021018))

        //設置GPIOC_Pin6,Pin7,Pin8,Pin9為推挽輸出模式,最大速度50MHz

        #define _GPIOC_CRL 0x33000000

        #define _GPIOC_CRH 0x00000033

        void delay(void);

        void main(void)

        {

        volatile int i;

        //使能APB2的PORTC時鐘

        RCC_APB2ENR |=(1<<4);

        //設置GPIOC_Pin6,Pin7,Pin8,Pin9為推挽輸出模式,最大速度50MHz

        GPIOC_CRL = _GPIOC_CRL;

        GPIOC_CRH = _GPIOC_CRH;

        while(1)

        {

        delay();

        //利用端口位復位寄存器BRR清除GPIOC各端口的ODR位為0

        GPIOC_BRR=0xFFFF;

        delay();

        //利用端口位設置/復位寄存器BSRR將P6、P7、P8、P9口置1,點亮LED燈

        GPIOC_BSRR=0x000003C0;

        delay();

        //重復三次,偷懶就不寫循環了

        GPIOC_BRR=0xFFFF;

        delay();

        GPIOC_BSRR=0x000003C0;

        delay();

        GPIOC_BRR=0xFFFF;

        delay();

        GPIOC_BSRR=0x000003C0;

        delay();

        GPIOC_BRR=0xFFFF;

        //利用端口輸出數據寄存器ODR進行流水燈循環

        for(i=0;i<3;i++)

        {

        //P6腳置1

        GPIOC_ODR=0x0040;

        delay();

        //清0

        GPIOC_ODR=0x0000;

        //P7腳置1

        GPIOC_ODR=0x0080;

        delay();

        GPIOC_ODR=0x0000;

        //P8腳置1

        GPIOC_ODR=0x0100;

        delay();

        GPIOC_ODR=0x0000;

        //P9腳置1

        GPIOC_ODR=0x0200;

        delay();

        }

        }

        }

        //定義延遲函數

        void delay(void)

        {

        unsigned long j,n=100000;

        while(n--)

        {

        j=12;

        while(j--);

        }

        }

        最終結果:

        保存編譯后,將程序燒寫到開發板上,板上四個LED等閃爍三次后以流水燈形式循環三次。

        三.參考文獻

        [1]半壺水,《STM32菜鳥學習手冊-羅嗦版》, http://wenku.baidu.com/view/fc7c7d20ccbff121dd3683da.html, 2012-08-19.

        [2]電腦圈圈.自己動手創建一個基于萬利STM32板的IAR工程[EB/OL].http://blog.21ic.com/user1/2198/archives/2008/48929.html ,2008-07-02/2012-08-19.

        [3]Changing.用stm32點個燈[操作寄存器+庫函數][EB/OL]. http://www.ichanging.org/stm32_gpio_led.html,2012-06-29/2012-08-19.



        上一頁 1 2 3 下一頁

        關鍵詞: STM32學習筆記控制GPI

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 南通市| 离岛区| 龙山县| 阳曲县| 儋州市| 保定市| 余姚市| 巴东县| 扶绥县| 仁化县| 黄石市| 河南省| 许昌县| 兰溪市| 巫溪县| 神农架林区| 渝北区| 南康市| 丰原市| 晋江市| 农安县| 江津市| 株洲市| 武安市| 桑植县| 曲阳县| 安阳市| 江川县| 洮南市| 大渡口区| 土默特左旗| 廉江市| 沙田区| 东海县| 修武县| 商河县| 新昌县| 淮安市| 伊金霍洛旗| 淅川县| 霍邱县|