国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

STM32中C語言的基礎(chǔ)知識(shí)

發(fā)布者:Meshulun最新更新時(shí)間:2024-08-20 來源: elecfans關(guān)鍵字:STM32  C語言  基礎(chǔ)知識(shí) 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

C語言是單片機(jī)開發(fā)中的必備基礎(chǔ)知識(shí),本文列舉了部分STM32學(xué)習(xí)中比較常見的一些C語言基礎(chǔ)知識(shí),希望能對(duì)大家有所幫助。


01位操作


下面我們先講解幾種位操作符,然后講解位操作使用技巧。C語言支持以下六種位操作:

82cae4a0d2ae7f7b809fdada6a39ed84_wKgZomTnlP-AHcQiAAALS0ELSvk531.png

(六種位操作)


下面,重點(diǎn)講解一下位操作在單片機(jī)開發(fā)中的一些實(shí)用技巧。


1.1 在不改變其他位的值的狀況下,對(duì)某幾個(gè)位進(jìn)行設(shè)值。


這個(gè)場景在單片機(jī)開發(fā)中經(jīng)常使用,方法就是我們先對(duì)需要設(shè)置的位用&操作符進(jìn)行清零操作,然后用 | 操作符設(shè)值。


比如,我要改變GPIOA的狀態(tài),可以先對(duì)寄存器的值進(jìn)行&清零操作:

9da3c207f277d4a60b6225d7ece595fb_wKgZomTnlP-ACG5DAAAMumgcyZ8069.png

然后再與需要設(shè)置的值進(jìn)行|或運(yùn)算:

6397f29bbf4766c5160ad9bf2d8bd9aa_wKgZomTnlP-ANgDIAAASEivnhTk127.png

1.2 移位操作提高代碼的可讀性。


移位操作在單片機(jī)開發(fā)中非常重要,下面是delay_init函數(shù)的一行代碼:


SysTick->CTRL |= 1 << 1;


這個(gè)操作就是將CTRL寄存器的第1位(從0開始算起)設(shè)置為1,為什么要通過左移而不是直接設(shè)置一個(gè)固定的值呢?


其實(shí)這是為了提高代碼的可讀性以及可重用性。這行代碼可以很直觀明了的知道,是將第1位設(shè)置為1。如果寫成:

SysTick->CTRL |= 0X0002;


這個(gè)雖然也能實(shí)現(xiàn)同樣的效果,但是可讀性稍差,而且修改也比較麻煩。


1.3 ~按位取反操作使用技巧


按位取反在設(shè)置寄存器的時(shí)候經(jīng)常被使用,常用于清除某一個(gè)/某幾個(gè)位。下面是delay_us函數(shù)的一行代碼:

SysTick->CTRL &= ~(1 << 0) ;    /* 關(guān)閉SYSTICK */

該代碼可以解讀為:僅設(shè)置CTRL寄存器的第0位(最低位)為0,其他位的值保持不變。


同樣我們也不使用按位取反,將代碼寫成:

SysTick->CTRL &= 0XFFFFFFFE;        /* 關(guān)閉SYSTICK */


可見,前者的可讀性及可維護(hù)性都要比后者好很多。


1.4 ^按位異或操作使用技巧


該功能非常適合用于控制某個(gè)位翻轉(zhuǎn),常見的應(yīng)用場景就是控制LED閃爍,如下:

GPIOB->ODR ^= 1 << 5;

執(zhí)行一次該代碼,就會(huì)使PB5的輸出狀態(tài)翻轉(zhuǎn)一次,如果我們的LED接在PB5上,就可以看到LED閃爍了。


02define宏定義


define是C語言中的預(yù)處理命令,它用于宏定義(定義的是常量),可以提高源代碼的可讀性,為編程提供方便。常見的格式:


60c67a7745ed52013e1300443a58ea95_wKgZomTnlP-AMsfvAAAGwG9tkBo688.png

“標(biāo)識(shí)符”為所定義的宏名?!白址笨梢允浅?shù)、表達(dá)式、格式串等。例如:

f17f8fef6ddeaeb4f5f89b4a08576d1e_wKgZomTnlP-AbRs8AAAFWBHgVG0267.png

定義標(biāo)識(shí)符HSE_VALUE的值為8000000,數(shù)字后的U表示unsigned的意思。至于define宏定義的其他一些知識(shí),比如宏定義帶參數(shù),這里就不多講解了。


03ifdef條件編譯


單片機(jī)程序開發(fā)過程中,經(jīng)常會(huì)遇到一種情況,當(dāng)滿足某條件時(shí)對(duì)一組語句進(jìn)行編譯,而當(dāng)條件不滿足時(shí)則編譯另一組語句。


條件編譯命令最常見的形式為:


