新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stm32學習之三

        stm32學習之三

        作者: 時間:2016-12-03 來源:網絡 收藏
        1、GPIOLED燈的點亮程序:

        GPIO的功能是多樣的,驅動LED燈,獲得按鍵的輸入信息……。

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

        對于驅動LED燈,按照上面就需要對GPIO進行配置。

        基本知識掌握:

        2013年4月24日:
        下午:
        stm32學習的原因:
        1、從內核上:一般人開始學習的時候,都是從arm7開始的,但是自從stm32開發板出現后,就發現了人們更多的在
        使用了stm32了。
        2、從用途上:stm32微控制器工業控制上、消費電子、手持設備、汽車電子、安防監控等眾多領域得到廣泛的
        應用,而且其高性價比,適合手工DIY的優點。

        arm7與stm32的比較:
        Cortext-32的速度比arm7塊三分之一,功耗低四分之一,并且能夠實現更小芯片面積,利于將更多功能整合在更小的
        芯片尺寸中。cortex-m3處理器結合了執行Thumb-2指令的32為哈佛微體系結構和系統外設,包括Nested Vec-tored interrupt
        Controller和Arbiter總線。、
        在工控領域,用戶要求具有更快的中斷速度,cortex-m3采用了Tail-Chaining中斷技術,完全基于硬件進行中斷處理,
        最多可減少12個時鐘周期數,在實際應用中可減少百分之七十的中斷數目。

        了解AVR:
        AVR可以說是一款很成功的一款芯片,功耗低,性能強。較之前的51,性能提高了好幾個檔次。AVR的外設很豐富,一般的
        項目都能滿足。
        但是自從STM32出現之后,AVR就"退出江湖了"。
        因為它跟stm32是沒法比的。

        3、使用方便:
        1、支持串口下載
        2、所有的IO端口都可以產生中斷
        3、技術資料多
        4、支持SWD下載
        5、復用IO口重映射功能

        注意:
        編譯軟件:
        1、MDK還是IAR?
        一般的都是使用的MDK
        2、固件庫還是寄存器?
        一般的都要用,都要學。

        IAR占的編譯代碼速度,占的flash等等都是比MDK好,但是都不是很大。
        但是一般都不用IAR
        但是:
        keil(被ARM收購了):
        1、界面友好
        2、配置簡單
        3、操作簡單

        stm32最小系統(能使單片機工作的系統):
        1、電源
        2、復位
        3、時鐘
        4、下載電路(很多人都認為這個不屬于最小系統,但是完整的還是加上的)

        主要是注意一個是時鐘。
        注意時鐘的分配,來源,幾路走出等。


        1、系統時鐘的初始化函數。
        2、延時函數的實現。
        軟件延時是比較簡單的方法,它利用CPU執行一循環語句來產生延時的效果。
        對于stm32來說,執行一條指令只有幾十個ns,進行for循環,要實現N毫秒的x值非常大,而且由于系統的頻率的
        寬廣,很難計算出延時N毫秒的精確值。
        軟件延時不占用定時器資源,但占用CPU資源,它的延時精度不高,適合應用在對延時精度不高的場合。

        十分要注意的是:

        GPIO的配置,很重要的一方面就是時鐘的給予,沒有時鐘,就算一切都配置好了,也是徒勞的。

        程序:

        LED的頭文件的相關信息:

        #ifndef _LED_H
        #define _LED_H
        #include "stm32f10x.h"

        #define ON 1
        #define OFF 0

        #define LED1(a) if (a)
        GPIO_ResetBits(GPIOC,GPIO_Pin_3);
        else
        GPIO_SetBits(GPIOC,GPIO_Pin_3)
        #define LED2(a) if (a)
        GPIO_ResetBits(GPIOC,GPIO_Pin_4);
        else
        GPIO_SetBits(GPIOC,GPIO_Pin_4)
        #define LED3(a) if (a)
        GPIO_ResetBits(GPIOC,GPIO_Pin_5);
        else
        GPIO_SetBits(GPIOC,GPIO_Pin_5)
        void LED_GPIO_Config(void);


        #endif
        這里有一個很重要的define,對于這次的程序來說,是非常小的,用到的不多的話,一般不用這樣定義的。但同時也要看到這個程序的定義

        的技巧性。

        然后寫上led.c的相關GPIO配置信息,

        #include "led.h"
        void LED_GPIO_Config(void)
        {
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

        GPIO_Init(GPIOC,&GPIO_InitStructure);

        GPIO_SetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
        }
        再個就是主程序的調用問題:

        /******************** (C) COPYRIGHT 2013**************************
        * 文件名 :main.c
        * 描述 :用3.5.0版本建的工程模板。
        * 實驗平臺:野火STM32開發板應該是STM32F103VET6
        * 庫版本 :ST3.5.0
        *
        * 作者 :wit_yuan
        * 版本 : v1.0
        * 時間 : 2013年4月27日
        **********************************************************************************/
        #include "stm32f10x.h"
        #include "led.h"
        void delay(__IO uint32_t time);
        /*
        * 函數名:main
        * 描述 : 主函數
        * 輸入 :無
        * 輸出 : 無
        */
        int main(void)
        {
        LED_GPIO_Config();
        LED1(ON);
        delay(0x0FFFFFFF);
        LED1(OFF);
        }
        void delay(__IO uint32_t time)
        {
        for(;time>0;time--);
        }

        需要注意的是,時鐘給予的是72MHZ,那么這個程序延時的話,應該是30多秒。結果證明也是差不多時間。


        注意:

        由于用到了時鐘的相關配置,因此需要加上頭文件的。

        #include "stm32f10x_rcc.h"



        關鍵詞: stm32GPI

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 武夷山市| 衡阳市| 固阳县| 文昌市| 山西省| 屏东市| 繁昌县| 南阳市| 湘乡市| 涪陵区| 兰州市| 锡林郭勒盟| 中超| 二连浩特市| 黔江区| 罗平县| 恩平市| 六枝特区| 久治县| 长葛市| 福安市| 彩票| 台北市| 开平市| 漳平市| 本溪市| 布拖县| 龙游县| 富源县| 南开区| 长汀县| 普定县| 东丽区| 嘉善县| 平果县| 凤庆县| SHOW| 哈巴河县| 都安| 界首市| 博湖县|