欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

你懂精通STM32的含金量嗎?

云深之無(wú)跡 ? 來(lái)源:云深之無(wú)跡 ? 2023-04-19 09:13 ? 次閱讀

你懂精通ARM的含金量嗎?你懂精通STM32的含金量嗎?不管懂不懂都要懂,趕緊學(xué)。

bc3e3d64-de2c-11ed-bfe3-dac502259ad0.png

這是它的電源系統(tǒng),下面會(huì)說(shuō)這些引腳的作用

在STM32單片機(jī)中,每個(gè)寄存器都有一個(gè)獨(dú)特的地址,這些地址是在芯片的數(shù)據(jù)手冊(cè)中定義的。地址偏移是指每個(gè)寄存器的地址相對(duì)于其所在寄存器組的基地址的偏移量。

bc68f6e4-de2c-11ed-bfe3-dac502259ad0.png

在這里,每一個(gè)寄存器都有便宜的地址

例如,在STM32F407VG芯片中,GPIOB寄存器組的基地址為0x40020400。在這個(gè)寄存器組中,每個(gè)GPIOB端口的控制寄存器的地址偏移量是0x00、0x04、0x08、0x0C等。這意味著,如果您想訪問(wèn)GPIOB的第一個(gè)端口(PB0),則可以通過(guò)將地址偏移量0x00添加到GPIOB基地址(0x40020400)來(lái)訪問(wèn)它,即0x40020400 + 0x00 = 0x40020400。

在STM32中,使用寄存器地址偏移來(lái)訪問(wèn)和控制特定寄存器,這可以通過(guò)指針操作和位域操作等方式來(lái)實(shí)現(xiàn)。需要注意的是,對(duì)于不同的芯片型號(hào)和不同的寄存器組,其基地址和偏移量可能會(huì)有所不同。

在STM32單片機(jī)中,每個(gè)寄存器都有一個(gè)復(fù)位值(也稱(chēng)為默認(rèn)值或初始值),這是當(dāng)單片機(jī)復(fù)位時(shí)寄存器將被初始化為的值。復(fù)位值是在芯片的數(shù)據(jù)手冊(cè)中定義的。

大多數(shù)寄存器的復(fù)位值都是0或某些特定的值,例如控制寄存器的復(fù)位值通常是0x0000或0x0001。

在單片機(jī)初始化過(guò)程中,為了確保寄存器處于正確的狀態(tài),需要將所有寄存器設(shè)置為其復(fù)位值。這可以通過(guò)在啟動(dòng)代碼中執(zhí)行清零操作或者使用STM32提供的庫(kù)函數(shù)來(lái)實(shí)現(xiàn)。

一字節(jié)是計(jì)算機(jī)存儲(chǔ)中的基本單位之一,通常包含8個(gè)比特(bit),每個(gè)比特只能表示0或1兩種狀態(tài)。在計(jì)算機(jī)中,一字節(jié)通常用于存儲(chǔ)一個(gè)字符或者一個(gè)整數(shù)等數(shù)據(jù)。

在二進(jìn)制表示中,一字節(jié)的取值范圍是0~255(即00000000~11111111),因?yàn)樗梢杂?個(gè)比特組合出256種不同的狀態(tài),其中一個(gè)狀態(tài)用于表示0。

一字節(jié)的大小在不同的計(jì)算機(jī)架構(gòu)中可能會(huì)有所不同,但是在大多數(shù)計(jì)算機(jī)中,一字節(jié)都被定義為8個(gè)比特。此外,一些特殊的系統(tǒng)中,字節(jié)大小可能是其他值,如10比特或12比特。

一比特(bit)是計(jì)算機(jī)存儲(chǔ)和通信中最小的數(shù)據(jù)單位,它只能表示0或1兩種狀態(tài)。比特通常用于表示二進(jìn)制數(shù)據(jù),在計(jì)算機(jī)中被廣泛應(yīng)用于數(shù)字電路和通信領(lǐng)域。

在二進(jìn)制表示中,一個(gè)比特的取值范圍是0或1,其中0表示低電平(或者“假”),1表示高電平(或者“真”)。比特的狀態(tài)可以表示一位二進(jìn)制數(shù)中的一位,因此8個(gè)比特組合起來(lái)可以表示一個(gè)字節(jié),即一個(gè)8位的二進(jìn)制數(shù)。

比特在計(jì)算機(jī)中有著廣泛的應(yīng)用,例如存儲(chǔ)器單元中的存儲(chǔ)單元就是由比特組成的,CPU中的寄存器也是由多個(gè)比特組合而成的。在通信領(lǐng)域,比特是衡量數(shù)據(jù)傳輸速率的單位,例如“1Mbps”表示每秒傳輸100萬(wàn)個(gè)比特。

這里寫(xiě)的就是上面的電源引腳,為什么在認(rèn)知中簡(jiǎn)單的+,-兩個(gè)而已,現(xiàn)在出來(lái)這么多腳?

Vdd和Vss是電子元器件中常用的術(shù)語(yǔ),它們分別代表電路的正電源和負(fù)電源。

Vdd是指電路中的正電源,通常表示為Vcc,它為電路提供正電壓,使電路中的器件工作。在數(shù)字電路中,Vdd通常為邏輯1的電壓值,而在模擬電路中,Vdd通常為固定的直流電壓源。

Vss是指電路中的負(fù)電源,也稱(chēng)為地線或接地線,通常表示為GND。Vss提供電路中的器件所需的負(fù)電壓,以確保電路正常工作。在數(shù)字電路中,Vss通常為邏輯0的電壓值,而在模擬電路中,Vss通常為固定的零電位或接地。

Vdd和Vss是電子電路中最基本的兩個(gè)電源,電路中的其他信號(hào)、電壓和電流都是基于這兩個(gè)電源的。

Vdda是指模擬電路中的電源,通常用于提供模擬信號(hào)的參考電壓。Vdda通常表示為VddA,與數(shù)字電路中的Vdd不同,Vdda通常為模擬電路所需的電壓值,通常比數(shù)字電路中的Vdd更為精確和穩(wěn)定。

Vdda通常用于ADC模數(shù)轉(zhuǎn)換器)和DAC數(shù)模轉(zhuǎn)換器)等模擬電路中。在ADC中,Vdda是參考電壓,用于將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)。在DAC中,Vdda是數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào)時(shí)使用的參考電壓。

與數(shù)字電路中的Vdd相比,Vdda的電壓值通常要求更為精確和穩(wěn)定,以確保模擬電路中的信號(hào)質(zhì)量。

Vdd是指數(shù)字電路中的正電源,通常表示為Vcc,它為電路提供正電壓,使電路中的器件工作。在數(shù)字電路中,Vdd通常為邏輯1的電壓值。

Vdd電源通常用于數(shù)字邏輯電路中,例如微處理器、存儲(chǔ)器、計(jì)數(shù)器等。Vdd的電壓值取決于具體的器件要求和應(yīng)用場(chǎng)景,通常在2V到5V之間,也有些器件需要更高的電壓值。

在數(shù)字電路中,Vdd電源的穩(wěn)定性和可靠性非常重要,如果Vdd電壓不穩(wěn)定或存在波動(dòng),可能會(huì)導(dǎo)致電路運(yùn)行不穩(wěn)定或出現(xiàn)錯(cuò)誤。因此,在數(shù)字電路設(shè)計(jì)中,通常需要使用穩(wěn)壓電路或者其他電源管理技術(shù)來(lái)確保Vdd電壓的穩(wěn)定性和可靠性,以保證電路的正常工作。

Vssa是指模擬電路中的負(fù)電源,通常表示為VssA,它為模擬電路中的器件提供負(fù)電壓,以確保模擬電路的正常工作。Vssa通常用于模擬信號(hào)的處理和放大等模擬電路中。

與數(shù)字電路中的Vss不同,Vssa通常需要比Vss更為精確和穩(wěn)定,以確保模擬電路中的信號(hào)質(zhì)量。在實(shí)際應(yīng)用中,通常需要使用高精度電源管理電路或其他電源穩(wěn)定技術(shù)來(lái)確保Vssa的穩(wěn)定性和可靠性,以確保模擬電路的正常工作。

需要注意的是,Vssa和VddA通常是相對(duì)于某個(gè)參考電位(通常是地線)而言的,它們之間的電壓差通常稱(chēng)為模擬電源電壓。

bc865a2c-de2c-11ed-bfe3-dac502259ad0.png

這個(gè)簡(jiǎn)單,就是CubuMX的

在 STM32 數(shù)據(jù)手冊(cè)中,寄存器的訪問(wèn)選項(xiàng)通常包括以下內(nèi)容:

讀/寫(xiě)權(quán)限:指示寄存器是否可讀、可寫(xiě)或既可讀又可寫(xiě)。

寄存器地址:指示寄存器在芯片內(nèi)存映射中的地址。

