那些年使用STC單片機踩過的坑


一、前言

  本人工作中經常會使用STC單片機做完成一些簡單工作,但是在使用過程中會遇到一些意想不到的東西。本文的名字是“那些年使用STC單片機踩過的坑”,目的去記錄一些使用STC單片機需要注意的點,有些是在官方渠道中有解釋的點,有些則是坑人不眨眼,連官方都沒有解釋的點。

二、STC15系列與引腳相關的模式配置寄存器必須初始化

  指的是PaMb系列寄存器,a為[0:7],b為[0:1],這些寄存器是用來配置引腳模式的,以P0為例,如下圖:

  

  我一直以為這些寄存器的初始值為都0,實際並非如此,這16個寄存器中有5個初始值不是0。其實也沒必要去記哪些寄存器的初始值不是0,只要在使用某個引腳的時候記得要修改對應的引腳配置即可。

 三、IAP15F4K32S4單片機內部時鍾頻率無法改變

  寫了一個簡單的串口程序,就是以9600的波特率,發送0x55,用的是外部11.0592MHz的晶振,用邏輯分析儀采樣得出的結果如下:

  

  可見一個脈沖的寬度為104.5us,實際上9600波特率的脈沖寬度應該為1000000/9600≈104.17us,算上邏輯分析儀的采樣精度,這個結果是沒問題的。

  當我把時鍾改為內部時鍾,然后再下載運行程序后,得到的結果如下圖:

  

   很顯然,這個結果比預期值差太遠了。

PS:程序下載完成后,有這樣的提示:

  內部/外部時鍾源切換,目標芯片需要重新上電后才有效 !
  若是由外部時鍾切換到內部時鍾,需重新下載一次才可正確調節頻率 !

  

  本次測試是遵循了這個規則的,而且是不斷的下載、斷電、斷電,得到的結果非常一致,都是48us。

  有人可能會說會不會是晶振頻率選的不對,這點我確信是對的,而且程序下載成功后會將真實頻率顯示出來,如下圖:

   

   如果是這樣的話,那實際頻率比預想中的快2倍多,這屬實有點離譜。

  為了進一步驗證問題所在,我在STC-ISP軟件中將內部時鍾改成不同的值,結果竟然是:無論我將時鍾頻率調到多少,得到的結果是一樣的。

  這意味着有可能是我使用的芯片有問題,有可能是STC-ISP軟件有問題。

  在網上搜了一圈,還真發現有類似的問題,並且在官方的說明網站中找到了這個:

  

   我使用的芯片型號為IAP15W4K61S4,但是這個網站里並沒有找到類似信息,我下了一個6.36版本的軟件,發現這個版本的軟件還不支持IAP15W4K61S4的下載。然后我又測試了6.88L和6.88K,都沒解決問題。(我寫這篇文章時最新版是6.88L)

  於是乎,我直接去百度搜“IAP15W4K61S4時鍾不准”,好家伙,2015年就有人遇到過這個問題了:https://www.amobbs.com/thread-5629386-1-1.html

  但是這個帖子並沒有給出解決辦法,在別的地方也沒找到解決辦法,現在已經放假了,所以想等上班以后問問STC的工程師吧。

  經過驗證,IAP15W4K61S4這個“不能改變的頻率”是24M,所以我寫的程序按照24MHz的頻率寫就沒問題了(向黑惡勢力低頭)。

四、使用外部晶振讀不到bandgap的值

  我們知道,使用AD轉換芯片去測量某個電壓時,得到的值並不是電壓值,而是基於某個電壓的參考值,那么AD轉換結果的可靠性就和這個參考值的可靠性相關了。

  STC單片機聲稱具有一個非常准確的參考電壓,就是bandgap電壓,不會隨芯片的工作電壓的改變而變化,如果能把這個功能用上的話,那相當於可以節省一個外部的參考電壓源,這個功能無疑是非常好的。

  但是有一個前提,就是必須使用片內時鍾。否則無法正確的讀出bandgap電壓。這個問題和上個問題把我坑的不要不要的。

  再提一嘴,如果要獲取bandgap電壓,在下載程序時除了要選用內部時鍾以外,還要勾選“在程序區的結束處添加重要測試參數”,如下圖:

  

 

  並且在程序內要根據芯片型號選擇正確的ID_ADDR_ROM值。在官方例程里有從1K ROM到60K ROM的定義,IAP15W4K61S4是61K ROM,要自己寫上去,值為0xF3F7。

 五、IAP系列單片機每次下載都會整片擦除EEPROM

  我使用的單片機型號為:IAP15W4K61S4,下載時的硬件選項中:“下次下載用戶程序時擦除用戶EEPROM區”這個選項是強制不能勾選的,如下圖:

  

   但是從我的實驗現象中發現,每次重新下載都會整片擦除。

  查看芯片手冊發現這樣的描述:

  

  有些系列程序存儲空間和用戶的存儲空間是分開的,而我選的這個系列程序存儲空間和用戶存儲空間是不分開的,所以下載程序時就不區分,直接全部擦除?這只是我的猜想。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM