近日有客戶反映,他在在使用STM32F103C8T6的時候遇到如下問題:
I2C1使用PB6和PB7口,定時器TIM3使用PB0PB1PB4PB5做4路PWM。但在使用的過程中,如果只初始化定時器就沒有任何問題,但是一旦初始化I2C1,那么定時器的通道2(PB5)就不能產(chǎn)生PWM波,而是保持高電平。
客戶查閱手冊得知PB5的默認(rèn)復(fù)用功能是I2C1的SMBA引腳,但是它的I2C1是初始化為I2C模式的,并不是初始化為SMBAS模式,而且同樣的方式在F0上測試是可用的。它本來用的是標(biāo)準(zhǔn)庫開發(fā)的,然后嘗試使用STM32CubeMx進(jìn)行硬件配置,使用HAL庫新建工程,還是存在同樣的問題。
就上面的問題,查看了其有關(guān)I2C1和TIM3d的pwm初始化的部分代碼,并未發(fā)現(xiàn)不對的地方。首先重點(diǎn)懷疑I2C1的配置是否有誤,擔(dān)心客戶在配置I2C1時配置成了SMBAS模式。借助于庫代碼,進(jìn)一步跟蹤下去查看底層的寄存器配置,相關(guān)寄存器操作也沒有發(fā)現(xiàn)問題。
這里TIM3的PWM輸出的幾個管腳有涉及到重映射【REMAP】,從數(shù)據(jù)手冊的管腳分配上來看,如果不開啟I2C1的SMBA模式,不應(yīng)該存在沖突問題。
這邊再次使用STM32CubeMx基于STM32F103C8進(jìn)行同樣配置,結(jié)果跟客戶上面反饋的一樣。不開啟I2C1時,TIM3的所有管腳功能正常;開啟I2C1后,TIM3的部分管腳PB5功能異常。感覺問題可能出在跟TIM3的remap這個地方。打開基于STM32F1系列的重要寶典---參考手冊RM0008,查看核對有關(guān)TIM3的管腳復(fù)用REMAP功能介紹的地方。
現(xiàn)在客戶執(zhí)行的是TIM3的部分管腳重映射功能【partial remap】,從上面表格來看,目前的代碼配置是沒有問題的。畢竟目前如果不開啟I2C1的話TIM3也沒什么異常,所以過來查看這個地方,心里也沒怎么期望從這里找出明顯錯誤,倒是期待從附近能否找到些額外的提示或提醒。這不,表格的下方用了小一號文字明確提示:上述REMAP操作僅適用于64腳、100腳和144腳封裝的芯片.現(xiàn)在客戶用的芯片是STM32F103C8,管腳數(shù)為48,換言之,它是不支持TIM3的復(fù)用功能腳的REMAP操作的。到此,問題應(yīng)該說找到原因了。
過不了幾天,客戶又發(fā)郵件過來繼續(xù)就該問題咨詢。他問,既然說48腳芯片STM32F1不支持TIM3的REMAP操作,那為什么做了REMAP操作后,如果不開啟I2C1,TIM3的4個腳的PWM功能很正常;或者說即使同時開啟了I2C1,PB4的功能還是正常REMAP過來了,只是PB5功能異常。希望我這邊給出進(jìn)一步解釋。
站在用戶的角度有人會發(fā)出類似疑問很正常。其實(shí),既然手冊明確規(guī)定48腳的STM32F1芯片不支持TIM3功能腳的REMAP,它自有其原因和道理。你違背手冊之規(guī)定來操作,結(jié)果的正確性就不能得到保障。有時REMAP沒問題,不代表任何時候進(jìn)行REMAP沒問題。就像討論某個命題,局部、個別情形成立,并不能說它恒成立。打個形象的比方,A今年10歲,B今年20歲。即B比A大10歲,B今年的年齡是A的2倍。顯然,兩個結(jié)論站在今年都成立,到了明年,后面的2倍論就不成立了。
在ST MCU的應(yīng)用過程中,還經(jīng)常出現(xiàn)類似違背手冊規(guī)定的操作以及由此導(dǎo)致的疑問。比方說,有人發(fā)現(xiàn)使用STM32芯片內(nèi)部的flash時,似乎可以使用到手冊規(guī)定以外的空間。用戶這樣使用,芯片的功能或特性是不能得到保障的,作為廠家只能保證芯片手冊規(guī)定區(qū)域的品質(zhì)。又比方,我們知道ST MCU絕大部分芯片都帶有UID,可有些人發(fā)些即使手冊明確沒有UID的芯片,他們似乎發(fā)現(xiàn)這類芯片還是有UID甚至加以利用,詢問這樣是怎么回事或者說是否可靠。同樣,對于類似情形作為廠家也只能保證手冊規(guī)定的特性。超出手冊規(guī)定以外的應(yīng)用,只能用戶自己負(fù)責(zé)。
好,繼續(xù)回到上面的話題。
我們從芯片應(yīng)用的參考手冊上應(yīng)該說找到了明確的規(guī)定或答案。我們還可以查看下基于該芯片有無更為詳盡的勘誤表。后來在官方網(wǎng)站找到了相應(yīng)的勘誤手冊【注:勘誤手冊往往基于芯片型號,即一個系列可能有多個勘誤手冊】,我們在勘誤手冊里也看到關(guān)于上面問題的詳細(xì)描述,可應(yīng)視為對參考手冊的進(jìn)一步補(bǔ)充。
到此,問題原因基本明了。或許還會有人問,上面提到使用STM32CubeMx進(jìn)行過工程配置,配置過程并未發(fā)現(xiàn)異常,或者說配置過程中沒有遇到上面阻礙。既然參考手冊規(guī)定不允許STM32F103C8芯片的TIM3 remap操作,在開啟i2c1時,通過cubeMx配置TIM3的REMAP功能時應(yīng)該出現(xiàn)非法提示才對啊?
我使用的CUBEMX的版本是4.22.0,在開啟I2C1的同時,并按照TIM3的部分REMAP配置時不能說沒有給出提醒,只能說提醒得不夠明確。該提醒可能容易被人忽視,然后可以一路配置下去。
STM32CubeMx配置如下圖,在I2C1那個地方有黃色警示,鼠標(biāo)放過去的時候是有文字提示的【不一定每個人會留意到】:
可以說CubeMx還是有不夠嚴(yán)謹(jǐn)或者說考慮不周的地方。如果在開啟I2C1情況下,當(dāng)用戶試圖配置PB5作為輸出時直接紅色警告拒絕TIM3的remap就好了。但這樣,可能又會影響到另外一類用戶人群,他們根本不在乎PB5怎樣,只關(guān)注PB4能用作PWM輸出就好。有點(diǎn)眾口難調(diào)的味道,參考手冊在明確不支持STM32F1系列48腳的TIM3的REMAP操作的同時,結(jié)合勘誤手冊做了應(yīng)用補(bǔ)充,以盡可能滿足不同的應(yīng)用需求。
畢竟STM32CubeMX工程浩大,肯定還有需要完善的地方,尤其類似的細(xì)節(jié)問題。不過,我們相信會越來越完善。不管怎樣,所以,任何時候我們不能完全將芯片手冊丟在一邊。比如,我們知道ST官方出了基于各個STM32系列的固件庫,庫里各類示例工程極大方便了大家的學(xué)習(xí)和研發(fā)。不難想象,這些固件庫工程也都比較龐大,難免會有bug,一直都處于不斷完善中。在使用它們的過程中如果碰到疑惑的地方,不妨查看下相關(guān)數(shù)據(jù)手冊或開發(fā)參考手冊,做進(jìn)一步比對確認(rèn)。如果覺得手冊還描述得不夠清晰明確的話,可以去找找相應(yīng)芯片的勘誤手冊,看看里面有無相關(guān)問題的進(jìn)一步補(bǔ)充描述。
-
PWM
+關(guān)注
關(guān)注
114文章
5193瀏覽量
214210 -
STM32
+關(guān)注
關(guān)注
2270文章
10906瀏覽量
356564
原文標(biāo)題:淺談一個STM32外設(shè)配置沖突問題
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論