寄存器位域:對(duì)于一些特殊的寄存器,可能會(huì)將其分為幾個(gè)位域來(lái)表示不同的控制或狀態(tài)信息。

復(fù)位值:指示寄存器在復(fù)位時(shí)的初始值。

等待周期:指示在對(duì)該寄存器進(jìn)行讀/寫(xiě)操作時(shí)需要等待多長(zhǎng)時(shí)間才能獲得結(jié)果。在一些情況下,需要等待芯片內(nèi)部的一些操作完成后才能獲得正確的結(jié)果,因此需要等待周期。

等待周期是指訪問(wèn)某些寄存器需要等待芯片內(nèi)部操作完成的時(shí)間,通常稱(chēng)為訪問(wèn)延遲。在進(jìn)行某些特殊操作時(shí),需要等待周期才能確保數(shù)據(jù)的正確性。在進(jìn)行讀取操作時(shí),等待周期可能包括寄存器響應(yīng)時(shí)間、總線傳輸時(shí)間等等,具體時(shí)間可能會(huì)因?yàn)橄到y(tǒng)的配置和芯片的類(lèi)型而有所不同。

微控制器中,有時(shí)需要對(duì)存儲(chǔ)器進(jìn)行不同粒度的讀寫(xiě)操作,字節(jié)(Byte)、半字(Half Word)和字(Word)是三種常見(jiàn)的數(shù)據(jù)粒度,它們分別表示存儲(chǔ)器中的不同位數(shù)。具體含義如下:

字節(jié)(Byte):是存儲(chǔ)器中的最小單元,通常表示為8位二進(jìn)制數(shù)。字節(jié)可存儲(chǔ)0-255的無(wú)符號(hào)整數(shù),或者-128到127的有符號(hào)整數(shù)。字節(jié)訪問(wèn)意味著每次訪問(wèn)一個(gè)字節(jié)。

半字(Half Word):是由兩個(gè)連續(xù)的字節(jié)組成,通常表示為16位二進(jìn)制數(shù)。半字可存儲(chǔ)0-65535的無(wú)符號(hào)整數(shù),或者-32768到32767的有符號(hào)整數(shù)。半字訪問(wèn)意味著每次訪問(wèn)兩個(gè)字節(jié)。

字(Word):是由四個(gè)連續(xù)的字節(jié)組成,通常表示為32位二進(jìn)制數(shù)。字可存儲(chǔ)0-4294967295的無(wú)符號(hào)整數(shù),或者-2147483648到2147483647的有符號(hào)整數(shù)。字訪問(wèn)意味著每次訪問(wèn)四個(gè)字節(jié)。

在STM32微控制器中,為了支持不同粒度的讀寫(xiě)操作,一些寄存器和存儲(chǔ)器區(qū)域提供了不同的訪問(wèn)選項(xiàng),例如:

8位字節(jié)訪問(wèn)(BYTE):每次訪問(wèn)8位(1個(gè)字節(jié))的數(shù)據(jù)。

16位半字訪問(wèn)(HALFWORD):每次訪問(wèn)16位(2個(gè)字節(jié))的數(shù)據(jù)。

32位字訪問(wèn)(WORD):每次訪問(wèn)32位(4個(gè)字節(jié))的數(shù)據(jù)。

在 STM32 微控制器中,系統(tǒng)時(shí)鐘和外設(shè)時(shí)鐘都是由一個(gè)基礎(chǔ)時(shí)鐘源衍生出來(lái)的,對(duì)于 STM32 系列微控制器而言,通常都是使用內(nèi)部的 RC 振蕩器或者外部的晶體振蕩器作為基礎(chǔ)時(shí)鐘源。

時(shí)鐘中斷寄存器是一類(lèi)特殊的寄存器,用于配置 STM32 微控制器中的時(shí)鐘中斷。時(shí)鐘中斷是指在系統(tǒng)時(shí)鐘或者外設(shè)時(shí)鐘到達(dá)某個(gè)特定時(shí)間或者計(jì)數(shù)值時(shí)產(chǎn)生的一種中斷信號(hào),用于觸發(fā)某些特定的操作或者執(zhí)行周期性的任務(wù)。

STM32 微控制器中的時(shí)鐘中斷寄存器通常包括以下內(nèi)容:

時(shí)鐘控制寄存器:用于配置時(shí)鐘的各種參數(shù),例如時(shí)鐘源選擇、時(shí)鐘分頻系數(shù)、時(shí)鐘計(jì)數(shù)器等等。

中斷控制寄存器:用于配置時(shí)鐘中斷的觸發(fā)條件和中斷優(yōu)先級(jí)等參數(shù)。

中斷狀態(tài)寄存器:用于記錄當(dāng)前是否有時(shí)鐘中斷發(fā)生,并且可以清除中斷標(biāo)志位。

在 STM32 微控制器中,不同的系列和型號(hào)會(huì)有不同的時(shí)鐘中斷寄存器,具體的使用方法和配置參數(shù)需要根據(jù)具體的型號(hào)和應(yīng)用場(chǎng)景進(jìn)行選擇和調(diào)整。

bca0ce3e-de2c-11ed-bfe3-dac502259ad0.png

復(fù)位電路

bcc11a2c-de2c-11ed-bfe3-dac502259ad0.png

時(shí)鐘樹(shù)在面試的時(shí)候也會(huì)問(wèn),這個(gè)其實(shí)就是多看看就好了

bcf56d4a-de2c-11ed-bfe3-dac502259ad0.png

在HSE時(shí)鐘上面的晶振如何接

bd24ce14-de2c-11ed-bfe3-dac502259ad0.png

在MX上面生成調(diào)試的時(shí)候,需要選擇這個(gè)

bd39305c-de2c-11ed-bfe3-dac502259ad0.png

會(huì)有默認(rèn)的引腳來(lái)啟用

bd5e9f68-de2c-11ed-bfe3-dac502259ad0.png

可以選擇一個(gè)IIC

bd780afc-de2c-11ed-bfe3-dac502259ad0.png

下面是具體的一些功能,可以去設(shè)置,在代碼中有體現(xiàn)

bd96561a-de2c-11ed-bfe3-dac502259ad0.png

IIC默認(rèn)開(kāi)啟的是這兩個(gè)引腳

bdb61e46-de2c-11ed-bfe3-dac502259ad0.png

有時(shí)候引腳之間是互相沖突的

bdd7120e-de2c-11ed-bfe3-dac502259ad0.png

可以試試UART

bdf09044-de2c-11ed-bfe3-dac502259ad0.png

硬件外設(shè)就直接打開(kāi)

be0d0abc-de2c-11ed-bfe3-dac502259ad0.png

這些是串口的常見(jiàn)設(shè)置

be28c022-de2c-11ed-bfe3-dac502259ad0.png

你可以點(diǎn)右邊來(lái)設(shè)置精確的功能

be583d02-de2c-11ed-bfe3-dac502259ad0.png

在這里被設(shè)置

be92954c-de2c-11ed-bfe3-dac502259ad0.png

當(dāng)然DMA如果要開(kāi)啟的時(shí)候也是可以的

bec1add2-de2c-11ed-bfe3-dac502259ad0.png

時(shí)鐘

bee17ea0-de2c-11ed-bfe3-dac502259ad0.png

這是一些設(shè)置

bf073d02-de2c-11ed-bfe3-dac502259ad0.png

為每個(gè)外設(shè)生成H,C

bf3321f6-de2c-11ed-bfe3-dac502259ad0.png

也可以選取LL低級(jí)性能庫(kù)

bf5910aa-de2c-11ed-bfe3-dac502259ad0.png

第一次找到這個(gè)功能,好像是打開(kāi)回調(diào)

bf7b2154-de2c-11ed-bfe3-dac502259ad0.png

bf9fa9c0-de2c-11ed-bfe3-dac502259ad0.png

代碼在之間

bfb9a3de-de2c-11ed-bfe3-dac502259ad0.png

這個(gè)就是生成的函數(shù)

bfdfc424-de2c-11ed-bfe3-dac502259ad0.png

里面的中斷函數(shù)

c0107c4a-de2c-11ed-bfe3-dac502259ad0.png

IO腳的設(shè)置自己看嘛

c03fdeae-de2c-11ed-bfe3-dac502259ad0.png

4部分

c078f5ea-de2c-11ed-bfe3-dac502259ad0.png

01控制

c096e1e0-de2c-11ed-bfe3-dac502259ad0.png

速度控制,說(shuō)了100遍

c0b62a46-de2c-11ed-bfe3-dac502259ad0.png

也可以選擇JTAG

c0d12f3a-de2c-11ed-bfe3-dac502259ad0.png

默認(rèn)復(fù)位的功能

c0f141bc-de2c-11ed-bfe3-dac502259ad0.png

一次用4個(gè)線,不配了

c10ebecc-de2c-11ed-bfe3-dac502259ad0.png

引腳的配置

c13a0e60-de2c-11ed-bfe3-dac502259ad0.png

自己看

