新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32學習筆記——使用函數庫編程控制GPIO口輸出

        STM32學習筆記——使用函數庫編程控制GPIO口輸出

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

        2.1.7GPIO_Write函數

        函數名

        GPIO_Write

        函數原型

        voidGPIO_Write(GPIO_TypeDef* GPIOx,u16 PortVal)

        功能描述

        寫數據到指定的GPIO端口數據寄存器

        輸入參數1

        GPIOx:x=A…E

        輸入參數2

        PortVal:寫入到數據端口寄存器的值

        輸出參數

        返回參數

        前提條件

        調用函數

        實例:

        [cpp]view plaincopy
        1. GPIO_Write(GPIOA,0x1101);

        2.2 完整程序:

        [cpp]view plaincopy
        1. #include"stm32f10x.h"
        2. voiddelay(void);
        3. voidGPIO_Configuration(void);
        4. intmain(void)
        5. {
        6. //使能GPIOC時鐘
        7. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
        8. //此條語句一定要在時鐘使能后,否則無效(費了好多時間才找到原因)
        9. GPIO_Configuration();
        10. while(1)
        11. {
        12. //利用GPIO_SetBits函數與GPIO_ResetBits函數點亮與熄滅led
        13. GPIO_ResetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_9);
        14. GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_8);
        15. delay();
        16. GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_8);
        17. GPIO_SetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_9);
        18. delay();
        19. //利用GPIO_Write函數點亮與熄滅led
        20. GPIO_Write(GPIOC,0x0140);
        21. delay();
        22. GPIO_Write(GPIOC,0x0280);
        23. delay();
        24. }
        25. }
        26. //GPIO口設置
        27. voidGPIO_Configuration(void)
        28. {
        29. //聲明結構體
        30. GPIO_InitTypeDefGPIO_InitStructure;
        31. //設置選擇引腳
        32. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
        33. //設置引腳最大輸出頻率
        34. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        35. //設置引腳輸出模式
        36. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        37. 根據設置的InitStructure初始化GPIO口
        38. GPIO_Init(GPIOC,&GPIO_InitStructure);
        39. }
        40. voiddelay(void)
        41. {
        42. unsignedlongj,n=100000;
        43. while(n--)
        44. {
        45. j=12;
        46. while(j--);
        47. }
        48. }


        編譯通過燒寫到開發板上后,最終結果是:led1和led3與led2和led4兩兩交替亮滅。

        參考文獻

        [1]jhliuzj.IAR FOR ARM6.20工程創建建議(固件庫為3.5)[EB/OL].

        http://hi.baidu.com/jhliuzj/item/459830ae7e19e136020a4d3f,2011-10-03/2012-08-25.

        [2]kiropower.IARSTM32項目工程創建[EB/OL].http://hi.baidu.com/kiropower/item/e20faad0007502352b35c785,2011-11-10/2012-08-25.

        [3]gasbi.startup_stm32f10x_xx.s啟動代碼文件選擇[EB/OL].

        http://blog.csdn.net/gasbi/article/details/7545568,2012-05-08/2012-08-25.

        [4]IAR Systems AB.Releasenotes for the IAR C/C++ Compiler for ARM 6.20.1[EB/OL].http://supp.iar.com/FilesPublic/UPDINFO/005832/arm/doc/infocenter/iccarm.ENU.html,2012-08-25

        [5]Changing.用stm32點個燈[操作寄存器+庫函數][EB/OL].

        http://www.ichanging.org/stm32_gpio_led.html,2012-06-29/2012-08-25.

        20120827附:
        關于標簽定義問題,由于在main函數開頭即聲明#include "stm32f10x.h",而該頭文件里又有如下代碼:
        [cpp]view plaincopy
        1. #ifdefUSE_STDPERIPH_DRIVER
        2. #include"stm32f10x_conf.h"
        3. #endif
        即當定義USE_STDPERIPH_DRIVER時,就會包含stm32f10x_conf.h,而我們在設置項目的時候,在"c/c++ compiler>define" 項中已經對其進行了預定義,所以也會自動加入stm32f10x_conf.h文件,該文件中包含了所有外設的頭文件,因此可以直接調用函數。對不需要使用的外設,可以直接在該文件中將其注釋掉,這樣在編譯的時候就不會編譯被注釋的文件。
        參考文獻:jack.stm32f10x_conf.h與stm32f10x.h(轉載)[EB/OL].http://blog.sina.com.cn/s/blog_7b93041501013o5b.html,2012-05-01/2012-08-27

        上一頁 1 2 3 下一頁

        關鍵詞: STM32函數庫編程控制GPIO

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 长沙市| 额济纳旗| 河西区| 南岸区| 进贤县| 鸡西市| 毕节市| 南和县| 方城县| 名山县| 叶城县| 阜阳市| 海伦市| 鄂尔多斯市| 六盘水市| 色达县| 渝中区| 雅安市| 寻乌县| 普安县| 吉水县| 本溪| 米易县| 九江县| 克拉玛依市| 花垣县| 吉林省| 南宫市| 从化市| 伽师县| 汝南县| 永德县| 金山区| 大英县| 常州市| 荥阳市| 德州市| 甘谷县| 喀喇沁旗| 绥化市| 正镶白旗|