新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32F10XX之應用筆記-GPIO設置

        STM32F10XX之應用筆記-GPIO設置

        作者: 時間:2016-11-11 來源:網絡 收藏
        STM32F10XX會根據封裝不同而引腳數不同;36腳(A 半B)48腳(A B) 64腳(ABC) 100腳(ABCDE) 144腳(ABCDEFG);STM32F10XX最多就是有7組16位的IO口;當然IO口越多能完成的功能就越多,能完完全全發揮STM32F10XX所有外設功能的只有144腳封裝。
        ST公司為STM32系列的芯片編寫了固件庫,給我們開發帶來了很多方便;所以大家都覺得它好用,最重要的原因就是這了。但是要完全玩透它還是得去看看底層是怎么設置寄存器的,這對我們完成某個功能有更深刻的了解。
        首先從設置GPIO開始,要使用一個IO口得有兩個過程:一是使能IO口組的時鐘;二是設置IO口的方向。牽扯到的寄存器有CCR_APBXENR,GPIOX_CRL,GPIOX_CRH,GPIOX_IDR,GPIOX_ODR,GPIOX_BSRR,GPIOX_BRR。ST公司已經把這些宏定義已經做好了,相應的名字對應的就是寄存器的名字。做過RAM9開發的都知道宏定義一邊都是這樣的:
        #define REGXXXXX (*(volatile 數據類型*)(數據類型)0xXXXXXXXXXX))
        但是呢,用STM32開發時這些在頭文件里已經做好了(stm32f10x.h)。我就以GPIOA的Pin_0作為輸出引腳為例:
        庫函數:
        void GPOIA_CONFIG(void)
        {
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //開啟GPIOA的時鐘
        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        }
        寄存器:
        CCR->APB2ENR
        GPIOA->CRL
        void GPOIA_CONFIG(void)
        {
        CCR->APB2ENR |=(1<<2);//開啟GPIOA的時鐘
        GPIOA->CRL &=0XFFFFFFF0;
        GPIOA->CRL |=0X000000003;//Pin_0推挽輸出
        }
        一看都會覺得寄存的簡單;庫函數更好讀也更讓別人理解;這就仁者見仁智者見智了,我自己還是更喜歡寄存器,因為保密性要好些(庫函數只要是編過程的一眼就讀懂了),當然是團隊合作肯定要用庫函數咯。


        關鍵詞: STM32F10XXGPIO設

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 长武县| 故城县| 肇东市| 泸定县| 齐河县| 黄山市| 聂荣县| 红桥区| 宝丰县| 高州市| 唐山市| 青冈县| 仙游县| 平和县| 醴陵市| 海丰县| 堆龙德庆县| 北川| 特克斯县| 竹北市| 龙门县| 萍乡市| 环江| 米易县| 巴林右旗| 且末县| 临邑县| 定日县| 栾川县| 宁夏| 平阴县| 东安县| 天台县| 普兰县| 贡山| 仪征市| 开化县| 剑河县| 宁陕县| 尉犁县| 尖扎县|