c1701618-de2c-11ed-bfe3-dac502259ad0.png

輸入模式

在 STM32 微控制器中,APB2(Advanced Peripheral Bus 2)是一個(gè)高速外設(shè)總線,它連接了一些重要的外設(shè)模塊,例如定時(shí)器、串行通信接口、通用串行總線控制器等等。APB2 的時(shí)鐘頻率可以通過(guò)時(shí)鐘樹(shù)的分頻器進(jìn)行配置,因此可以實(shí)現(xiàn)不同外設(shè)模塊之間的時(shí)序控制和數(shù)據(jù)交換。

STM32 APB2 外設(shè)包括但不限于以下幾個(gè):

定時(shí)器:STM32 微控制器中有多種不同類(lèi)型的定時(shí)器,包括基本定時(shí)器、通用定時(shí)器、高級(jí)定時(shí)器等等,這些定時(shí)器可以用于產(chǎn)生各種精度和周期的定時(shí)器中斷,同時(shí)還支持 PWM 信號(hào)輸出、脈沖計(jì)數(shù)等功能。

串行通信接口:STM32微控制器中支持多種不同的串行通信協(xié)議,包括 UART、SPI、I2C等等,這些外設(shè)模塊可以實(shí)現(xiàn)與其他設(shè)備的數(shù)據(jù)通信和控制。

通用串行總線控制器:STM32 微控制器中的通用串行總線控制器(USB OTG FS)是一種高速的通用串行總線接口,可以實(shí)現(xiàn)與 USB 設(shè)備的通信和數(shù)據(jù)傳輸。

ADC:STM32 微控制器中的 ADC(模數(shù)轉(zhuǎn)換器)可以用于采集模擬信號(hào)并將其轉(zhuǎn)換為數(shù)字信號(hào),提供多種不同的采樣率和分辨率選擇。

DMA:STM32 微控制器中的 DMA(直接存儲(chǔ)器訪問(wèn))模塊可以實(shí)現(xiàn)高效的數(shù)據(jù)傳輸和數(shù)據(jù)存儲(chǔ),同時(shí)也可以降低 CPU 的負(fù)載,提高系統(tǒng)性能。

在STM32中,APB2是高速外設(shè)總線,例如SPI、I2S、USART、ADC等,其時(shí)鐘頻率通常比APB1和AHB總線更高。在每個(gè)APB2時(shí)鐘上采樣指的是在APB2時(shí)鐘周期內(nèi)對(duì)某個(gè)外設(shè)進(jìn)行多次采樣以提高采樣精度和減小采樣誤差的技術(shù)。

例如,在使用STM32的ADC(模數(shù)轉(zhuǎn)換器)時(shí),可以選擇在每個(gè)APB2時(shí)鐘上采樣來(lái)提高轉(zhuǎn)換精度。這樣做的好處是可以將ADC的采樣周期與APB2總線的時(shí)鐘同步,提高ADC采樣率,減小噪聲和抖動(dòng)對(duì)采樣的影響,從而提高系統(tǒng)的性能和穩(wěn)定性。

在STM32中,IRQ是指中斷請(qǐng)求(Interrupt Request)。它是一種特殊的處理器信號(hào),用于通知CPU有重要的事件需要立即處理。當(dāng)一個(gè)中斷事件被觸發(fā)時(shí),它會(huì)向處理器發(fā)出IRQ信號(hào),將處理器從正常的程序執(zhí)行中打斷,轉(zhuǎn)而執(zhí)行預(yù)定義的中斷服務(wù)程序(ISR)來(lái)處理中斷事件。

STM32芯片具有許多外設(shè)(例如定時(shí)器、串口、ADC等),這些外設(shè)可以通過(guò)配置相應(yīng)的中斷請(qǐng)求(IRQ)來(lái)實(shí)現(xiàn)異步事件的處理。當(dāng)外設(shè)產(chǎn)生了預(yù)定義的事件(例如定時(shí)器計(jì)數(shù)器溢出、串口接收數(shù)據(jù)等)時(shí),它會(huì)自動(dòng)向中斷控制器發(fā)出IRQ信號(hào),觸發(fā)中斷請(qǐng)求,并使得CPU暫時(shí)停止執(zhí)行正在運(yùn)行的程序,轉(zhuǎn)而執(zhí)行相應(yīng)的中斷服務(wù)程序來(lái)處理該事件。

在STM32中,IRQ信號(hào)由中斷控制器(NVIC,Nested Vector Interrupt Controller)進(jìn)行管理和分配,它可以對(duì)外設(shè)產(chǎn)生的不同類(lèi)型的中斷請(qǐng)求進(jìn)行優(yōu)先級(jí)排序和處理。

異步編程是一種編程模型,它不依賴于線程的同步和阻塞等機(jī)制,而是通過(guò)回調(diào)函數(shù)、事件驅(qū)動(dòng)等方式來(lái)實(shí)現(xiàn)代碼的非阻塞執(zhí)行,從而提高系統(tǒng)的并發(fā)性能和響應(yīng)速度。

異步編程通常涉及到異步操作和異步實(shí)踐兩個(gè)概念。

異步操作指的是一種不會(huì)阻塞當(dāng)前線程的操作,例如IO操作、網(wǎng)絡(luò)請(qǐng)求等。異步操作一般是通過(guò)異步函數(shù)或異步API來(lái)實(shí)現(xiàn)的,它們通常會(huì)在后臺(tái)啟動(dòng)一個(gè)或多個(gè)線程或進(jìn)程來(lái)處理請(qǐng)求,從而避免當(dāng)前線程被阻塞。異步操作通常會(huì)在完成后觸發(fā)一個(gè)事件或回調(diào)函數(shù),通知應(yīng)用程序異步操作已經(jīng)完成,并將操作結(jié)果傳遞給應(yīng)用程序。

異步實(shí)踐指的是使用異步編程模型來(lái)優(yōu)化系統(tǒng)性能和響應(yīng)速度的一系列技術(shù)和方法。異步實(shí)踐的核心思想是將那些可能導(dǎo)致阻塞的操作(例如IO操作、數(shù)據(jù)庫(kù)訪問(wèn)等)轉(zhuǎn)換為異步操作,以保證系統(tǒng)的高并發(fā)性能和響應(yīng)速度。異步實(shí)踐還包括一些常見(jiàn)的技術(shù)和方法,例如使用事件驅(qū)動(dòng)、異步回調(diào)、異步消息隊(duì)列等,來(lái)實(shí)現(xiàn)代碼的異步執(zhí)行和解耦合。

嵌入式開(kāi)發(fā)中,異步實(shí)踐也非常重要。例如,使用STM32等微控制器進(jìn)行嵌入式開(kāi)發(fā)時(shí),可以使用異步編程模型和異步實(shí)踐技術(shù)來(lái)實(shí)現(xiàn)對(duì)外設(shè)的異步控制和數(shù)據(jù)采集等功能,從而提高系統(tǒng)的性能和可靠性。

1.使用異步函數(shù)或異步API:嵌入式系統(tǒng)中的許多操作都是耗時(shí)的,例如IO操作、網(wǎng)絡(luò)通信等,如果使用同步方式進(jìn)行處理,會(huì)導(dǎo)致當(dāng)前線程被阻塞,影響系統(tǒng)的響應(yīng)速度。因此,在嵌入式系統(tǒng)中,通常使用異步函數(shù)或異步API來(lái)實(shí)現(xiàn)這些操作。異步函數(shù)或API會(huì)在后臺(tái)啟動(dòng)一個(gè)或多個(gè)線程或任務(wù)來(lái)處理請(qǐng)求,從而避免當(dāng)前線程被阻塞,同時(shí)也可以提高系統(tǒng)的并發(fā)性能和響應(yīng)速度。

2.使用中斷機(jī)制:嵌入式系統(tǒng)中,許多操作都是通過(guò)中斷機(jī)制來(lái)實(shí)現(xiàn)的,例如定時(shí)器中斷、外部中斷等。使用中斷機(jī)制可以使得系統(tǒng)不必等待某些操作的完成,而是在該操作完成時(shí)自動(dòng)觸發(fā)中斷處理程序,從而實(shí)現(xiàn)異步處理。

3.使用事件驅(qū)動(dòng)模型:事件驅(qū)動(dòng)模型是一種基于事件和回調(diào)函數(shù)的編程模型,它通過(guò)監(jiān)聽(tīng)特定的事件來(lái)觸發(fā)對(duì)應(yīng)的回調(diào)函數(shù)。在嵌入式系統(tǒng)中,事件驅(qū)動(dòng)模型可以用來(lái)實(shí)現(xiàn)異步操作的回調(diào)函數(shù)。例如,在處理串口通信時(shí),可以使用事件驅(qū)動(dòng)模型監(jiān)聽(tīng)串口接收數(shù)據(jù)的事件,并在數(shù)據(jù)到達(dá)時(shí)觸發(fā)對(duì)應(yīng)的回調(diào)函數(shù)進(jìn)行數(shù)據(jù)處理。

