新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32學習筆記(1):GPIO口的使用

        STM32學習筆記(1):GPIO口的使用

        作者: 時間:2016-11-28 來源:網絡 收藏
        摸索了很久之后終于把ARM開發板上的LED燈點亮了,雖然是很簡單的一個IO口操作,但是由于以前從來都沒有什么經驗,所以浪費了很多時間,也查找了很多資料。現在可以操作IO口了,證明邁出了學習ARM的第一步。

        實驗平臺清單如下:

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

        開發板:奮斗STRIVE V3

        核心芯片:STM32F103VET6

        開發環境:RealView MDK-ARM Version:3.50

        PC操作系統:Windows 7家庭普通版

        仿真器:SEGGER J-Link

        其中,STM32F103VET6芯片是基于ARM Cortex-M3內核的,具體技術參數請參考ST公司給出的芯片資料(http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00191185.pdf

        )。關于該芯片的其他資料,可以在

        http://www.st.com/cn/mcu/product/164491.jsp

        上找到。如果對RealView MDK不熟悉的話,可以參考ARM RealView系列叢書《ARM開發工具RealView MDK使用入門》,李寧編著,北京航空航天大學出版社出版。如果對于STM32不熟悉的話,可以參考ARM RealView MDK系列叢書《基于MDK的STM32處理器開發應用》,李寧編著,北京航空航天大學出版社出版。

        當軟硬件平臺都準備好之后,就可以開始新的工程了。對于一個初學者來說,新建一個可以運行的工程其實是有難度的,因為根本不知道從何下手。因此,我將每一步細節都描述出來,以便于即使是初學者也能很好的理解ARM的初級操作。

        打開MDK開發平臺,在菜單欄中單擊“Project - New μVision Project”創建一個新的工程。然后在彈出的“Select Device for Target 1”對話框中選擇合適的芯片。由于我采用的是STM32F103VET6,所以選擇ST – STM32F103VE。

        選擇好芯片之后,會彈出一個消息框,“Copy STM32 Startup Code to Project Folder and Add File to Project?”問你是否需要加載啟動代碼。選擇“是”后進入工程。

        所謂啟動代碼,就是處理器在啟動的時候執行的一段代碼,主要任務是初始化處理器模式,設置堆棧,初始化變量等等。由于以上的操作均與處理器體系結構和系統配置密切相關,所以一般由匯編來編寫。而對于初學者而言,自己設計啟動代碼有一定的難度,MDK開發平臺內置了一些常用芯片的啟動代碼,因此在新建工程的時候,最好是采用默認的啟動代碼。當然,芯片制造廠商也會自己編寫一些啟動代碼,放在官網上供開發者下載。

        進入工程之后,我們就可以開始寫代碼了。首先得新建一個文件,然后將其保存成為*.c的格式,這樣開發環境就可以識別出編寫的代碼里面一些常用的關鍵字和其他信息了。我就直接保存成為main.c。然后在屏幕左邊的Project Workspace中的Source Group 1單擊右鍵,選擇Add Files to Group “ Source Group 1”,將我們剛剛保存起來的main.c添加到Source Group 1中,或者直接雙擊Source Group 1,也可以添加文件。

        接下來就可以開始寫代碼了,對于初學者而言,最基礎的操作應該是對芯片IO口的操作了。因此我在學習ARM的時候,第一個工程就選擇了讓開發板上的3個LED燈順序點亮。STM32F103VET6中一共有A-G共7組通用輸入輸出接口(General-Purpose Inputs/Outputs),每個GPIO引腳都可以由軟件配置成輸出(推挽或開漏)、輸入(帶或不帶上拉或下拉)或復用的外設功能端口。多數GPIO引腳都與數字或模擬的復用外設共用。具體的細節請參考Datasheet。在《基于MDK的STM32處理器開發應用》一書中,“7.1通用IO端口”詳細描述了各個端口的功能、寄存器格式以及其他相關信息,因此就不在這里贅述了。

        回到MDK開發平臺,現在要在main.c中加入相關代碼了。代碼清單如下:

        #include "stm32f10x_lib.h"

        int main()

        {

        int i;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB, ENABLE);//開啟外設時鐘

        GPIOD->CRL = 0x33333333;//設置端口配置寄存器

        GPIOB->CRL = 0x33333333;

        while(1)

        {

        GPIOD->ODR = 0xffffffbf;//設置端口輸出寄存器

        for(i=0;i<1000000;i++);//延時

        GPIOD->ODR = 0xffffffff7;

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

        GPIOD->ODR = 0x00000000;

        GPIOB->ODR = 0xffffffff;

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

        GPIOB->ODR = 0x00000000;

        }

        }

        上述代碼中,#include "stm32f10x_lib.h"包含了開發stm32f10x系列芯片所需的基本頭文件,在進行程序編寫的時候,務必要包含此頭文件。


        上一頁 1 2 下一頁

        關鍵詞: STM32學習筆記GPIO

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 连云港市| 汤阴县| 宜昌市| 伊春市| 怀远县| 宁南县| 盱眙县| 梧州市| 龙胜| 保德县| 鱼台县| 白朗县| 丰台区| 阳曲县| 乐亭县| 贵州省| 柯坪县| 德江县| 绵阳市| 邵阳市| 三门县| 北宁市| 托克逊县| 万载县| 元氏县| 三原县| 光泽县| 积石山| 新乡县| 屏东县| 奉新县| 青铜峡市| 新建县| 兴海县| 博兴县| 扶风县| 宁城县| 海门市| 常山县| 恩施市| 肇庆市|