工程師在做STM8系列的應(yīng)用開發(fā)中,難免會(huì)遇到各種各樣的問題,尤其初次使用。這里結(jié)合個(gè)人理解及跟有些工程師的溝通交流,抽空整理一些常見的問題,希望幫到更多的工程師。文字中難免有描述不到位的地方,還望諒解。若有錯(cuò)誤的地方,還忘不吝賜教,用微信或QQ方式都可以。 關(guān)于常見問題的匯總,大體分二部門,分別是與調(diào)試編譯環(huán)境有關(guān)的問題、與芯片資料理解相關(guān)的問題。本篇是講的后者。 1、option編程問題; 對(duì)于STM8系列MCU,經(jīng)常會(huì)有些OPTION項(xiàng)需要配置。配置這些OPTION,可以通過調(diào)試或燒錄工具進(jìn)行,也可以通過用戶自己軟件編程實(shí)現(xiàn)。 對(duì)于絕大部分OPTION項(xiàng),都是由兩組數(shù)據(jù)組成,一組是原碼【OPT】,一組是反碼【OPTn】,這樣做的目的主要是防止輕易被改動(dòng)。結(jié)果有的人在手動(dòng)軟件配置時(shí),只寫原碼,忘記或忽視了反碼的編寫,使得相應(yīng)OPTION項(xiàng)的更改沒有生效,自己還懵然不知。  2、GPIO復(fù)用配置問題; STM8系列MCU的GPIO很多是具備復(fù)用功能的,其中部分復(fù)用功能必須配合管腳的重映射才能實(shí)現(xiàn),即配備相應(yīng)的AFR寄存器及選項(xiàng)位。 由于很多初次使用該類芯片的工程師忽略了這點(diǎn),經(jīng)常發(fā)現(xiàn)自己代碼寫的非常漂亮,可有些功能就是不對(duì),翻來覆去怎么查錯(cuò)也找不到原因。正是因?yàn)橥浟讼鄳?yīng)GPIO腳的REMAP配置。比如下方圖形中方框中標(biāo)注出來的復(fù)用功能,就得使用REMAP才能生效。  3、真開漏腳的電平問題; STM8 MCU系列芯片中,有些管腳是真開漏腳,即下面GPIO模塊方框中的P-BUFFER和那個(gè)保護(hù)二極管都沒有使用。這種情況下,它如果沒接上拉電阻的話,是不能輸出高電平的。經(jīng)常有人在此類端口沒接上拉的情況下,叫嚷著沒法輸出高電平,比方那些硬件I2C接口。
4、flash編程相關(guān)問題; STM8系列MCU對(duì)主程序FLASH區(qū)或數(shù)據(jù)EEPROM區(qū)進(jìn)行寫操作前,必須執(zhí)行開鎖操作。但對(duì)數(shù)據(jù)EEPROM區(qū)和程序FLASH區(qū)在開鎖密鑰及寫入順序方面并不一樣,另外開鎖和上鎖使用到的寄存器也不一樣。有的人以為二者是一樣也經(jīng)常導(dǎo)致問題。尤其是如果操作寄存器,看資料不細(xì)致的話,容易掉進(jìn)坑里不自知。【當(dāng)然如果用ST官方庫,這里就不太容易出錯(cuò)】 順便提下,對(duì)于OPTION的編程跟對(duì)EEPROM數(shù)據(jù)的編程處理方式一樣。 ? 5、外部中斷應(yīng)用問題; STM8S芯片與STM8L芯片在外部中斷EXTI方面有些不一樣。一是STM8S芯片的外部中斷沒有響應(yīng)中斷標(biāo)志,進(jìn)中斷后無清中斷請(qǐng)求位的說法,而STM8L的EXTI則有相關(guān)關(guān)外部中斷請(qǐng)求標(biāo)志,進(jìn)中斷后如無特別需要得清除相關(guān)中斷請(qǐng)求位。 另外,STM8L芯片的EXTI比STM8S設(shè)計(jì)得稍微復(fù)雜點(diǎn),或者說多了些外部中斷處理方式。STM8L芯片在端口中斷的基礎(chǔ)上,還增加了線中斷,即某個(gè)GPIO口線觸發(fā)的外部中斷。 再提個(gè)非常頻繁發(fā)生的問題,外部中斷觸發(fā)方式變更的話題。經(jīng)常有工程師反映,說更改外部中斷的觸發(fā)方式不生效或者說觸發(fā)方式無法變更而郁悶不已。 這里以8S芯片為例,對(duì)于GPIO外部中斷的觸發(fā)方式,是由相關(guān)寄存器控制的。默認(rèn)值是0X00,對(duì)應(yīng)口線的觸發(fā)方式是下降沿或低電平觸發(fā)。如果要更改相應(yīng)口線的觸發(fā)方式,下面紅色方框內(nèi)文字寫得非常清晰。【可能個(gè)別工程師對(duì)英文不太敏感】 也就是說,想要更改口線的外部中斷觸發(fā)方式的話,必須先執(zhí)行關(guān)中斷指令,即將CCR寄存器里的L0\L1置1,然后再實(shí)施修改操作,否則是無法讓更改生效的。 6、STM8L芯片寫EEPROM與DMA的沖突問題; 如果STM8L芯片進(jìn)行EEPROM擦寫操作的同時(shí)發(fā)生DMA操作的話,會(huì)導(dǎo)致系統(tǒng)進(jìn)入莫名其妙的死機(jī)狀態(tài)。該問題在勘誤手冊(cè)里有提到,最簡(jiǎn)捷的辦法就是將二者錯(cuò)開,不要同時(shí)出現(xiàn)二者的操作。其它細(xì)節(jié)可以參考有關(guān)芯片的勘誤手冊(cè)。
7、STM8S105芯片有關(guān)PC4的復(fù)用功能重映射到PD7的問題; 對(duì)于STM8S105系列芯片,從數(shù)據(jù)手冊(cè)上往往會(huì)看到PC4腳的TIM1_CH4的功能可以被重映射到PD7腳。比方說你希望實(shí)現(xiàn)PD7腳上的TIM1_CH4的PWM輸出,從PC4實(shí)現(xiàn)PD7的映射是沒問題,但映射完后,PD7輸出PWM的同時(shí)PC4也輸出PWM。這樣有時(shí)會(huì)出現(xiàn)開發(fā)者不希望看到的情況,因?yàn)橛成渫旰笕绻希望PC4做別的功能的話,那就麻煩。 關(guān)于這點(diǎn),這里應(yīng)該是個(gè)BUG。STM8S105芯片的勘誤手冊(cè)有描述,其實(shí)這個(gè)映射的最佳用途是在44腳的8S105芯片上,此時(shí)那個(gè)PC4是沒有了的,映射后也不會(huì)出現(xiàn)上面所說的2個(gè)腳出現(xiàn)同樣功能的情況。關(guān)于這點(diǎn)要注意。
8、Eeprom編程與程序執(zhí)行問題; STM8芯片中,有些小容量芯片是不支持在寫EEPROM的同時(shí)運(yùn)行FLASH里的代碼的,即不支持RWW【read while writing】。比方8S003、8s103就不支持。最常見的情況就是,這類芯片在做EEPROM寫操作時(shí),中斷不能得到相應(yīng)的響應(yīng)而讓工程師一頭霧水。當(dāng)然其它具有RWW功能的MCU是不會(huì)出現(xiàn)這個(gè)問題。
9、FLASH運(yùn)行速度與CPU運(yùn)行速度匹配的問題; 一般來講,CPU的運(yùn)算速度要快于甚至遠(yuǎn)遠(yuǎn)快于總線訪問程序數(shù)據(jù)的速度。當(dāng)你使用STM8S20X系列芯片且時(shí)鐘高于16M時(shí),需要在相關(guān)配置寄存器里做一個(gè)關(guān)于等待周期的配置,不然的話,你的開發(fā)可能要增加新的刺激因素了。  ? 10、STM8S芯片GPIO復(fù)用AD功能后無法回到GPIO狀態(tài)的問題; 這點(diǎn)就不在這贅述了,有興趣的話可以在我的微信公眾號(hào)里查看歷史消息或在我的QQ博客里查找相關(guān)文字。 其實(shí),開發(fā)調(diào)試過程中會(huì)遇到很到各式各樣的問題,上面只是做個(gè)拋磚引玉式的介紹或提醒。上面提到的問題,很多人少則折騰半天,多則折騰兩三天不等。STM8產(chǎn)品開發(fā)工程中除了這些跟芯片技術(shù)資料理解有關(guān)的問題外,很多問題還跟C語言基礎(chǔ)、電路硬件基礎(chǔ)等有很多關(guān)系,這里就沒法再延伸了。 本文出自milershao大師
|