4.使用消息隊(duì)列:消息隊(duì)列是一種將消息異步傳遞給消費(fèi)者的機(jī)制。在嵌入式系統(tǒng)中,可以使用消息隊(duì)列來(lái)實(shí)現(xiàn)異步任務(wù)的處理。例如,在處理圖像識(shí)別時(shí),可以使用消息隊(duì)列來(lái)異步處理圖像數(shù)據(jù),從而避免阻塞當(dāng)前任務(wù)的執(zhí)行。

引腳的開(kāi)漏模式是指在輸出電平時(shí),將該引腳連接的晶體管的源極或發(fā)射極與地相連,使得該引腳的輸出電平只能為低電平(0V)或高阻態(tài)(電阻很大,相當(dāng)于沒(méi)有連接)。開(kāi)漏模式的引腳通常被稱(chēng)為開(kāi)漏輸出引腳。

在開(kāi)漏模式下,輸出引腳不會(huì)直接提供高電平的輸出,而是通過(guò)連接一個(gè)上拉電阻或使用內(nèi)部上拉電阻來(lái)實(shí)現(xiàn)。上拉電阻的值通常很大,因此在輸出高電平時(shí),輸出電平可能不穩(wěn)定,容易受到外部干擾的影響。

開(kāi)漏模式的引腳通常用于控制外部電路中的開(kāi)關(guān)元件(例如晶體管、繼電器等),以及驅(qū)動(dòng)I2C總線等外部設(shè)備。在這些場(chǎng)景中,開(kāi)漏模式的引腳可以通過(guò)控制開(kāi)關(guān)元件的導(dǎo)通和斷開(kāi)來(lái)實(shí)現(xiàn)對(duì)外部設(shè)備的控制,同時(shí)也可以避免由于外部設(shè)備的反向電流等問(wèn)題對(duì)系統(tǒng)的損害。

需要注意的是,開(kāi)漏模式的引腳在輸出高電平時(shí)不能直接驅(qū)動(dòng)負(fù)載,需要通過(guò)使用外部上拉電阻或使用內(nèi)部上拉電阻來(lái)實(shí)現(xiàn),同時(shí)在設(shè)計(jì)電路時(shí)需要考慮到該引腳的輸出電流和負(fù)載電流的匹配,以避免對(duì)系統(tǒng)的損害。

引腳的推挽模式是指在輸出電平時(shí),將該引腳連接的晶體管的源極或發(fā)射極與電源相連,使得該引腳的輸出電平可以為高電平(電源電壓)或低電平(0V)。推挽模式的引腳通常被稱(chēng)為推挽輸出引腳。

在推挽模式下,輸出引腳可以直接提供高電平和低電平的輸出,并且輸出電流通常比較大,可以直接驅(qū)動(dòng)一定的負(fù)載電流。

推挽模式的引腳通常用于控制外部電路中的驅(qū)動(dòng)元件(例如LED、直流電機(jī)等),以及驅(qū)動(dòng)SPI總線等外部設(shè)備。在這些場(chǎng)景中,推挽模式的引腳可以通過(guò)控制驅(qū)動(dòng)元件的導(dǎo)通和斷開(kāi)來(lái)實(shí)現(xiàn)對(duì)外部設(shè)備的控制,同時(shí)也可以提供較大的輸出電流以驅(qū)動(dòng)負(fù)載電流。

需要注意的是,在推挽模式下,引腳的輸出電平不能為高阻態(tài),需要確保連接的晶體管在輸出低電平時(shí)處于關(guān)閉狀態(tài),否則可能導(dǎo)致電路不穩(wěn)定或電路損壞。

相同點(diǎn):

都可以作為引腳的輸出模式,輸出高電平和低電平的電壓信號(hào);

都可以用來(lái)控制外部電路中的驅(qū)動(dòng)元件,例如LED、直流電機(jī)等。

不同點(diǎn):

開(kāi)漏模式的引腳輸出電平只能為低電平或高阻態(tài),需要通過(guò)上拉電阻來(lái)實(shí)現(xiàn)高電平的輸出;推挽模式的引腳輸出電平可以為低電平或高電平;

推挽模式的引腳具有較大的輸出電流能力,可以直接驅(qū)動(dòng)負(fù)載電流,而開(kāi)漏模式的引腳需要通過(guò)上拉電阻來(lái)驅(qū)動(dòng)負(fù)載電流;

開(kāi)漏模式的引腳通常用于控制外部電路中的開(kāi)關(guān)元件(例如晶體管、繼電器等),以及驅(qū)動(dòng)I2C總線等外部設(shè)備;而推挽模式的引腳通常用于控制外部電路中的驅(qū)動(dòng)元件(例如LED、直流電機(jī)等),以及驅(qū)動(dòng)SPI總線等外部設(shè)備。

推挽模式的引腳適合需要較大輸出電流的場(chǎng)景,例如驅(qū)動(dòng)LED、直流電機(jī)等負(fù)載,同時(shí)也適合驅(qū)動(dòng)SPI總線等外部設(shè)備;

開(kāi)漏模式的引腳適合需要通過(guò)控制開(kāi)關(guān)元件的導(dǎo)通和斷開(kāi)來(lái)實(shí)現(xiàn)控制的場(chǎng)景,例如驅(qū)動(dòng)I2C總線等外部設(shè)備。

當(dāng)外設(shè)模塊需要從CPU讀取數(shù)據(jù)時(shí),它需要按照APB2總線時(shí)鐘的節(jié)奏來(lái)發(fā)送讀取請(qǐng)求,并在每個(gè)APB2時(shí)鐘周期中傳輸一個(gè)數(shù)據(jù)位,直到所有數(shù)據(jù)都被讀取完畢為止。

施密特觸發(fā)輸入是一種常見(jiàn)的數(shù)字電路輸入技術(shù),也被稱(chēng)為施密特觸發(fā)器輸入或雙穩(wěn)態(tài)輸入。施密特觸發(fā)輸入通過(guò)特殊的電路設(shè)計(jì),能夠使輸入信號(hào)的干擾和抖動(dòng)不會(huì)輕易導(dǎo)致輸出信號(hào)的誤判或不穩(wěn)定。

施密特觸發(fā)輸入的基本原理是在輸入信號(hào)的電壓上下閾值范圍內(nèi),輸出信號(hào)維持穩(wěn)定的高或低電平;而當(dāng)輸入信號(hào)超過(guò)一定的閾值范圍時(shí),輸出信號(hào)則發(fā)生明顯的翻轉(zhuǎn),并維持到輸入信號(hào)回到另一個(gè)閾值范圍時(shí)才再次翻轉(zhuǎn)。這種特性可以有效地防止輸入信號(hào)的干擾和抖動(dòng)導(dǎo)致輸出信號(hào)的誤判或不穩(wěn)定。

施密特觸發(fā)輸入常見(jiàn)的應(yīng)用場(chǎng)景包括數(shù)字信號(hào)的輸入、信號(hào)的去抖動(dòng)處理、信號(hào)的濾波處理等。在數(shù)字電路的設(shè)計(jì)和實(shí)現(xiàn)中,施密特觸發(fā)輸入可以提高電路的抗干擾能力和穩(wěn)定性,從而提高數(shù)字系統(tǒng)的性能和可靠性。

P-MOS

P-MOS是一種由p型半導(dǎo)體材料制成的MOSFET晶體管,其控制方式是通過(guò)在柵極和源極之間施加負(fù)電壓來(lái)控制晶體管的導(dǎo)通狀態(tài)。當(dāng)柵極電壓低于源極電壓時(shí),P-MOS導(dǎo)通;當(dāng)柵極電壓高于源極電壓時(shí),P-MOS截止。P-MOS的導(dǎo)通電阻相對(duì)較大,通常用于高電平驅(qū)動(dòng)電路中。

N-MOS

N-MOS是一種由n型半導(dǎo)體材料制成的MOSFET晶體管,其控制方式是通過(guò)在柵極和源極之間施加正電壓來(lái)控制晶體管的導(dǎo)通狀態(tài)。當(dāng)柵極電壓高于源極電壓時(shí),N-MOS導(dǎo)通;當(dāng)柵極電壓低于源極電壓時(shí),N-MOS截止。N-MOS的導(dǎo)通電阻相對(duì)較小,通常用于低電平驅(qū)動(dòng)電路中。

弱上拉是指在輸入端口(比如微控制器的GPIO口)上通過(guò)加入一個(gè)大約為10kΩ的電阻,從而使該輸入端口與VCC(正電源)之間形成一個(gè)電阻分壓網(wǎng)絡(luò),從而使輸入端口的電壓在沒(méi)有外部信號(hào)的情況下趨向于高電平,即被上拉到VCC電平。

