在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 為什么要學STM32?答案就在這里

            為什么要學STM32?答案就在這里

            作者: 時間:2018-10-22 來源:網(wǎng)絡 收藏

              為什么要學?

            本文引用地址:http://www.biyoush.com/article/201810/393174.htm

              是32位的卻只要八位的價格,速度也是八位的好幾倍。

              更重要的是它作為ARM入門級的芯片比較容易掌握,網(wǎng)上資料也很多,很多人都在用。

              的IO端口有7個寄存器來控制,但是我們常用的就4個CRL CRH IDR ODR 。

              端口配置低寄存器(GPIOx_CRL)

              端口配置高寄存器(GPIOx_CRH)

              端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)

              端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)

              其中CRL 控制高8位的 IO CRH 低8這兩個實質是一樣的。

              對照我們AVR來看GPIOx_CRL就相當于DDRx ,GPIOx_ODR就相當于PORTx,GPIOx_ODR就相當于PINxSTM32的 IO 口可以由 口可以由 軟件配置成 軟件配置成 軟件配置成 8種模式: 種模式:



              1、輸入浮空

              2、輸入上拉

              3、輸入下拉

              4、模擬輸入

              5、開漏輸出

              6、推挽輸出

              7、推挽式復用功能

              8、開漏復用功能

              簡單的來說STM32的CRL寄存器可以設置輸入、輸出模式,還可以設置輸出的最大速率。

              輸入浮空 :既不是上拉也不是下拉輸入。

              開漏模式和推挽模式:弱上拉和下拉電阻被禁止,開漏模式時,讀輸入數(shù)據(jù)寄存器時可得到I/O口狀態(tài),推挽模式時,讀輸出數(shù)據(jù)寄存器時可得到最后一次寫的值,模擬輸入配置。弱上拉和下拉電阻被禁止讀取輸入數(shù)據(jù)寄存器時數(shù)值為’0’。

              好接下來要說下一個常常聽到的控制方法了,直接操作寄存器和庫函數(shù)方法直接操作寄存器就是直接對CRL等寄存器寫值。庫函數(shù)是ST官方吧所有的控制都寫好了,我們只需要調用。直接操作寄存器

              GPIOA-CRH=0XFFFFFFF0;

              GPIOA-CRH|=0X00000003;/PA8 推挽輸出

              GPIOA-ODR|=18; /PA8 輸出高

              庫函數(shù)

              GPIO_InitTypeDef GPIO_InitStruct;

              GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12 ;

              GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;

              GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;

              GPIO_InitStruct.GPIO_Speed =GPIO_Speed_Level_3;

              GPIO_Init(GPIOA, GPIO_InitStruct);

              GPIO_SetBits(GPIOA, GPIO_Pin_11 | GPIO_Pin_12 );

              現(xiàn)在寫一個LED的初始化

              直接操作寄存器

              /LED IO初始化

              void LED_Init(void)

              {

              RCC-APB2ENR|=12; /使能PORTA時鐘

              GPIOA-CRH=0XFFFFFFF0; /PA8 推挽輸出

              GPIOA-CRH|=0X00000003;/速率

              GPIOA-ODR|=18; /PA8 輸出高 一開始高滅燈

              }

              注:先要使能PORTA時鐘

              庫函數(shù)

              void LED_Init(void)

              {

              GPIO_InitTypeDefGPIO_InitStructure; /聲明結構體ST庫

              RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/使能PA端口時鐘

              GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;/LED0--PA.8 端口配置

              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽輸出

              GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /速率

              GPIO_Init(GPIOA, GPIO_InitStructure); /結構體初始化

              GPIO_SetBits(GPIOA,GPIO_Pin_8);/PA.8 輸出高

              }

              OK到這兩種方法的初始化都OK了

              main 函數(shù)

              int main(void)

              {

              SystemInit(); /系統(tǒng)時鐘初始化為72M SYSCLK_FREQ_72MHz

              delay_init(72); /延時函數(shù)初始化

              NVIC_Configuration(); /設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級

              LED_Init(); /LED端口初始化

              while(1)

              {

              LED0=0;/也可以使用 (庫)GPIO_ResetBits(GPIOA,GPIO_Pin_8);

              /寄存器GPIOA-ODR=~(18);

              delay_ms(300);

              LED0=1; /也可以使用 GPIO_SetBits(GPIOA,GPIO_Pin_8);

              /寄存器 GPIOA-ODR|=18;

              delay_ms(300);

              }

              }

              使能PORTA時鐘,這里說明下STM32的時鐘樹和AVR51等有很大的區(qū)別,它每個外設都會有自己的時鐘,要使用一個外設必須要先開外設的時鐘。這樣也一定程度上減少了功耗。



            關鍵詞: STM32 單片機

            評論


            相關推薦

            技術專區(qū)

            關閉