作者: Miler Shao
前幾天,有個工程師在包括本微信公眾號在內的多個地方發帖咨詢STM8S103k3是否支持正交編碼的使用。 留言稱,之前用STM32的定時器做過正交編碼應用,一切正常。換到STM8S103K3 后,折騰若干天了計數器就是不工作。外圍硬件一樣,代碼配置流程一樣,無非代碼書寫表達上有點差異。他使用的是TIM1,基于庫函數寫的,配置上并無啥明顯問題。我查看8S103k3的CH1、CH2 所對應的管腳,也無需要特別配置的地方。 考慮它對這個功能應用很熟悉了,加上他說折騰若干天了,不怎么懷疑他硬件上的原因。我甚至有點擔心庫函數是否有不完善的地方,建議他依照手冊里的配置流程用操作寄存器的方法重新配置下,順便也做些檢查確認。 后來過了一天時間,他反饋問題解決了,原因是管腳option方面的配置問題,即管腳復用重映射的問題。我明明記得8S103k3 TIM1的CH1、CH2 所對應的管腳不存在重映射問題的,便再次跟他確認芯片型號到底是不是8S103k3,結果他回答說是8S103f3。 哦,原來是這樣,那問題就好理解了。遺憾的是他一直都是說STM8S103F3,的確是涉及到管腳復用選項配置的問題。就這個問題似乎經常有人碰到,之前我在相關文字里提到過兩三次。這里不妨以STM8S103F3的PC6 、PC7為例再聊聊。 這兩個腳默認可以復用為SPI通訊腳,但旁邊又用中括號[]分別標注TIM1_CH1、TIM1_CH2。這里的意思是說,如果要把這兩個腳作為TIM1_CH1、TIM1_CH2的話,還必須在option字里對進行AFR[Alternate Function Remap]的選擇。相關的具體細節介紹在各芯片的數據手冊里。  
順便看看STM8S103K3的TIM1_CH1、TIM1_CH2功能腳,分別是PC1、PC2的默認復用腳,不需要額外作AFR的配置。 
雖說折騰了若干天,其實原因很簡單。當然了,應該說找到了原因就簡單,沒找到原因前無所謂簡單復雜,出不來就是出不來。其實,開發環節中,任何一個地方都可以把人卡住。這時候我們更需要冷靜,對問題現象做些梳理分析后有步驟地行動。 如果這位工程師之前沒有用STM32做過類似項目,或許還不會像他說的折騰若干天。正因為基于STM32做過,對整個項目流程很清晰,他對這個技術點也相當自信。當在STM8S平臺上遇到麻煩時,不自覺地把很多心思花在懷疑芯片上了。甚至沒花心思把芯片型號及數據手冊做些基本的了解和確認。記得半個多月前,一個客戶因為兩行STM8S芯片的時鐘代碼配置有問題,使得產品不穩定綿延幾個月。該工程師也是過于自信,一直懷疑MCU不夠穩定所致,而疏于做些基本的檢查和確認【其實他代碼也沒多少行】。當最終找到原因后,終于說了句能不懷疑MCU芯片時就先不要懷疑MCU的問題。 當然MCU芯片有問題、有BUG也正常,但不要一遇到問題就過早的下結論是芯片的問題,這樣容易導致開發進度停滯不前。正常來講,各公司的MCU往往會有相關的勘誤手冊發布出來,建議開發前就弄來掃幾眼,防患于未然。 對于ST MCU,各個系列或子系列一般也有出勘誤手冊,即Errata Sheet的文件,網上可以自行下載。下載不到可以找代理商的FAE索取,或者在本微信公眾號里留言也行,我盡力協助。 |