弱上拉的作用在于,當(dāng)沒(méi)有外部信號(hào)輸入時(shí),輸入端口會(huì)被保持在一個(gè)已知的狀態(tài),從而有效地避免了輸入端口因?yàn)橥獠啃盘?hào)干擾而導(dǎo)致的錯(cuò)誤輸入。同時(shí),在需要對(duì)輸入端口進(jìn)行讀取的時(shí)候,由于弱上拉電阻的存在,輸入端口的狀態(tài)可以更容易地被檢測(cè)到。

我們其實(shí)就是操作IO的輸出和輸入,各種功能到底怎么樣的配置?

c1952f3e-de2c-11ed-bfe3-dac502259ad0.pngc1b88646-de2c-11ed-bfe3-dac502259ad0.png

這么多的定時(shí)器,讓我來(lái)給大家寫(xiě)一寫(xiě)

STM32定時(shí)器的輸入捕獲功能可以用來(lái)測(cè)量外部信號(hào)的時(shí)間間隔、頻率和脈寬等信息,常用于測(cè)量脈沖信號(hào)、編碼器信號(hào)、PWM信號(hào)等。

具體實(shí)現(xiàn)步驟如下:

配置定時(shí)器為輸入捕獲模式。

配置定時(shí)器的輸入捕獲通道,選擇輸入捕獲邊沿(上升沿或下降沿)觸發(fā)測(cè)量。

在輸入捕獲中斷服務(wù)函數(shù)中讀取捕獲寄存器的值,計(jì)算出測(cè)量值。

根據(jù)需要,可以通過(guò)中斷或DMA方式進(jìn)行多次測(cè)量,并對(duì)測(cè)量結(jié)果進(jìn)行平均值計(jì)算等處理。

下面是一個(gè)基于STM32 HAL庫(kù)的輸入捕獲示例代碼,以測(cè)量外部脈沖信號(hào)的周期和脈寬為例:

#include "stm32f4xx_hal.h"


TIM_HandleTypeDef htim2;
uint32_t pulse_width = 0;
uint32_t period = 0;


void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM2)
    {
        static uint32_t last_capture = 0;
        uint32_t capture = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
        uint32_t diff = capture - last_capture;
        last_capture = capture;
        
        if (diff > 0) {
            period = diff;
        } else {
            pulse_width = -diff;
        }
    }
}


int main(void)
{
    HAL_Init();
    __HAL_RCC_TIM2_CLK_ENABLE();
    
    htim2.Instance = TIM2;
    htim2.Init.Prescaler = 83; // 84MHz / 84 = 1MHz
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim2.Init.Period = 0xFFFF;
    htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_IC_Init(&htim2);


    TIM_IC_InitTypeDef sConfigIC;
    sConfigIC.ICPolarity = TIM_ICPOLARITY_BOTHEDGE;
    sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
    sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
    sConfigIC.ICFilter = 0;
    HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1);


    HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);


    while (1)
    {
        // do something
    }
}

在上述代碼中,使用了TIM2定時(shí)器的通道1進(jìn)行輸入捕獲,并開(kāi)啟了中斷模式(HAL_TIM_IC_Start_IT函數(shù))。在輸入捕獲中斷服務(wù)函數(shù)中,計(jì)算出上一次和本次捕獲的時(shí)間差,根據(jù)時(shí)間差的正負(fù)值來(lái)區(qū)分計(jì)算周期還是脈寬,最終得到測(cè)量結(jié)果。

STM32定時(shí)器的輸出比較功能可以用來(lái)生成PWM波形、產(chǎn)生觸發(fā)信號(hào)、實(shí)現(xiàn)周期性的定時(shí)器中斷等。其實(shí)現(xiàn)步驟如下:

配置定時(shí)器為輸出比較模式,并選擇輸出比較通道。

配置定時(shí)器的時(shí)基參數(shù),包括計(jì)數(shù)器的時(shí)鐘頻率、計(jì)數(shù)器的計(jì)數(shù)范圍等。

配置輸出比較模式下的通道參數(shù),包括輸出模式(比較輸出或PWM輸出)、比較值等。

啟動(dòng)定時(shí)器,使其開(kāi)始計(jì)數(shù)并產(chǎn)生輸出信號(hào)。

下面是一個(gè)基于STM32 HAL庫(kù)的輸出比較示例代碼,以生成50%占空比、1kHz的PWM信號(hào)為例:

#include "stm32f4xx_hal.h"


TIM_HandleTypeDef htim2;


void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    if (htim->Instance == TIM2)
    {
        __HAL_RCC_TIM2_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();


        GPIO_InitStruct.Pin = GPIO_PIN_5;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    }
}


void MX_TIM2_Init(void)
{
    TIM_ClockConfigTypeDef sClockSourceConfig = {0};
    TIM_MasterConfigTypeDef sMasterConfig = {0};
    TIM_OC_InitTypeDef sConfigOC = {0};


    htim2.Instance = TIM2;
    htim2.Init.Prescaler = 83; // 84MHz / 84 = 1MHz
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim2.Init.Period = 999; // 1kHz PWM
    htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&htim2);


    sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
    HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);


    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);


    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 499; // 50% duty cycle
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
}


int main(void)
{
    HAL_Init();
    MX_TIM2_Init();
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
    
    while (1)
    {
        // do something
    }
}

STM32定時(shí)器的互補(bǔ)輸出功能可以用來(lái)實(shí)現(xiàn)半橋或全橋逆變器、電機(jī)驅(qū)動(dòng)器等應(yīng)用。它通過(guò)在同一個(gè)定時(shí)器中同時(shí)配置兩個(gè)輸出比較通道,一個(gè)通道輸出高電平,另一個(gè)通道輸出低電平,以實(shí)現(xiàn)互補(bǔ)輸出的功能。

下面是一個(gè)基于STM32HAL庫(kù)的互補(bǔ)輸出示例代碼,以實(shí)現(xiàn)半橋逆變器為例:

#include "stm32f4xx_hal.h"


TIM_HandleTypeDef htim1;


void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    if (htim->Instance == TIM1)
    {
        __HAL_RCC_TIM1_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();
        __HAL_RCC_GPIOE_CLK_ENABLE();


        GPIO_InitStruct.Pin = GPIO_PIN_8;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


        GPIO_InitStruct.Pin = GPIO_PIN_13;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
        HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
    }
}


void MX_TIM1_Init(void)
{
    TIM_ClockConfigTypeDef sClockSourceConfig = {0};
    TIM_MasterConfigTypeDef sMasterConfig = {0};
    TIM_OC_InitTypeDef sConfigOC = {0};


    htim1.Instance = TIM1;
    htim1.Init.Prescaler = 839; // 84MHz / 840 = 100kHz
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim1.Init.Period = 9999; // 10Hz PWM
    htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    htim1.Init.RepetitionCounter = 1; // 2 channels, repetition count = 1
    HAL_TIM_PWM_Init(&htim1);


    sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
    HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig);


    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
    HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig);


    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 4999; // 50% duty cycle
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2);


    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
    HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
    HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
}


int main(void)
{
    HAL_Init();
    MX_TIM1_Init();
    
    while (1)
    {
}
}

STM32定時(shí)器的剎車(chē)輸入是用于實(shí)現(xiàn)電機(jī)或馬達(dá)控制器的緊急停止或剎車(chē)功能。當(dāng)剎車(chē)輸入信號(hào)被觸發(fā)時(shí),定時(shí)器立即停止計(jì)數(shù),并且輸出保持在一個(gè)預(yù)定義的狀態(tài)(例如輸出低電平或高電平)。在應(yīng)用中,剎車(chē)輸入通常是由硬件電路(如電機(jī)控制器)提供的。

STM32定時(shí)器的剎車(chē)輸入通常與定時(shí)器的輸入捕獲或輸出比較功能結(jié)合使用。例如,在一個(gè)三相電機(jī)驅(qū)動(dòng)器中,定時(shí)器的輸入捕獲功能用于捕獲電機(jī)轉(zhuǎn)速,輸出比較功能用于產(chǎn)生PWM波形驅(qū)動(dòng)電機(jī),而剎車(chē)輸入則用于實(shí)現(xiàn)急停功能。

下面是一個(gè)基于STM32 HAL庫(kù)的剎車(chē)輸入示例代碼:

#include "stm32f4xx_hal.h"


TIM_HandleTypeDef htim1;


void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    if (htim->Instance == TIM1)
    {
        __HAL_RCC_TIM1_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();


        GPIO_InitStruct.Pin = GPIO_PIN_8;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    }
}


void MX_TIM1_Init(void)
{
    TIM_ClockConfigTypeDef sClockSourceConfig = {0};
    TIM_MasterConfigTypeDef sMasterConfig = {0};
    TIM_OC_InitTypeDef sConfigOC = {0};


    htim1.Instance = TIM1;
    htim1.Init.Prescaler = 839; // 84MHz / 840 = 100kHz
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim1.Init.Period = 999; // 1kHz PWM
    htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&htim1);


    sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
    HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig);


    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
    HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig);


    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 499; // 50% duty cycle
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);


    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
}