#ifdef 標(biāo)識(shí)符    程序段1#else    程序段2#endif

它的作用是:當(dāng)標(biāo)識(shí)符已經(jīng)被定義過(一般是用#define命令定義),則對(duì)程序段1進(jìn)行編譯,否則編譯程序段2。


其中#else部分也可以沒有,即:

  #ifdef

    程序段1

    #endif

條件編譯在HAL庫里面是用得很多,在stm32mp1xx_hal_conf.h這個(gè)頭文件中經(jīng)常會(huì)看到這樣的語句:

   #if !defined  (HSE_VALUE)      #define HSE_VALUE            24000000U    #endif



如果沒有定義HSE_VALUE這個(gè)宏,則定義HSE_VALUE宏,并且HSE_VALUE的值為24000000U。條件編譯也是C語言的基礎(chǔ)知識(shí)吧。


這里提一下,24000000U中的U表示無符號(hào)整型,常見的,UL表示無符號(hào)長整型,F(xiàn)表示浮點(diǎn)型。


這里加了U以后,系統(tǒng)編譯時(shí)就不進(jìn)行類型檢查,直接以U的形式把值賦給某個(gè)對(duì)應(yīng)的內(nèi)存,如果超出定義變量的范圍,則截取。

04extern變量申明


C語言中extern可以置于變量或者函數(shù)前,以表示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時(shí)在其他模塊中尋找其定義。


這里面要注意,對(duì)于extern申明變量可以多次,但定義只有一次。在我們的代碼中你會(huì)看到看到這樣的語句:


extern uint16_t g_usart_rx_sta;

這個(gè)語句是申明g_usart_rx_sta變量在其他文件中已經(jīng)定義了,在這里要使用到。


所以,你肯定可以找到在某個(gè)地方有變量定義的語句:

 uint16_t g_usart_rx_sta;

extern的使用比較簡單,但是也會(huì)經(jīng)常用到,需要掌握。

05typedef類型別名


typedef用于為現(xiàn)有類型創(chuàng)建一個(gè)新的名字,或稱為類型別名,用來簡化變量的定義。typedef在HAL庫用得最多的就是定義結(jié)構(gòu)體的類型別名和枚舉類型了。


    struct _GPIO

    {

        __IO uint32_t CRL;

        __IO uint32_t CRH;

        …

};

定義了一個(gè)結(jié)構(gòu)體GPIO,這樣我們定義結(jié)構(gòu)體變量的方式為:

struct  _GPIO  gpiox;       /* 定義結(jié)構(gòu)體變量gpiox */

但這樣很繁瑣,HAL庫中有很多這樣的結(jié)構(gòu)體變量需要定義。


這里我們可以為結(jié)體定義一個(gè)別名GPIO_TypeDef,這樣我們就可以在其他地方通過別名GPIO_TypeDef來定義結(jié)構(gòu)體變量了,方法如下:

    typedef struct

    {

            __IO uint32_t CRL;

            __IO uint32_t CRH;

            …

    } GPIO_TypeDef;

Typedef為結(jié)構(gòu)體定義一個(gè)別名GPIO_TypeDef,這樣我們可以通過GPIO_TypeDef來定義結(jié)構(gòu)體變量:GPIO_TypeDef gpiox;

這里的GPIO_TypeDef就跟struct _GPIO是等同的作用了,但是GPIO_TypeDef使用起來方便很多。


關(guān)鍵字:STM32  C語言  基礎(chǔ)知識(shí) 引用地址:STM32中C語言的基礎(chǔ)知識(shí)

上一篇:STM32單片機(jī)引腳介紹及功能 STM32單片機(jī)的工作原理和基本組成
下一篇:如何使用代碼清除STM32單片機(jī)上的PCROP

推薦閱讀最新更新時(shí)間:2025-06-26 21:42

STM32中的串口通信的基礎(chǔ)知識(shí)
串口通信基本原理 并行通信與串行通信 ① 并行通信傳送八路信號(hào),一次并行傳送傳送完整的一個(gè)字節(jié)信息。串行通信在一個(gè)方向上只能傳送一路信號(hào),一次只能傳送一個(gè)二進(jìn)制位,傳送一個(gè)字節(jié)信息時(shí),只能一位一位地依次傳送; ② 串行的傳輸速度慢,但是對(duì)線路的要求低一些。 并行的對(duì)線路的要求高,但是速度快; ③ 串行線路僅使用一對(duì)信號(hào)線,線路成本低并且抗干擾能力強(qiáng),因此可以用在長距離通訊上;而并行線路使用多對(duì)信號(hào)線(還不包括額外的控制線路),線路成本高并且抗干擾能力差,因此對(duì)通訊距離有非常嚴(yán)格的限制。 串行通信中單工,半雙工和全雙工的區(qū)別 單工,半雙工和全雙工是通過傳輸方向不同而分的。具體說明如下: 按通信方式不同又可分為異
[單片機(jī)]
<font color='red'>STM32</font>中的串口通信的<font color='red'>基礎(chǔ)知識(shí)</font>
stm32 C語言的數(shù)據(jù)類型說明
stm32編程過程經(jīng)常定義變量類型,經(jīng)常擔(dān)心數(shù)據(jù)運(yùn)算過程中 超過變量類型范圍。因?yàn)樵诰幊踢^程中,不同的CPU,其數(shù)據(jù)類型的意義各不相同,所以一定要注意相應(yīng)變量數(shù)據(jù)類型的定義和轉(zhuǎn)換,否則在計(jì)算中可能會(huì)出現(xiàn)不確定的錯(cuò)誤。所以下面列出常見數(shù)據(jù)類型: 一、C語言數(shù)據(jù)類型 stm32使用的數(shù)據(jù)類型定義在 stm32f4xx.h中 整型定義: #include core_cm4.h /* Cortex-M4 processor and core peripherals */ #include system_stm32f4xx.h #include stdint.h /** @addtogroup Export
[單片機(jī)]
發(fā)動(dòng)機(jī)基礎(chǔ)知識(shí):汽車發(fā)動(dòng)機(jī)分解圖
發(fā)動(dòng)機(jī)是汽車的靈魂,也是非常復(fù)雜的系統(tǒng),不管好車壞車,發(fā)動(dòng)機(jī)原理基本相同。今天給大家分享一下汽車發(fā)動(dòng)機(jī)的分解圖,讓發(fā)動(dòng)機(jī)不再神秘。 今天,小編比較系統(tǒng)地整理了發(fā)動(dòng)機(jī)的基礎(chǔ)知識(shí),如果您能仔細(xì)讀完,相信您一定會(huì)有所收獲。 需要發(fā)動(dòng)機(jī)全套高清圖者 首先,讓我們看一幅發(fā)動(dòng)機(jī)總圖。 發(fā)動(dòng)機(jī)由兩大機(jī)構(gòu)(曲柄連桿機(jī)構(gòu)、配氣機(jī)構(gòu))和五大系統(tǒng)(燃油供給系統(tǒng)、冷卻系統(tǒng)、潤滑系統(tǒng)、啟動(dòng)系統(tǒng)和點(diǎn)火系統(tǒng))組成。下面我們開始圖解: 一、曲柄連桿機(jī)構(gòu) 曲柄連桿機(jī)構(gòu)包括機(jī)體組、曲軸飛輪組和活塞桿組。 1.機(jī)體組 機(jī)體組主要由氣缸體、氣缸蓋、氣缸墊、油底殼、氣缸蓋罩以及主軸承蓋等組成。 1—?dú)飧咨w 2—?dú)飧咨w襯墊 3—?dú)飧左w 4—油底
[嵌入式]
發(fā)動(dòng)機(jī)<font color='red'>基礎(chǔ)知識(shí)</font>:汽車發(fā)動(dòng)機(jī)分解圖
PIC單片機(jī)基礎(chǔ)知識(shí)之AD轉(zhuǎn)換
AD轉(zhuǎn)換 我們先看看R1和R2,R2是個(gè)可調(diào)電阻 如果我們將R2變大 RA0這個(gè)管腳上的電壓就越大。R2變小 RA0這個(gè)管腳上的電壓就越小。那單片機(jī)是怎么知道電壓變化的。這就需要AD轉(zhuǎn)換。就是將模擬量轉(zhuǎn)換成數(shù)字量。 PIC單片機(jī)如何表示電壓 PIC用十位二進(jìn)制位的數(shù)來表示電壓,也就是數(shù)值0~1023來表示電壓。那比如現(xiàn)在這個(gè)數(shù)值是400那這代表多少的電壓?這就要根據(jù)參考電壓來確定了。 比如我們?cè)O(shè)置正參考電壓為3.3V ,當(dāng)輸入的電壓為0時(shí),數(shù)值就為0。當(dāng)輸入的電壓為3.3V時(shí),數(shù)值就是1023. 那如果輸入的電壓是1.2V代表多少電壓。 首先,先算出一個(gè)數(shù)值代表多少的電壓 3.3V除以1023 約等于 0
[單片機(jī)]
PIC單片機(jī)<font color='red'>基礎(chǔ)知識(shí)</font>之AD轉(zhuǎn)換
嵌入式軟件測試基礎(chǔ)知識(shí)
測試是傳統(tǒng)軟件開發(fā)的最后一步。整個(gè)軟件開發(fā)過程,需要收集要求、進(jìn)行高層次的設(shè)計(jì)、詳細(xì)設(shè)計(jì)、創(chuàng)建代碼、進(jìn)行部分單元測試,然后集成,最后才開始最終測試。 最佳的開發(fā)實(shí)踐應(yīng)包含代碼檢查這個(gè)步驟。然而代碼檢查一般只能找出70%的系統(tǒng)錯(cuò)誤,因此完美的測試環(huán)節(jié)絕對(duì)必不可少。測試就像個(gè)復(fù)式記帳系統(tǒng),可以確保將缺陷扼殺在最終推出的產(chǎn)品之前。 在所有其它的工程實(shí)踐中,測試都被視為基本環(huán)節(jié)。比如,在美國,每一座聯(lián)邦政府出資修建的橋都必須經(jīng)過大量的風(fēng)洞測試。而在軟件領(lǐng)域,測試并沒有很受重視。盡管測試是所有工程實(shí)踐準(zhǔn)則的關(guān)鍵部分,但編寫測試程序卻感覺是在浪費(fèi)時(shí)間。好在嵌入式系統(tǒng)設(shè)計(jì)界內(nèi)的許多領(lǐng)域已經(jīng)將測試作為其工作的核心部分,他們認(rèn)識(shí)到將這個(gè)關(guān)鍵步驟放在
[測試測量]
嵌入式軟件測試<font color='red'>基礎(chǔ)知識(shí)</font>
能量采集系統(tǒng)環(huán)境能量轉(zhuǎn)換器基礎(chǔ)知識(shí)
? ? 近來,精密的電池供電型電子系統(tǒng)和自供電設(shè)備,在現(xiàn)有自主手持設(shè)備領(lǐng)域延伸出一些不同的應(yīng)用。CMOS 處理技術(shù)和電路技術(shù)方面取得的巨大進(jìn)步,降低了電路的功耗,使得新型自主供電系統(tǒng)成為可能。這些進(jìn)步帶來大量新興應(yīng)用,例如:無線微傳感器網(wǎng)絡(luò)、可穿戴醫(yī)療電子設(shè)備、工業(yè)及家庭自動(dòng)化傳感器和電子貨架標(biāo)簽。理想情況下,這些系統(tǒng)都可以在沒有電池的情況下正常工作。但是,當(dāng)要求使用電池時(shí),我們?nèi)匀恍枰M力延長電池使用時(shí)間,這樣系統(tǒng)便可在其壽命周期內(nèi)無需更換電池。理解能量轉(zhuǎn)換器工作原理以及如何使用它來提供能源,是達(dá)到上述目標(biāo)的基本要求。 ? ? 自供電系統(tǒng)要求有一個(gè)能量來源,以在其壽命周期內(nèi)維持正常的工作。根據(jù)不同的能量來源,可將商用能量轉(zhuǎn)換
[電源管理]
能量采集系統(tǒng)環(huán)境能量轉(zhuǎn)換器<font color='red'>基礎(chǔ)知識(shí)</font>
無鉛焊錫的基礎(chǔ)知識(shí)
無鉛焊錫的基礎(chǔ)知識(shí) 1.焊接作業(yè)的基礎(chǔ) ① 焊接作業(yè)的目的: (一) 機(jī)械的連接:把兩個(gè)金屬連接,固定的作用。 (二) 電氣的連接,把兩個(gè)金屬連接,使電氣導(dǎo)通的作用。這種電氣的連接是焊接作業(yè)的特征,是粘合劑所不能做到的。 ② 焊接作業(yè)的特征: 焊接作業(yè)的特征是一次可以完成大量的焊接,比如說利用噴流槽進(jìn)行的焊接,利用黏膠狀焊錫進(jìn)行的焊接;另外一個(gè)特征就是簡單的可以修正。 ③ 焊錫的定義: 一般來說,焊錫是由錫(融點(diǎn)232度)和鉛(熔點(diǎn)327度)組成的合金。其中由錫63%和鉛37%組成的焊錫被稱為共晶焊錫,這種焊錫的熔點(diǎn)是183度。標(biāo)準(zhǔn)焊接作業(yè)時(shí)使用的線狀焊錫被稱為松香入焊錫或線狀焊錫。如圖⊙所示,在焊錫中加入了助焊劑。這種助
[模擬電子]
無鉛焊錫的<font color='red'>基礎(chǔ)知識(shí)</font>
ADI基礎(chǔ)教程:模擬開關(guān)和多路復(fù)用器基礎(chǔ)知識(shí)
這場基礎(chǔ)教程介紹模擬開關(guān)及多路復(fù)用器的結(jié)構(gòu),并且介紹它們的靜態(tài)和動(dòng)態(tài)參數(shù),最后會(huì)告訴大家如何在ADI網(wǎng)站上在線選擇模擬開關(guān)或多路復(fù)用器。
[電源管理]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved