0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

學(xué)STM32對你來說有什么好處

GReq_mcu168 ? 來源:未知 ? 作者:胡薇 ? 2018-10-25 09:06 ? 次閱讀

STM32是32位的單片機(jī)卻只要八位單片機(jī)的價格,速度也是八位的好幾倍。

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

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

端口配置低寄存器(GPIOx_CRL)

端口配置高寄存器(GPIOx_CRH)

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

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

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

八種模式

對照AVR來GPIOx_CRL就相當(dāng)于DDRx;GPIOx_ODR就相當(dāng)于PORTx;GPIOx_ODR就相當(dāng)于PINxSTM32的IO口;可以由軟件配置成8種模式。

輸入浮空、輸入上拉、輸入下拉、模擬輸入、開漏輸出、推挽輸出、推挽式復(fù)用功能、開漏復(fù)用功能。

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

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

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

常見控制方法

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

直接操作寄存器

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;/聲明結(jié)構(gòu)體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);/結(jié)構(gòu)體初始化

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

}

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

main函數(shù)

int main(void)

{

SystemInit();

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

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

NVIC_Configuration();/設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(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ū)別,它每個外設(shè)都會有自己的時鐘,要使用一個外設(shè)必須要先開外設(shè)的時鐘。這樣也一定程度上減少了功耗。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6040

    文章

    44594

    瀏覽量

    636963
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10915

    瀏覽量

    356786

原文標(biāo)題:為什么要學(xué)STM32?答案就在這里!

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    對于應(yīng)用級的工程師來說,學(xué)FPGA應(yīng)該注意什么?怎么學(xué)?...

    對于應(yīng)用級的工程師來說,學(xué)FPGA應(yīng)該注意什么?怎么學(xué)?學(xué)到那個層次?
    發(fā)表于 06-18 18:03

    教是最好的學(xué),相信嗎?

    的其他成員準(zhǔn)備并做個培訓(xùn)。這種方式要比聘用外部培訓(xùn)師成本更低,同時還有其他一些好處。培訓(xùn)對于學(xué)員和講師來說都有好處,可謂是一舉兩得。我記得在高中的心理學(xué)課上,老師告訴我說教是記住信息的最好方式(
    發(fā)表于 12-17 16:36

    STM32應(yīng)用的范圍哪些?學(xué)STM32從哪開始學(xué)比較好?

    STM32應(yīng)用的范圍哪些?學(xué)STM32從哪開始學(xué)比較好?
    發(fā)表于 10-18 22:43

    STM32好找工作,所以學(xué)linux終究是錯付了嗎

    。STM32的局限性不能說STM32不好,只能說局限性。STM32最大的局限性就是:它只是個單片機(jī)。也就是說,學(xué)習(xí)
    發(fā)表于 06-26 14:25

    STM32好找工作,所以學(xué)linux終究是錯付了嗎

    STM32的局限性不能說STM32不好,只能說局限性。STM32最大的局限性就是:它只是個單片機(jī)。也就是說,學(xué)習(xí)
    發(fā)表于 07-11 10:46

    孩子學(xué)單片機(jī)的好處

    孩子學(xué)單片機(jī)的好處,很多初學(xué)者有這樣的困惑,單片機(jī)初學(xué)者感覺入門很難,學(xué)著學(xué)著,就會產(chǎn)生這樣的疑問——自己辛辛苦苦學(xué)習(xí)單片機(jī),將來有用嗎?單片機(jī)只是一個工具,重要的還是思想,了自己
    發(fā)表于 07-16 07:05

    學(xué)51單片機(jī)什么好處?

    學(xué)51單片機(jī)什么好處?開發(fā)板如何選購?
    發(fā)表于 07-23 13:32

    到底是學(xué)STM32還是學(xué)嵌入式linux

    01話 題經(jīng)常有大學(xué)生同學(xué)糾結(jié):我到底是學(xué)STM32還是學(xué)嵌入式linux。這個問題很多人都會有自己的看法,今天我試著從多個角度,把我了解到的事實講一下,希望對大家有所啟發(fā)。STM3202ST
    發(fā)表于 02-07 07:06

    學(xué)stsw-stm32102講解

    學(xué)stsw-stm32102講解,很好的資料下載吧。
    發(fā)表于 01-13 16:08 ?0次下載

    是先學(xué)STM8 還是學(xué)STM32?

    是先學(xué)STM8,還是學(xué)STM32
    的頭像 發(fā)表于 03-04 11:05 ?4211次閱讀

    PCBA打樣對整個生產(chǎn)什么好處

    PCBA打樣對于整個生產(chǎn)來說什么好處?這里長科順科技給您分析一下。
    發(fā)表于 08-27 09:27 ?893次閱讀

    micropython支持stm32型號_先學(xué)STM8,還是學(xué)STM32?

    STM32之間有些什么差異,包括MCU基本信息、開發(fā)難度、以及應(yīng)用場景等。站在客觀的角度來說,STM8比STM32學(xué)起來更容易,C語言功底還不錯的朋友,直接上STM32也不是問題。從
    發(fā)表于 12-29 19:26 ?0次下載
    micropython支持<b class='flag-5'>stm32</b>型號_先<b class='flag-5'>學(xué)</b>STM8,還是<b class='flag-5'>學(xué)</b><b class='flag-5'>STM32</b>?

    micropython支持stm32型號_先學(xué)STM8,還是學(xué)STM32

    朋友問:我學(xué)習(xí)過51,接下來我是先學(xué)習(xí)STM8,還是STM32呢?01寫在前面物聯(lián)網(wǎng)STM32入門 - 直播課程 - 創(chuàng)客學(xué)院?www.makeru.com.cn想要明白這個問題,其實就需要明白
    發(fā)表于 12-31 19:28 ?1次下載
    micropython支持<b class='flag-5'>stm32</b>型號_先<b class='flag-5'>學(xué)</b>STM8,還是<b class='flag-5'>學(xué)</b><b class='flag-5'>STM32</b>?

    懂精通STM32的含金量嗎?

    懂精通ARM的含金量嗎?懂精通STM32的含金量嗎?不管懂不懂都要懂,趕緊學(xué)。
    的頭像 發(fā)表于 04-19 09:13 ?1888次閱讀

    想在STM32 MCU上部署機(jī)器學(xué)習(xí)模型?這份入門教程,讓學(xué)就會~

    想在STM32 MCU上部署機(jī)器學(xué)習(xí)模型?這份入門教程,讓學(xué)就會~
    的頭像 發(fā)表于 10-18 17:45 ?4738次閱讀
    想在<b class='flag-5'>STM32</b> MCU上部署機(jī)器學(xué)習(xí)模型?這份入門教程,讓<b class='flag-5'>你</b>一<b class='flag-5'>學(xué)</b>就會~