int main(void)
{
    HAL_Init();
    MX_TIM1_Init();
    
    while (1)
    {
        // Main loop
    }
}


void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM1 && htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
    {
        // Handle PWM pulse finished event
    }
}

STM32定時(shí)器的外部觸發(fā)時(shí)鐘輸入是一種使定時(shí)器以外部信號(hào)作為計(jì)數(shù)時(shí)鐘的功能。它允許定時(shí)器在外部觸發(fā)信號(hào)到來(lái)時(shí)開(kāi)始計(jì)數(shù),并且不依賴于內(nèi)部時(shí)鐘。這種功能常用于需要精確時(shí)間測(cè)量或同步的應(yīng)用,如數(shù)據(jù)采集、PWM控制和通信接口等。

STM32定時(shí)器的外部觸發(fā)時(shí)鐘輸入可通過(guò)使用TIMx_ETR (外部觸發(fā)器)引腳來(lái)實(shí)現(xiàn)。在應(yīng)用中,可以選擇使用外部觸發(fā)器引腳(例如TIM1_ETR),然后使用寄存器配置定時(shí)器的觸發(fā)模式和觸發(fā)源。

下面是一個(gè)基于STM32 HAL庫(kù)的外部觸發(fā)時(shí)鐘輸入示例代碼:

#include "stm32f4xx_hal.h"


TIM_HandleTypeDef htim1;


void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM1)
    {
        __HAL_RCC_TIM1_CLK_ENABLE();
    }
}


void MX_TIM1_Init(void)
{
    TIM_ClockConfigTypeDef sClockSourceConfig = {0};
    TIM_MasterConfigTypeDef sMasterConfig = {0};


    htim1.Instance = TIM1;
    htim1.Init.Prescaler = 8399; // 84MHz / 8400 = 10kHz
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim1.Init.Period = 999; // 10Hz timer
    htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_Base_Init(&htim1);


    sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_ETRMODE2;
    sClockSourceConfig.ClockPolarity = TIM_CLOCKPOLARITY_NONINVERTED;
    sClockSourceConfig.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1;
    sClockSourceConfig.ClockFilter = 0;
    HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig);


    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
    HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig);


    HAL_TIM_Base_Start(&htim1);
}


int main(void)
{
    HAL_Init();
    MX_TIM1_Init();


    while (1)
    {
        // Main loop
    }
}

TM32定時(shí)器是一種用于計(jì)時(shí)和控制輸出信號(hào)的硬件模塊,它具有多種功能和操作模式。STM32定時(shí)器的原理是利用一個(gè)計(jì)數(shù)器(Counter)來(lái)計(jì)數(shù),當(dāng)計(jì)數(shù)器的值達(dá)到某個(gè)閾值時(shí),就會(huì)產(chǎn)生一個(gè)中斷或觸發(fā)一個(gè)事件。其中,計(jì)數(shù)器的計(jì)數(shù)基準(zhǔn)由定時(shí)器時(shí)鐘源(Timer Clock Source)提供,可以是內(nèi)部時(shí)鐘(例如APB1時(shí)鐘)或外部時(shí)鐘(例如外部晶振)。

STM32定時(shí)器的計(jì)數(shù)器可以通過(guò)多種方式進(jìn)行控制和配置,其中包括:

c1db6e54-de2c-11ed-bfe3-dac502259ad0.png

接著看看串口的功能

分頻器(Prescaler):通過(guò)分頻器可以將定時(shí)器時(shí)鐘源的頻率降低,從而改變計(jì)數(shù)器的計(jì)數(shù)速度。分頻器的分頻值由預(yù)分頻器寄存器(PSC)設(shè)置,它是一個(gè)16位寄存器。

自動(dòng)重載寄存器(Auto-reload Register):自動(dòng)重載寄存器(ARR)存儲(chǔ)定時(shí)器計(jì)數(shù)器的最大值。當(dāng)計(jì)數(shù)器的計(jì)數(shù)值達(dá)到自動(dòng)重載寄存器的值時(shí),計(jì)數(shù)器會(huì)重新從零開(kāi)始計(jì)數(shù)。這種方式通常用于周期性產(chǎn)生中斷或控制PWM波形的占空比。

捕獲寄存器(Capture Register):捕獲寄存器(CCR)用于存儲(chǔ)定時(shí)器計(jì)數(shù)器的當(dāng)前值。當(dāng)捕獲到一個(gè)特定事件時(shí),捕獲寄存器會(huì)自動(dòng)被更新。這種方式通常用于測(cè)量外部事件的持續(xù)時(shí)間或頻率,例如測(cè)量脈沖寬度或計(jì)算輸入信號(hào)的頻率。

比較寄存器(Compare Register):比較寄存器(CCR)用于存儲(chǔ)與計(jì)數(shù)器進(jìn)行比較的值。當(dāng)計(jì)數(shù)器的值達(dá)到比較寄存器的值時(shí),會(huì)觸發(fā)中斷或控制輸出信號(hào)的狀態(tài)。這種方式通常用于產(chǎn)生精確的定時(shí)事件或控制PWM波形的頻率和占空比。

TM32的UART模塊支持全雙工模式,其中數(shù)據(jù)可以在同一個(gè)UART通道上同時(shí)發(fā)送和接收。

要使用STM32的UART模塊進(jìn)行全雙工通信,您需要進(jìn)行以下設(shè)置:

配置UART模塊的時(shí)鐘和波特率,使其能夠與外部設(shè)備通信。

配置UART模塊的發(fā)送和接收引腳,以便將數(shù)據(jù)發(fā)送到外部設(shè)備并從外部設(shè)備接收數(shù)據(jù)。

配置UART模塊的工作模式為全雙工模式,這可以通過(guò)將UART模塊的USART_InitTypeDef結(jié)構(gòu)體中的Mode字段設(shè)置為USART_MODE_TX_RX來(lái)實(shí)現(xiàn)。

在程序中編寫(xiě)發(fā)送和接收函數(shù),以便發(fā)送和接收數(shù)據(jù)。

以下是一個(gè)使用STM32的UART模塊進(jìn)行全雙工通信的示例代碼:

#include "stm32f10x.h"
#include 


USART_InitTypeDef USART_InitStructure;


void USART1_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);


    USART_InitStructure.USART_BaudRate = 115200;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    USART_Init(USART1, &USART_InitStructure);


    USART_Cmd(USART1, ENABLE);
}


void USART1_SendChar(char ch)
{
    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    USART_SendData(USART1, ch);
}


char USART1_ReceiveChar(void)
{
    while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
    return USART_ReceiveData(USART1);
}


int main(void)
{
    char received_char;
    USART1_Init();
    
    while(1)
    {
        //發(fā)送數(shù)據(jù)
        USART1_SendChar('H');
        USART1_SendChar('e');
        USART1_SendChar('l');
        USART1_SendChar('l');
        USART1_SendChar('o');
        USART1_SendChar('
');
        
        //接收數(shù)據(jù)
        received_char = USART1_ReceiveChar();
        printf("Received: %c
", received_char);
    }

單工模式(Simplex Mode):在單工模式下,串口只能在一個(gè)方向上傳輸數(shù)據(jù),即數(shù)據(jù)只能單向發(fā)送或接收。在單工模式下,無(wú)法同時(shí)發(fā)送和接收數(shù)據(jù)。這種模式的應(yīng)用場(chǎng)景較為有限,通常只用于簡(jiǎn)單的數(shù)據(jù)采集或監(jiān)測(cè)任務(wù)。

半雙工模式(Half Duplex Mode):在半雙工模式下,串口可以在兩個(gè)方向上傳輸數(shù)據(jù),但不能同時(shí)進(jìn)行。也就是說(shuō),數(shù)據(jù)可以在發(fā)送和接收之間切換,但不能同時(shí)進(jìn)行。這種模式廣泛應(yīng)用于需要雙向通信的應(yīng)用場(chǎng)景,例如工業(yè)自動(dòng)化機(jī)器人控制。

全雙工模式(Full Duplex Mode):在全雙工模式下,串口可以在兩個(gè)方向同時(shí)傳輸數(shù)據(jù),也就是說(shuō),可以同時(shí)發(fā)送和接收數(shù)據(jù)。這種模式的應(yīng)用場(chǎng)景最為廣泛,通常用于數(shù)據(jù)通信、網(wǎng)絡(luò)通信等領(lǐng)域。

不同串口模式的異同在于其能否同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收。單工模式只能單向傳輸數(shù)據(jù),半雙工模式可以雙向傳輸數(shù)據(jù)但不能同時(shí)進(jìn)行,全雙工模式可以同時(shí)進(jìn)行數(shù)據(jù)的雙向傳輸。因此,在實(shí)際應(yīng)用中,需要根據(jù)具體的場(chǎng)景和需求選擇適合的串口模式。

c2021f5e-de2c-11ed-bfe3-dac502259ad0.png

SPI全雙工模式:在SPI全雙工模式下,數(shù)據(jù)可以同時(shí)在主機(jī)和從機(jī)之間傳輸。主機(jī)通過(guò)發(fā)送時(shí)鐘信號(hào)來(lái)控制數(shù)據(jù)傳輸,每次傳輸一個(gè)字節(jié)或者一個(gè)字(16位)。SPI全雙工模式是最常用的SPI模式,應(yīng)用于數(shù)據(jù)傳輸速度要求較高、需要雙向數(shù)據(jù)傳輸?shù)膱?chǎng)景。

SPI半雙工模式:在SPI半雙工模式下,數(shù)據(jù)只能在主機(jī)和從機(jī)之間單向傳輸。主機(jī)先發(fā)送數(shù)據(jù),然后從機(jī)接收數(shù)據(jù),或者從機(jī)先發(fā)送數(shù)據(jù),然后主機(jī)接收數(shù)據(jù)。SPI半雙工模式應(yīng)用于一些只需要單向數(shù)據(jù)傳輸?shù)膱?chǎng)景,例如LED顯示、IO擴(kuò)展等。

