帶你走進(jìn)STM32的世界 更多學(xué)習(xí)資料分享群,歡迎大家加入471417140 STM32F10xx時(shí)鐘系統(tǒng)框圖:時(shí)鐘是整個(gè)系統(tǒng)的脈搏 下圖是STM32F10xx時(shí)鐘系統(tǒng)的框圖,通過(guò)這個(gè)圖可以一目了然地看到各個(gè)部件時(shí)鐘產(chǎn)生的路徑,還可以很方便地計(jì)算出各部分的時(shí)鐘頻率。 STM32的四個(gè)時(shí)鐘源(HSI、HSE、LSI和LSE)也在圖中標(biāo)出;圖中間的時(shí)鐘監(jiān)視系統(tǒng)(CSS)是在很多ST7的單片機(jī)中就出現(xiàn)的安全設(shè)置。特別注意:圖的右邊,輸出定時(shí)器時(shí)鐘之前有一個(gè)乘法器,它的操作不是由程序控制的,是由硬件根據(jù)前一級(jí)的APB預(yù)分頻器的輸出自動(dòng)選擇,當(dāng)APB預(yù)分頻器的分頻因子為1時(shí),這個(gè)乘法器無(wú)作用;當(dāng)APB預(yù)分頻器的分頻因子大于1時(shí),這個(gè)乘法器做倍頻操作,即將APB預(yù)分頻器輸出的頻率乘2,這樣可以保證定時(shí)器可以得到最高的72MHz時(shí)鐘脈沖。 STM32上很多管腳功能可以重新映射 STM32上有很多I/O口,也有很多的內(nèi)置外設(shè),為了節(jié)省引出管腳,這些內(nèi)置外設(shè)都是與I/O口共用引出管腳,ST稱(chēng)其為I/O管腳的復(fù)用功能,相信這點(diǎn)大家都很清楚,因?yàn)榛旧纤袉纹瑱C(jī)都是這么做的。但不知有多少人知道,很多復(fù)用功能的引出腳可以通過(guò)重映射,從不同的I/O管腳引出,即復(fù)用功能的引出腳位是可通過(guò)程序改變的。 這一功能的直接好處是,PCB電路板的設(shè)計(jì)人員可以在需要的情況下,不必把某些信號(hào)在板上繞一大圈完成聯(lián)接,方便了PCB的設(shè)計(jì)同時(shí)潛在地減少了信號(hào)的交叉干擾。復(fù)用功能引出腳的重映射功能所帶來(lái)的潛在好處是,在你不需要同時(shí)使用多個(gè)復(fù)用功能時(shí),虛擬地增加復(fù)用功能的數(shù)量。例如,STM32上最多有3個(gè)USART接口,當(dāng)你需要更多UART接口而又不需要同時(shí)使用它們時(shí),可以通過(guò)這個(gè)重映射功能實(shí)現(xiàn)更多的UART接口。 下述復(fù)用功能的引出腳具有重映射功能: - 晶體振蕩器的引腳在不接晶體時(shí),可以作為普通I/O口 - CAN模塊 - JTAG調(diào)試接口 - 大部分定時(shí)器的引出接口 - 大部分USART的引出接口 - I2C1的引出接口 - SPI1的引出接口 詳細(xì)內(nèi)容請(qǐng)看STM32的技術(shù)參考手冊(cè)。 請(qǐng)務(wù)必記住:如果使用了任意一種重映射功能,在初始化和使用之前,一定要打開(kāi)AFIO時(shí)鐘。 下圖示出了部分復(fù)用功能引出腳的重映射結(jié)果: 【演示實(shí)例】一個(gè)在EK-STM32F板子上的RTC作為calender的例子 硬件連接:串口線(xiàn)連至板子的UART-0端口。超級(jí)終端設(shè)置為: Bits Per seconds: 115200 Data bits: 8 Parity: none Stop bits: 1 Flow control Hardware 板子第一次跑這個(gè)程序時(shí),進(jìn)入時(shí)間配置。 根據(jù)超級(jí)終端上的提示,一次輸入年,月,日,時(shí),分,秒 (1月就輸入01,10月直接輸入10;同理3號(hào)就輸入03) 隨后當(dāng)前的時(shí)間就顯示到了超級(jí)終端上,并且每秒刷新。 沒(méi)有斷電的情況下再跑這個(gè)程序,由于看到bake up區(qū)域有被設(shè)置過(guò)時(shí)間的標(biāo)志,不再進(jìn)入時(shí)間設(shè)置階段,而是直接到時(shí)間顯示間斷,在超級(jí)終端上,每秒刷新。 當(dāng)然如果在EK-STM32F板子上將Vbat和電池相接,具體就是:將紅色的電源跳線(xiàn)帽中的從下往上數(shù)的第5個(gè)取下,從原來(lái)的水平放置改成豎直放置(和上面的VBAT相連)。就算斷電,只要再上電,看到back up區(qū)域中的記號(hào),一樣直接進(jìn)入時(shí)間顯示。因?yàn)閿嚯姾螅琤ack up區(qū)域由電池供電,其中記錄的記號(hào)不會(huì)由于系統(tǒng)掉電而消失。 【演示實(shí)例】使用EK-STM32F板測(cè)量STM32的功耗 這個(gè)例子演示了如何使用EK-STM32F開(kāi)發(fā)評(píng)估板測(cè)量STM32F103VBT6在各種模式下的功耗。例子中演示了如何進(jìn)入STM32的各種模式(RUN、SLEEP、STOP、STANDBY),使用這個(gè)例子您可以通過(guò)EK-STM32F板上的紅色跳線(xiàn)(VDD、VREF+和VDDA)測(cè)量功耗。 本實(shí)例首先通過(guò)UART與Windows的Hyperterminal通信,用戶(hù)可以選擇需要進(jìn)入的功耗模式,然后這個(gè)例程把用戶(hù)選好的配置存到后備寄存器,再次復(fù)位后STM32將進(jìn)入之前選定的模式。 附件包中包含了一個(gè)說(shuō)明文件,詳細(xì)說(shuō)明了如何設(shè)置板上的跳線(xiàn)和操作的過(guò)程。 STM32 GPIO的十大優(yōu)越功能綜述 前幾天Hotpower邀請(qǐng)大家討論一下GPIO的功能、性能和優(yōu)缺點(diǎn)(STM32的GPIO很強(qiáng)大~~~),等了幾天沒(méi)見(jiàn)太多人發(fā)言,但綜合來(lái)看提到了3點(diǎn):1)真雙向IO,2)速度快,3)寄存器功能重復(fù)。關(guān)于第3點(diǎn)有說(shuō)好,有說(shuō)多余的,見(jiàn)仁見(jiàn)智。 下面我就在做個(gè)拋磚引玉,根據(jù)ST手冊(cè)上的內(nèi)容,簡(jiǎn)單地綜述一下GPIO的功能: 一、共有8種模式,可以通過(guò)編程選擇: 1. 浮空輸入 2. 帶上拉輸入 3. 帶下拉輸入 4. 模擬輸入 5. 開(kāi)漏輸出——(此模式可實(shí)現(xiàn)hotpower說(shuō)的真雙向IO) 6. 推挽輸出 7. 復(fù)用功能的推挽輸出 8. 復(fù)用功能的開(kāi)漏輸出 模式7和模式8需根據(jù)具體的復(fù)用功能決定。 二、專(zhuān)門(mén)的寄存器(GPIOx_BSRR和GPIOx_BRR)實(shí)現(xiàn)對(duì)GPIO口的原子操作,即回避了設(shè)置或清除I/O端口時(shí)的“讀-修改-寫(xiě)”操作,使得設(shè)置或清除I/O端口的操作不會(huì)被中斷處理打斷而造成誤動(dòng)作。 三、每個(gè)GPIO口都可以作為外部中斷的輸入,便于系統(tǒng)靈活設(shè)計(jì)。 四、I/O口的輸出模式下,有3種輸出速度可選(2MHz、10MHz和50MHz),這有利于噪聲控制。 五、所有I/O口兼容CMOS和TTL,多數(shù)I/O口兼容5V電平。 六、大電流驅(qū)動(dòng)能力:GPIO口在高低電平分別為0.4V和VDD-0.4V時(shí),可以提供或吸收8mA電流;如果把輸入輸出電平分別放寬到1.3V和VDD-1.3V時(shí),可以提供或吸收20mA電流。 七、具有獨(dú)立的喚醒I/O口。 八、很多I/O口的復(fù)用功能可以重新映射,見(jiàn):你知道嗎?STM32上很多管腳功能可以重新映射。 九、GPIO口的配置具有上鎖功能,當(dāng)配置好GPIO口后,可以通過(guò)程序鎖住配置組合,直到下次芯片復(fù)位才能解鎖。此功能非常有利于在程序跑飛的情況下保護(hù)系統(tǒng)中其他的設(shè)備,不會(huì)因?yàn)槟承㊣/O口的配置被改變而損壞——如一個(gè)輸入口變成輸出口并輸出電流。 十、輸出模式下輸入寄存器依然有效,在開(kāi)漏配置模式下實(shí)現(xiàn)真正的雙向I/O功能。 STM32內(nèi)置參照電壓的使用 每個(gè)STM32芯片都有一個(gè)內(nèi)部的參照電壓,相當(dāng)于一個(gè)標(biāo)準(zhǔn)電壓測(cè)量點(diǎn),在芯片內(nèi)部連接到ADC1的通道17。 根據(jù)數(shù)據(jù)手冊(cè)中的數(shù)據(jù),這個(gè)參照電壓的典型值是1.20V,最小值是1.16V,最大值是1.24V。這個(gè)電壓基本不隨外部供電電壓的變化而變化。 不少人把這個(gè)參照電壓與ADC的參考電壓混淆。ADC的參考電壓都是通過(guò)Vref+提供的。100腳以上的型號(hào),Vref+引到了片外,引腳名稱(chēng)為Vref+;64腳和小于64腳的型號(hào),Vref+在芯片內(nèi)部與VCC信號(hào)線(xiàn)相連,沒(méi)有引到片外,這樣AD的參考電壓就是VCC上的電壓。 在ADC的外部參考電壓波動(dòng),或因?yàn)閂ref+在芯片內(nèi)部與VCC相連而VCC變化的情況下,如果對(duì)于ADC測(cè)量的準(zhǔn)確性要求不高時(shí),可以使用這個(gè)內(nèi)部參照電壓得到ADC測(cè)量的電壓值。 具體方法是在測(cè)量某個(gè)通道的電壓值之前,先讀出參照電壓的ADC測(cè)量數(shù)值,記為ADrefint;再讀出要測(cè)量通道的ADC轉(zhuǎn)換數(shù)值,記為ADchx;則要測(cè)量的電壓為: Vchx = Vrefint * (ADchx/ADrefint) 其中Vrefint為參照電壓=1.20V。 上述方法在使用內(nèi)置溫度傳感器對(duì)因?yàn)闇囟茸兓瑢?duì)系統(tǒng)參數(shù)進(jìn)行補(bǔ)償時(shí)就十分有效。 STM32的ADC輸入通道配置 STM32中最多有3個(gè)ADC模塊,每個(gè)模塊對(duì)應(yīng)的通道不完全重疊。 下圖是STM32F103CDE數(shù)據(jù)手冊(cè)中的總框圖的左下角,圖中可以看出有8個(gè)外部ADC管腳分別接到了3個(gè)ADC模塊,有8個(gè)外部ADC管腳只分別接到了2個(gè)ADC模塊,還有5個(gè)外部ADC管腳只接到了ADC3模塊,這樣總共是21個(gè)通道。 下表是這些ADC管腳與每個(gè)ADC模塊的對(duì)應(yīng)關(guān)系,表中可以看出ADC1還有2個(gè)內(nèi)部通道,分別接到內(nèi)部的溫度傳感器和內(nèi)部的參照電壓: 關(guān)于STM32 ADC速度的問(wèn)題 STM32F103xx系列稱(chēng)為增強(qiáng)型產(chǎn)品,增強(qiáng)型產(chǎn)品的最高時(shí)鐘頻率可以達(dá)到72MHz。增強(qiáng)型產(chǎn)品的英文名稱(chēng)為Performance Line。 STM32F101xx系列稱(chēng)為基本型產(chǎn)品,基本型產(chǎn)品的最高時(shí)鐘頻率可以達(dá)到36MHz。基本型產(chǎn)品的英文名稱(chēng)為Access Line。 根據(jù)設(shè)計(jì),當(dāng)ADC模塊的頻率為14MHz時(shí),可以達(dá)到ADC的最快采樣轉(zhuǎn)換速度。 要得到14MHz的ADC頻率,就要求SYSCLK的頻率是14MHz的倍數(shù),即14MHz、28MHz、42MHz、56MHz、70MHz、84MHz等;對(duì)于基本型產(chǎn)品14MHz和28MHz處于它的最大允許頻率范圍內(nèi);對(duì)于增強(qiáng)型產(chǎn)品,14MHz、28MHz、42MHz、56MHz和70MHz幾種頻率都在它的最大允許頻率范圍內(nèi),但因?yàn)锳DC預(yù)分頻器的分頻系數(shù)只有2、4、6、8這幾個(gè),使用70MHz不能得到最大的14MHz,所以要想得到最快的ADC轉(zhuǎn)換速度,在增強(qiáng)型產(chǎn)品上能用的最快SYSCLK頻率是56MHz。 ADC的速度由2個(gè)參數(shù)決定,它是采樣時(shí)間和轉(zhuǎn)換時(shí)間之和: 即:TCONV = 采樣時(shí)間 + 12.5個(gè)ADC時(shí)鐘周期 在STM32中,ADC的采樣時(shí)間是由用戶(hù)程序在一組預(yù)定的數(shù)值中選擇,按照ADC的時(shí)鐘周期計(jì)算,共有8種選擇: 1.5、7.5、13.5、28.5、41.5、55.5、71.5和239.5 按最小的1.5個(gè)時(shí)鐘周期的采樣時(shí)間計(jì)算,最短的TCONV等于14個(gè)時(shí)鐘周期,如果ADC的時(shí)鐘頻率是14MHz,則ADC的速度為每秒100萬(wàn)次。 注意:當(dāng)ADC的時(shí)鐘頻率超過(guò)14MHz時(shí),ADC的精度將會(huì)顯著下降。 STM32內(nèi)置CRC模塊的使用 所有的STM32芯片都內(nèi)置了一個(gè)硬件的CRC計(jì)算模塊,可以很方便地應(yīng)用到需要進(jìn)行通信的程序中,這個(gè)CRC計(jì)算模塊使用常見(jiàn)的、在以太網(wǎng)中使用的計(jì)算多項(xiàng)式: X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2 + X + 1 寫(xiě)成16進(jìn)制就是:0x04C11DB7 使用這個(gè)內(nèi)置CRC模塊的方法非常簡(jiǎn)單,既首先復(fù)位CRC模塊(設(shè)置CRC_CR=0x01),這個(gè)操作把CRC計(jì)算的余數(shù)初始化為0xFFFFFFFF;然后把要計(jì)算的數(shù)據(jù)按每32位分割為一組數(shù)據(jù)字,并逐個(gè)地把這組數(shù)據(jù)字寫(xiě)入CRC_DR寄存器(既下圖中的綠色框),寫(xiě)完所有的數(shù)據(jù)字后,就可以從CRC_DR寄存器(既下圖中的蘭色框)讀出計(jì)算的結(jié)果。 注意:雖然讀寫(xiě)操作都是針對(duì)CRC_DR寄存器,但實(shí)際上是訪(fǎng)問(wèn)的不同物理寄存器。 有幾點(diǎn)需要說(shuō)明: 1)上述算法中變量CRC,在每次循環(huán)結(jié)束包含了計(jì)算的余數(shù),它始終是向左移位(既從最低位向最高位移動(dòng)),溢出的數(shù)據(jù)位被丟棄。 2)輸入的數(shù)據(jù)始終是以32位為單位,如果原始數(shù)據(jù)少于32位,需要在低位補(bǔ)0,當(dāng)然也可以高位補(bǔ)0。 3)假定輸入的DWORD數(shù)組中每個(gè)分量是按小端存儲(chǔ)。 4)輸入數(shù)據(jù)是按照最高位最先計(jì)算,最低位最后計(jì)算的順序進(jìn)行。 例如: 如果輸入0x44434241,內(nèi)存中按字節(jié)存放的順序是:0x41, 0x42, 0x43, 0x44。計(jì)算的結(jié)果是:0xCF534AE1 如果輸入0x41424344,內(nèi)存中按字節(jié)存放的順序是:0x44, 0x43, 0x42, 0x41。計(jì)算的結(jié)果是:0xABCF9A63 STM32中定時(shí)器的時(shí)鐘源 STM32中有多達(dá)8個(gè)定時(shí)器,其中TIM1和TIM8是能夠產(chǎn)生三對(duì)PWM互補(bǔ)輸出的高級(jí)定時(shí)器,常用于三相電機(jī)的驅(qū)動(dòng),它們的時(shí)鐘由APB2的輸出產(chǎn)生。其它6個(gè)為普通定時(shí)器,時(shí)鐘由APB1的輸出產(chǎn)生。 下圖是STM32參考手冊(cè)上時(shí)鐘分配圖中,有關(guān)定時(shí)器時(shí)鐘部分的截圖: 從圖中可以看出,定時(shí)器的時(shí)鐘不是直接來(lái)自APB1或APB2,而是來(lái)自于輸入為APB1或APB2的一個(gè)倍頻器,圖中的藍(lán)色部分。 下面以定時(shí)器2~7的時(shí)鐘說(shuō)明這個(gè)倍頻器的作用:當(dāng)APB1的預(yù)分頻系數(shù)為1時(shí),這個(gè)倍頻器不起作用,定時(shí)器的時(shí)鐘頻率等于APB1的頻率;當(dāng)APB1的預(yù)分頻系數(shù)為其它數(shù)值(即預(yù)分頻系數(shù)為2、4、8或16)時(shí),這個(gè)倍頻器起作用,定時(shí)器的時(shí)鐘頻率等于APB1的頻率兩倍。 假定AHB=36MHz,因?yàn)锳PB1允許的最大頻率為36MHz,所以APB1的預(yù)分頻系數(shù)可以取任意數(shù)值;當(dāng)預(yù)分頻系數(shù)=1時(shí),APB1=36MHz,TIM2~7的時(shí)鐘頻率=36MHz(倍頻器不起作用);當(dāng)預(yù)分頻系數(shù)=2時(shí),APB1=18MHz,在倍頻器的作用下,TIM2~7的時(shí)鐘頻率=36MHz。 有人會(huì)問(wèn),既然需要TIM2~7的時(shí)鐘頻率=36MHz,為什么不直接取APB1的預(yù)分頻系數(shù)=1?答案是:APB1不但要為T(mén)IM2~7提供時(shí)鐘,而且還要為其它外設(shè)提供時(shí)鐘;設(shè)置這個(gè)倍頻器可以在保證其它外設(shè)使用較低時(shí)鐘頻率時(shí),TIM2~7仍能得到較高的時(shí)鐘頻率。 再舉個(gè)例子:當(dāng)AHB=72MHz時(shí),APB1的預(yù)分頻系數(shù)必須大于2,因?yàn)锳PB1的最大頻率只能為36MHz。如果APB1的預(yù)分頻系數(shù)=2,則因?yàn)檫@個(gè)倍頻器,TIM2~7仍然能夠得到72MHz的時(shí)鐘頻率。能夠使用更高的時(shí)鐘頻率,無(wú)疑提高了定時(shí)器的分辨率,這也正是設(shè)計(jì)這個(gè)倍頻器的初衷。 STM32中外部中斷與外部事件 這張圖是一條外部中斷線(xiàn)或外部事件線(xiàn)的示意圖,圖中信號(hào)線(xiàn)上劃有一條斜線(xiàn),旁邊標(biāo)志19字樣的注釋?zhuān)硎具@樣的線(xiàn)路共有19套。 圖中的藍(lán)色虛線(xiàn)箭頭,標(biāo)出了外部中斷信號(hào)的傳輸路徑,首先外部信號(hào)從編號(hào)1的芯片管腳進(jìn)入,經(jīng)過(guò)編號(hào)2的邊沿檢測(cè)電路,通過(guò)編號(hào)3的或門(mén)進(jìn)入中斷“掛起請(qǐng)求寄存器”,最后經(jīng)過(guò)編號(hào)4的與門(mén)輸出到NVIC中斷控制器;在這個(gè)通道上有4個(gè)控制選項(xiàng),外部的信號(hào)首先經(jīng)過(guò)邊沿檢測(cè)電路,這個(gè)邊沿檢測(cè)電路受上升沿或下降沿選擇寄存器控制,用戶(hù)可以使用這兩個(gè)寄存器控制需要哪一個(gè)邊沿產(chǎn)生中斷,因?yàn)檫x擇上升沿或下降沿是分別受2個(gè)平行的寄存器控制,所以用戶(hù)可以同時(shí)選擇上升沿或下降沿,而如果只有一個(gè)寄存器控制,那么只能選擇一個(gè)邊沿了。 接下來(lái)是編號(hào)3的或門(mén),這個(gè)或門(mén)的另一個(gè)輸入是“軟件中斷/事件寄存器”,從這里可以看出,軟件可以?xún)?yōu)先于外部信號(hào)請(qǐng)求一個(gè)中斷或事件,既當(dāng)“軟件中斷/事件寄存器”的對(duì)應(yīng)位為“1”時(shí),不管外部信號(hào)如何,編號(hào)3的或門(mén)都會(huì)輸出有效信號(hào)。 一個(gè)中斷或事件請(qǐng)求信號(hào)經(jīng)過(guò)編號(hào)3的或門(mén)后,進(jìn)入掛起請(qǐng)求寄存器,到此之前,中斷和事件的信號(hào)傳輸通路都是一致的,也就是說(shuō),掛起請(qǐng)求寄存器中記錄了外部信號(hào)的電平變化。 外部請(qǐng)求信號(hào)最后經(jīng)過(guò)編號(hào)4的與門(mén),向NVIC中斷控制器發(fā)出一個(gè)中斷請(qǐng)求,如果中斷屏蔽寄存器的對(duì)應(yīng)位為“0”,則該請(qǐng)求信號(hào)不能傳輸?shù)脚c門(mén)的另一端,實(shí)現(xiàn)了中斷的屏蔽。 明白了外部中斷的請(qǐng)求機(jī)制,就很容易理解事件的請(qǐng)求機(jī)制了。圖中紅色虛線(xiàn)箭頭,標(biāo)出了外部事件信號(hào)的傳輸路徑,外部請(qǐng)求信號(hào)經(jīng)過(guò)編號(hào)3的或門(mén)后,進(jìn)入編號(hào)5的與門(mén),這個(gè)與門(mén)的作用與編號(hào)4的與門(mén)類(lèi)似,用于引入事件屏蔽寄存器的控制;最后脈沖發(fā)生器把一個(gè)跳變的信號(hào)轉(zhuǎn)變?yōu)橐粋(gè)單脈沖,輸出到芯片中的其它功能模塊。 在這張圖上我們也可以知道,從外部激勵(lì)信號(hào)來(lái)看,中斷和事件是沒(méi)有分別的,只是在芯片內(nèi)部分開(kāi),一路信號(hào)會(huì)向CPU產(chǎn)生中斷請(qǐng)求,另一路信號(hào)會(huì)向其它功能模塊發(fā)送脈沖觸發(fā)信號(hào),其它功能模塊如何相應(yīng)這個(gè)觸發(fā)信號(hào),則由對(duì)應(yīng)的模塊自己決定。 在圖上部的APB總線(xiàn)和外設(shè)模塊接口,是每一個(gè)功能模塊都有的部分,CPU通過(guò)這樣的接口訪(fǎng)問(wèn)各個(gè)功能模塊,這里就不再贅述了。 STM32的USART發(fā)送數(shù)據(jù)時(shí)如何使用TXE和TC標(biāo)志 在USART的發(fā)送端有2個(gè)寄存器,一個(gè)是程序可以看到的USART_DR寄存器(下圖中陰影部分的TDR),另一個(gè)是程序看不到的移位寄存器(下圖中陰影部分Transmit Shift Register)。 對(duì)應(yīng)USART數(shù)據(jù)發(fā)送有兩個(gè)標(biāo)志,一個(gè)是TXE=發(fā)送數(shù)據(jù)寄存器空,另一個(gè)是TC=發(fā)送結(jié)束;對(duì)照下圖,當(dāng)TDR中的數(shù)據(jù)傳送到移位寄存器后,TXE被設(shè)置,此時(shí)移位寄存器開(kāi)始向TX信號(hào)線(xiàn)按位傳輸數(shù)據(jù),但因?yàn)門(mén)DR已經(jīng)變空,程序可以把下一個(gè)要發(fā)送的字節(jié)(操作USART_DR)寫(xiě)入TDR中,而不必等到移位寄存器中所有位發(fā)送結(jié)束,所有位發(fā)送結(jié)束時(shí)(送出停止位后)硬件會(huì)設(shè)置TC標(biāo)志。 另一方面,在剛剛初始化好USART還沒(méi)有發(fā)送任何數(shù)據(jù)時(shí),也會(huì)有TXE標(biāo)志,因?yàn)檫@時(shí)發(fā)送數(shù)據(jù)寄存器是空的。 TXEIE和TCIE的意義很簡(jiǎn)單,TXEIE允許在TXE標(biāo)志為'1'時(shí)產(chǎn)生中斷,而TCIE允許在TC標(biāo)志為'1'時(shí)產(chǎn)生中斷。 至于什么時(shí)候使用哪個(gè)標(biāo)志,需要根據(jù)你的需要自己決定。但我認(rèn)為T(mén)XE允許程序有更充裕的時(shí)間填寫(xiě)TDR寄存器,保證發(fā)送的數(shù)據(jù)流不間斷。TC可以讓程序知道發(fā)送結(jié)束的確切時(shí)間,有利于程序控制外部數(shù)據(jù)流的時(shí)序。 STM32設(shè)置了很多非常有用和靈活的控制和狀態(tài)位,只要你很好地掌握了它們的用法,可以讓你的應(yīng)用更加精確和高效。深圳STM32技術(shù)實(shí)訓(xùn)提升QQ754634522 這是STM32技術(shù)參考手冊(cè)中的一頁(yè): 在STM32中如何配置片內(nèi)外設(shè)使用的IO端口 首先,一個(gè)外設(shè)經(jīng)過(guò)配置輸入的時(shí)鐘和初始化后即被激活(開(kāi)啟)。 如果需要使用該外設(shè)的輸入輸出管腳,則需要配置相應(yīng)的GPIO端口;否則該外設(shè)對(duì)應(yīng)的輸入輸出管腳可以做普通GPIO管腳使用。 技術(shù)咨詢(xún)李老師,電話(huà)13544345450,QQ2966383766。 |
資料共享群471417140 |
更多C語(yǔ)言 C++、JAVA、數(shù)電模電、51單片機(jī)、PIC stm32 ARM Linux驅(qū)動(dòng) 嵌入式、安卓系統(tǒng) FPGA、DSP Cortex-M3學(xué)習(xí) 請(qǐng)咨詢(xún)李老師:騰訊QQ2966383766 中國(guó)移動(dòng)全球通18928805217 更多學(xué)習(xí)資料分享群,歡迎大家加入群471417140 廣州、深圳南山、民治、龍崗、西鄉(xiāng)、長(zhǎng)沙、鄭州、南寧同步學(xué)習(xí)中! |
謝謝分享!!!!!!!!!!!! |
這個(gè)是廣告吶 |
介紹基礎(chǔ)。 |