stm32單片機(jī)教程 用STM32只會(huì)庫(kù)函數(shù),不會(huì)用寄存器,有影響嗎?
用STM32只會(huì)庫(kù)函數(shù),不會(huì)用寄存器,有影響嗎?不會(huì)配置STM32的寄存器,而會(huì)使用官方的庫(kù)函數(shù)是不影響使用STM32單片機(jī)的。STM32單片機(jī)在編程時(shí)即可以使用配置寄存器的方式,又可以使用庫(kù)函數(shù)的方
用STM32只會(huì)庫(kù)函數(shù),不會(huì)用寄存器,有影響嗎?
不會(huì)配置STM32的寄存器,而會(huì)使用官方的庫(kù)函數(shù)是不影響使用STM32單片機(jī)的。STM32單片機(jī)在編程時(shí)即可以使用配置寄存器的方式,又可以使用庫(kù)函數(shù)的方式,這兩種方式都是可以操作STM32單片機(jī)的。
熟悉51單片機(jī)的朋友,都知道在編寫程序時(shí),需要配置51單片機(jī)的寄存器。單片機(jī)具有很多的片上資源,而片上資源要正常工作,就需要配置相應(yīng)的寄存器。比如單片機(jī)的定時(shí)器資源,在配置定時(shí)器相關(guān)的寄存器時(shí)就是配置定時(shí)器的工作方式、位數(shù)、是否使用定時(shí)中斷、配置初始值等。
而到了STM32單片機(jī),廠家直接提供了官方庫(kù)函數(shù)。這些庫(kù)函數(shù)的作用其實(shí)就是將寄存器的配置過(guò)程封裝了起來(lái),用戶在編程的時(shí)候不需要直接和寄存器打交道,而只需要調(diào)用相應(yīng)的庫(kù)函數(shù)就可以。這樣就可以將配置寄存器的過(guò)程分離開來(lái),實(shí)現(xiàn)了硬件層面和軟件層面的簡(jiǎn)單分離,其實(shí)就是驅(qū)動(dòng)的作用。
STM32還有HAL庫(kù),即使是使用庫(kù)函數(shù)編程,還是建議研究一下寄存器。
所以,不管使用庫(kù)函數(shù),還是直接配置寄存器都是可以操作單片機(jī)的。
以上就是這個(gè)問題的回答,感謝留言、評(píng)論、轉(zhuǎn)發(fā)。更多電子設(shè)計(jì)、硬件設(shè)計(jì)、單片機(jī)等內(nèi)容請(qǐng)關(guān)注本頭條號(hào):玩轉(zhuǎn)嵌入式。感謝大家。
stm32單片機(jī)編程用庫(kù)函數(shù)好還是寄存器好?
這個(gè)問題從兩方面來(lái)說(shuō):如果希望快速開發(fā)出來(lái)項(xiàng)目的話,用庫(kù)函數(shù)開發(fā);如果希望學(xué)精、學(xué)透單片機(jī)原理的話,用寄存器開發(fā)。
一、從開發(fā)時(shí)間快慢來(lái)說(shuō),用庫(kù)函數(shù)
現(xiàn)在公司開發(fā)一個(gè)項(xiàng)目的話,都會(huì)對(duì)時(shí)間進(jìn)度有很高的要求,一般都會(huì)要求快速高效的把產(chǎn)品做出來(lái),而不管你用那種方式,只要保證產(chǎn)品的質(zhì)量就行。在這種情況下,就必須找一種能夠快速開發(fā)的途徑,而庫(kù)函數(shù)正是基于這種原因創(chuàng)建的。芯片公司為了幫助產(chǎn)品工程師降低開發(fā)難度、加快開發(fā)進(jìn)度,推出了各種庫(kù)函數(shù),這些庫(kù)函數(shù)都是由專業(yè)程序設(shè)計(jì)人員編寫的,無(wú)論從代碼的穩(wěn)定性、規(guī)范性、正確性方面來(lái)說(shuō),都是經(jīng)過(guò)芯片廠家反復(fù)驗(yàn)證的,完全可以直接拿來(lái)就用。
當(dāng)然,用庫(kù)函數(shù)有一定的缺陷,例如會(huì)導(dǎo)致代碼量增大,影響程序運(yùn)行速度等,但是現(xiàn)在stm32單片機(jī)的程序空間一般都足夠大,并且每一系列里面都有pin-to-pin的型號(hào)可以互換,如果程序空間不夠,直接替換另一個(gè)管腳兼容的,程序空間更大的即可,程序直接移植過(guò)來(lái),幾乎不用修改。
二、從原理性學(xué)習(xí)來(lái)說(shuō),用寄存器
對(duì)于想要學(xué)習(xí)單片機(jī)的工作原理,想真正弄清楚stm32的內(nèi)部結(jié)構(gòu),工作過(guò)程,底層配置這些功能的人員來(lái)說(shuō),當(dāng)然是選用寄存器來(lái)開發(fā)了。
用寄存器開發(fā),可以直接接觸到最底層的,并且用寄存器可以減少代碼量,提高程序運(yùn)行速度。
stm32是用hal庫(kù),還是標(biāo)準(zhǔn)庫(kù)?懂行的介紹一下?
標(biāo)準(zhǔn)庫(kù)函數(shù)則是ST以前推出的,包括寄存器版本和庫(kù)函數(shù)版本。寄存器版本使用較麻煩,每個(gè)設(shè)置都要去查看芯片datasheet,好處是可以讓你熟悉芯片的寄存器配置。庫(kù)函數(shù)是基于寄存器版本進(jìn)行二次封裝后
推出的,它的優(yōu)勢(shì)就是寄存器版本的劣勢(shì),方便了使用,不再需要手動(dòng)去配置寄存器,使用更方便了。但是它的劣勢(shì)就是HAL的優(yōu)勢(shì),就是每次修改MCU功能,都需要手動(dòng)去修改功能,而且自己修改也不能
保證正確性,程序代碼在不同MCU之間的移植性不強(qiáng)。
HAL庫(kù),HAL是Hardware Abstraction Layer的縮寫,中文名稱是:硬件抽象層,HAL庫(kù)工程一般使用Cube軟件來(lái)生成工程。HAL庫(kù)是ST公司為STM32的MCU最新推出的抽象層嵌入式軟件,
更方便的實(shí)現(xiàn)跨STM32產(chǎn)品的最大可移植性。優(yōu)勢(shì)就是不需要開發(fā)工程師再關(guān)注所用MCU型號(hào),只需要專注所以要的功能軟件開發(fā)工作。而且是未來(lái)主推的方向,正在不斷的推出更新。
建議平時(shí)用的時(shí)候?qū)⒆詣?dòng)更新關(guān)閉,否則會(huì)出現(xiàn)之前調(diào)試好的代碼因?yàn)楦聦?dǎo)致不能正常工作。設(shè)置方法點(diǎn)Cube軟件的help,然后選擇手動(dòng)更新,詳細(xì)見配圖。
以我和公司工程師研發(fā)經(jīng)歷來(lái)看,最開始的時(shí)候都使用標(biāo)準(zhǔn)庫(kù)函數(shù),后來(lái)發(fā)現(xiàn)ST推出HAL庫(kù)以后,慢慢都轉(zhuǎn)到HAL庫(kù)的開發(fā)。它的優(yōu)勢(shì)在于不同芯片間軟件代碼的移植性非常強(qiáng),而且用Cube軟件生成
的工程規(guī)定了自己的代碼放置位置,如果不按規(guī)定寫,重新用Cube生成工程時(shí)自己的代碼會(huì)被覆蓋,進(jìn)一步加強(qiáng)了代碼的移植性。
另外,如果需要修改MCU的功能,比如新添加GPIO或者串口,采用標(biāo)準(zhǔn)庫(kù)函數(shù)的時(shí)候,需要復(fù)制其他串口的初始化代碼,然后手動(dòng)修改。而采用HAL庫(kù)則不需要,只需要在Cube添加設(shè)置,然后生成即可,
Cube自動(dòng)幫你把初始化代碼生成。
綜上所述,建議新手直接使用HAL庫(kù),這樣更容易上手,更快的開發(fā)出所需要的軟件功能。將繁瑣的寄存器配置工作,交給Cube軟件即可,這也符合未來(lái)開發(fā)的主流思想。
如何在stm32里寫自己庫(kù)函數(shù)?
庫(kù)函數(shù)也就是STM32研發(fā)人員把一個(gè)個(gè)文件封裝組合起來(lái)的,本質(zhì)上和用戶自己的程序并沒有什么區(qū)別,所以網(wǎng)上的教程才有庫(kù)函數(shù)版本和寄存器版本,寄存器版本的教程學(xué)會(huì)了,自己把不同模塊封裝起來(lái),其實(shí)也就成了自己的庫(kù)。
如何學(xué)習(xí)stm32的固件庫(kù)函數(shù)?
別急,一步一步來(lái)。從GPIO開始,做各個(gè)實(shí)驗(yàn),慢慢去熟悉STM32的各個(gè)片內(nèi)外設(shè)。固件庫(kù)手冊(cè)只是對(duì)STM32的寄存器的管理。好比你讓某個(gè)GPIO端口輸出啥數(shù)據(jù),你可能需要*(volatileunsingnedlong*)addr=xxxx,其中addr是某個(gè)寄存器的地址,xxxx是要寫入這個(gè)寄存器的值。使用固件庫(kù)的話就是GPIO_Write(GPIOA,XXXX)了,這個(gè)就是固件庫(kù)的好處,它能讓讓開發(fā)人員不用關(guān)心STM32的各個(gè)寄存器是干啥的,只要直接調(diào)用固件庫(kù)的函數(shù)就能完成相應(yīng)的功能,很容易上手,能夠大大的加快開發(fā)進(jìn)度。我覺得最好的方法就是去分析固件庫(kù)源碼,這個(gè)需要你有一點(diǎn)C語(yǔ)言功底,如果是從51單片機(jī)轉(zhuǎn)過(guò)來(lái),也沒有什么經(jīng)驗(yàn)的話可能有些吃力。STM32的固件庫(kù)都是用結(jié)構(gòu)體來(lái)管理這些寄存器的,所以你得熟悉結(jié)構(gòu)體、熟悉結(jié)構(gòu)體指針,枚舉型等等,這樣才能讓你明白STM32的固件庫(kù)到底是怎么回事。