SPI主機(jī)模式:在SPI主機(jī)模式下,主機(jī)控制SPI通信的時(shí)序和數(shù)據(jù)傳輸,從機(jī)被動(dòng)接受并響應(yīng)主機(jī)的控制。SPI主機(jī)模式常用于控制多個(gè)SPI從機(jī)的場(chǎng)景。

SPI從機(jī)模式:在SPI從機(jī)模式下,從機(jī)被動(dòng)接受來(lái)自主機(jī)的控制和數(shù)據(jù)傳輸。SPI從機(jī)模式應(yīng)用于一些只需要單個(gè)從機(jī)的場(chǎng)景。

不同SPI模式的異同在于其能否同時(shí)進(jìn)行雙向數(shù)據(jù)傳輸,以及數(shù)據(jù)傳輸時(shí)的時(shí)序和控制方式。

SPI全雙工模式和半雙工模式的主要區(qū)別在于雙向傳輸?shù)哪芰?,而SPI主機(jī)模式和從機(jī)模式的主要區(qū)別在于SPI通信的控制者是主機(jī)還是從機(jī)。

SPI(Serial Peripheral Interface,串行外圍設(shè)備接口)是一種簡(jiǎn)單的、高速的串行通信協(xié)議,用于在微控制器和外部設(shè)備之間傳輸數(shù)據(jù)。SPI協(xié)議是一種同步協(xié)議,數(shù)據(jù)在時(shí)鐘信號(hào)的控制下進(jìn)行傳輸。

SPI協(xié)議的基本通信原理是:

在SPI通信中,需要至少兩個(gè)設(shè)備,一個(gè)作為主設(shè)備,另一個(gè)或多個(gè)作為從設(shè)備。主設(shè)備負(fù)責(zé)控制SPI通信的時(shí)序和數(shù)據(jù)傳輸,從設(shè)備被動(dòng)接受并響應(yīng)主設(shè)備的控制。

SPI通信中有四條信號(hào)線:SCK、MOSI、MISO和SS。SCK是時(shí)鐘信號(hào)線,由主設(shè)備產(chǎn)生;MOSI是主設(shè)備發(fā)送數(shù)據(jù)到從設(shè)備的信號(hào)線;MISO是從設(shè)備發(fā)送數(shù)據(jù)到主設(shè)備的信號(hào)線;SS是片選信號(hào)線,用于選擇從設(shè)備。在多個(gè)從設(shè)備的情況下,每個(gè)從設(shè)備都需要有一個(gè)獨(dú)立的片選信號(hào)線。

在SPI通信中,主設(shè)備產(chǎn)生時(shí)鐘信號(hào),每個(gè)時(shí)鐘周期傳輸一個(gè)比特位,總線的數(shù)據(jù)傳輸是由主設(shè)備控制的。主設(shè)備先選擇一個(gè)從設(shè)備,即在對(duì)應(yīng)的片選信號(hào)線拉低,然后向從設(shè)備發(fā)送數(shù)據(jù)。從設(shè)備在接收到數(shù)據(jù)后,根據(jù)協(xié)議進(jìn)行響應(yīng),并將響應(yīng)數(shù)據(jù)發(fā)送給主設(shè)備。主設(shè)備接收完從設(shè)備的響應(yīng)數(shù)據(jù)后,選擇下一個(gè)從設(shè)備或結(jié)束通信。

SPI協(xié)議的優(yōu)點(diǎn)是傳輸速度快、控制簡(jiǎn)單、通信穩(wěn)定可靠。SPI通信速度可以達(dá)到幾十MHz,具有很高的實(shí)時(shí)性和實(shí)時(shí)控制性能。

c2237e74-de2c-11ed-bfe3-dac502259ad0.png

c2478224-de2c-11ed-bfe3-dac502259ad0.png

c2607086-de2c-11ed-bfe3-dac502259ad0.png

c280c12e-de2c-11ed-bfe3-dac502259ad0.png

三瓜倆棗的價(jià)格還給個(gè)USB

c29d650e-de2c-11ed-bfe3-dac502259ad0.png

USB OTG(On-The-Go)控制器:USB OTG控制器可以支持主機(jī)和設(shè)備兩種USB模式,因此可以在連接不同USB設(shè)備時(shí)自動(dòng)識(shí)別主機(jī)和設(shè)備角色,并切換到相應(yīng)的模式。USB OTG控制器支持USB 2.0標(biāo)準(zhǔn),能夠?qū)崿F(xiàn)高速(480 Mbps)、全速(12 Mbps)和低速(1.5 Mbps)的數(shù)據(jù)傳輸。此外,USB OTG控制器還支持Suspend和Resume模式,可以使設(shè)備在空閑狀態(tài)下降低功耗。

USB設(shè)備接口:STM32F103系列微控制器還內(nèi)置了USB設(shè)備接口,可以直接連接到PC或其他USB主機(jī)設(shè)備。在這種模式下,微控制器可以作為USB設(shè)備與主機(jī)進(jìn)行通信,如傳輸數(shù)據(jù)、控制外圍設(shè)備等。USB設(shè)備接口支持USB 2.0標(biāo)準(zhǔn),能夠?qū)崿F(xiàn)高速、全速和低速的數(shù)據(jù)傳輸。

USB引導(dǎo)加載器:STM32F103系列微控制器還支持通過(guò)USB引導(dǎo)加載器(USB bootloader)對(duì)程序進(jìn)行燒錄,這種方式不需要額外的燒錄器件,只需通過(guò)USB接口即可進(jìn)行程序下載。這種方式便于生產(chǎn)線上的批量燒錄和固件更新。

USB DMA(Direct Memory Access)控制器:STM32F103系列微控制器還支持USB DMA控制器,可以實(shí)現(xiàn)高效的USB數(shù)據(jù)傳輸。DMA控制器能夠直接將USB數(shù)據(jù)傳輸?shù)絻?nèi)存中,從而減少CPU的負(fù)擔(dān),提高數(shù)據(jù)傳輸效率。

c2c7092c-de2c-11ed-bfe3-dac502259ad0.pngc2f19b92-de2c-11ed-bfe3-dac502259ad0.png

c3174572-de2c-11ed-bfe3-dac502259ad0.png

完事了家人們

SDIO是一種標(biāo)準(zhǔn)的接口協(xié)議,它可以用于SD卡,MMC(MultiMediaCard)卡等存儲(chǔ)卡的數(shù)據(jù)交換。STM32F103的SDIO接口支持SD卡的SD1.0、SD1.1、SD2.0和SD3.0標(biāo)準(zhǔn),最高傳輸速度可達(dá)到48Mbps。

SDIO接口的主要功能包括:

初始化:配置SDIO時(shí)鐘、總線寬度、傳輸模式、數(shù)據(jù)超時(shí)等參數(shù)。

SD卡識(shí)別:通過(guò)發(fā)送CMD0命令使SD卡進(jìn)入Idle狀態(tài),并發(fā)送CMD8命令獲取SD卡的電壓范圍和支持的接口版本。

卡信息讀?。和ㄟ^(guò)發(fā)送CMD9命令讀取SD卡的CSD(Card Specific Data)寄存器和CID(Card Identification)寄存器,獲取SD卡的制造商信息、容量、傳輸速率等信息。

數(shù)據(jù)讀寫(xiě):通過(guò)發(fā)送CMD17和CMD18命令讀取SD卡的數(shù)據(jù)塊,通過(guò)發(fā)送CMD24和CMD25命令寫(xiě)入數(shù)據(jù)塊。

卡狀態(tài)監(jiān)測(cè):通過(guò)發(fā)送CMD13命令查詢SD卡的狀態(tài),包括卡是否準(zhǔn)備好、當(dāng)前傳輸狀態(tài)、錯(cuò)誤狀態(tài)等。

DMA傳輸:STM32F103的SDIO接口支持DMA傳輸,可以減少CPU的負(fù)擔(dān),提高數(shù)據(jù)傳輸效率。

最后兩個(gè),打完收工:

c3312b18-de2c-11ed-bfe3-dac502259ad0.pngc34e3b7c-de2c-11ed-bfe3-dac502259ad0.png

c36a85a2-de2c-11ed-bfe3-dac502259ad0.png

誰(shuí)懂啊,家人們

c382c356-de2c-11ed-bfe3-dac502259ad0.png

輸入和輸出

定時(shí)器這塊沒(méi)有完全吃透,準(zhǔn)備先寫(xiě)51或者是MSP430的時(shí)鐘系統(tǒng)。

c3a203c4-de2c-11ed-bfe3-dac502259ad0.png

這個(gè)就是定時(shí)器的數(shù)據(jù)手冊(cè),不知道為什么倒著寫(xiě)

c3bb6576-de2c-11ed-bfe3-dac502259ad0.png

①CK_PSC是定時(shí)器時(shí)鐘TIMxCLK,經(jīng)APB1預(yù)分頻器后分頻提供。

②定時(shí)器時(shí)鐘經(jīng)過(guò)PSC 預(yù)分頻器之后,即CK_CNT,用來(lái)驅(qū)動(dòng)計(jì)數(shù)器計(jì)數(shù)。

③計(jì)數(shù)器CNT 是一個(gè)16 位的計(jì)數(shù)器,向上,向下,向上/下計(jì)數(shù)模式,最大計(jì)數(shù)值為65535。當(dāng)計(jì)數(shù)達(dá)到自動(dòng)重裝載寄存器的時(shí)候產(chǎn)生更新事件,并清零從頭開(kāi)始計(jì)數(shù)。

④自動(dòng)重裝載寄存器ARR 是一個(gè)16位的寄存器,這里面裝著計(jì)數(shù)器能計(jì)數(shù)的最大數(shù)值。當(dāng)計(jì)數(shù)到這個(gè)值的時(shí)候,如果使能了中斷的話,定時(shí)器就產(chǎn)生溢出中斷。

c3ea5fe8-de2c-11ed-bfe3-dac502259ad0.png

計(jì)數(shù)器信號(hào)

其中CK_CNT時(shí)鐘就類(lèi)似心跳,CNT計(jì)數(shù)器就類(lèi)似心跳次數(shù)。要實(shí)現(xiàn)60秒定時(shí),CK_CNT是1s,我們?cè)O(shè)置CNT計(jì)數(shù)器向上計(jì)數(shù)開(kāi)啟中斷,因?yàn)橹挥幸绯鰰r(shí),也就是計(jì)數(shù)到65535時(shí)才會(huì)有中斷,那么我們?cè)O(shè)置CNT計(jì)數(shù)器為65535-60=65475,開(kāi)始計(jì)時(shí),那么60秒后就會(huì)產(chǎn)生中斷。

設(shè)置自動(dòng)重裝載寄存器ARR也為65475,當(dāng)CNT計(jì)數(shù)器溢出時(shí),自動(dòng)重裝載寄存器ARR就會(huì)自動(dòng)裝載到CNT計(jì)數(shù)器中,就能實(shí)現(xiàn)自動(dòng)循環(huán)定時(shí)60秒。經(jīng)過(guò)上面分析,精確定時(shí)的關(guān)鍵在于CK_CNT的頻率,而CK_CNT是由定時(shí)器時(shí)鐘分頻而來(lái)的。

c404eb9c-de2c-11ed-bfe3-dac502259ad0.png

c4293baa-de2c-11ed-bfe3-dac502259ad0.png

注:為什么需要中間對(duì)齊模式:

在永磁同步電機(jī)的控制中,需要對(duì)電機(jī)的三相定子施加一定的電壓,才能控制電機(jī)轉(zhuǎn)動(dòng)。現(xiàn)在用的較多的是SVPWM(SVPWM的具體原理會(huì)在后面另寫(xiě)一篇博客說(shuō)明),要想產(chǎn)生SVPWM波形,需要控制的三相電壓呈如下形式,即A、B、C三相的電壓是中間對(duì)齊的,這就需要用到stm32定時(shí)器的中間對(duì)齊模式了。

c4586a74-de2c-11ed-bfe3-dac502259ad0.png






審核編輯:劉清

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

    關(guān)注

    6044

    文章

    44629

    瀏覽量

    639033
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9180

    瀏覽量

    369477
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5372

    瀏覽量

    121304
  • STM32
    +關(guān)注

    關(guān)注

    2273

    文章

    10926

    瀏覽量

    357813
  • 電源系統(tǒng)
    +關(guān)注

    關(guān)注

    3

    文章

    628

    瀏覽量

    37921

原文標(biāo)題:萬(wàn)字長(zhǎng)文解讀STM32-1

文章出處:【微信號(hào):TT1827652464,微信公眾號(hào):云深之無(wú)跡】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32從入門(mén)到精通2012年3月版

    ` 本帖最后由 eehome 于 2013-1-5 10:08 編輯 STM32從入門(mén)到精通2012年3月版是很好的學(xué)習(xí)資料,現(xiàn)在分享給大家`
    發(fā)表于 10-29 21:52

    【從零開(kāi)始學(xué)STM32】點(diǎn)亮LED,真的?

    ,led12,led1,led0,led0,0xff}; #endif4,初始化我用了庫(kù)函數(shù),為什么主程序卻去操作寄存器?(明白這個(gè),面試跟面試官這樣說(shuō)出理由,他會(huì)覺(jué)得真的stm32了哦^ ^)5
    發(fā)表于 11-05 22:12

    小寒老師教你學(xué)STM32,10天從入門(mén)到精通

    STM32走向嵌入式的大門(mén),店主小寒老師對(duì)電子線路設(shè)計(jì)、軟件編寫(xiě)等方面,具有較深入的研究,歡迎廣大電子愛(ài)好者交流。本視頻共四套(寄存器+庫(kù)函數(shù))+外加資料大禮包,資料合計(jì)大小10G左右,10天
    發(fā)表于 06-17 12:10

    STM32從入門(mén)到精通神舟I號(hào)板

    STM32從入門(mén)到精通神舟I號(hào)板
    發(fā)表于 08-17 21:06

    STM32從入門(mén)到精通-神舟I號(hào)板

    STM32從入門(mén)到精通-神舟I號(hào)板
    發(fā)表于 03-31 11:45

    STM32從入門(mén)到精通-神舟I號(hào)板

    STM32從入門(mén)到精通-神舟I號(hào)板
    發(fā)表于 04-21 09:27

    真地符號(hào)鏈接和硬鏈接嗎?

    一起來(lái)做題:真地符號(hào)鏈接和硬鏈接嗎?
    發(fā)表于 04-24 10:32

    STM32從入門(mén)到精通-神舟I號(hào)板

    STM32從入門(mén)到精通-神舟I號(hào)板
    發(fā)表于 05-17 08:29

    STM32從入門(mén)到精通-神舟I號(hào)板

    STM32從入門(mén)到精通-神舟I號(hào)板 教程
    發(fā)表于 02-25 13:36

    STM32從入門(mén)到精通-神舟I號(hào)板

    STM32從入門(mén)到精通-神舟I號(hào)板
    發(fā)表于 03-21 13:10

    STM32從入門(mén)到精通

    STM32從入門(mén)到精通
    發(fā)表于 09-30 09:13

    真的Word嗎

    在日常辦公當(dāng)中, Word文檔就是我們最常用的軟件之一。用它我們寫(xiě)論文、寫(xiě)方案、寫(xiě)小說(shuō)等等。但是,真的Word嗎?其實(shí),Word軟件背后,還有一大批隱藏技能不知道。掌握他們,
    發(fā)表于 01-12 08:22

    一級(jí)消防工程師的含金量怎么樣

    一級(jí)消防工程師自從2015年首考以來(lái),短短四年的時(shí)間,便成為證書(shū)行業(yè)的“寵兒”。雖然外界有關(guān)一級(jí)消防工程師證書(shū)“含金量高”的說(shuō)法很多,但還有些“不知情”的小伙伴內(nèi)心還在猶豫,有很多疑慮,消防工程師的含金量究竟如何,以后的發(fā)展趨勢(shì)如何呢?
    的頭像 發(fā)表于 08-28 16:34 ?4036次閱讀

    真的CPU大小端模式嗎?

    真的CPU大小端模式嗎?
    的頭像 發(fā)表于 02-27 16:46 ?2807次閱讀

    什么電子廢品含金量最高

    之后,就演變?yōu)榱穗娮永?常見(jiàn)的線路板有CPU、電腦主板、內(nèi)存條、顯卡等電腦配件含金量較高,按照含金量高低來(lái)說(shuō),醫(yī)療器械中的線路板含金量要比電腦配件中含金量高出許多,還有一些精密儀器
    的頭像 發(fā)表于 07-07 14:44 ?4.3w次閱讀