HK32F030M是航順一款入門級經(jīng)濟(jì)型32位MCU,使用ARM® Cortex®-M0內(nèi)核,最高工作頻率32 MHz,內(nèi)置16 KByte Flash、448 Byte EEPROM和2 KByte SRAM。由于其超高的性價比,在工業(yè)、醫(yī)療、消費(fèi)電子等行業(yè)得到廣泛應(yīng)用。
HK32F030M使用過程中如果設(shè)計(jì)有軟件循環(huán)設(shè)計(jì)延時,有可能會出現(xiàn)延時不準(zhǔn)確的現(xiàn)象。
原因是由于芯片設(shè)計(jì)時,在存儲設(shè)備和MCU之間設(shè)計(jì)了4個word的高速buffer,存儲慢的數(shù)據(jù)先把數(shù)據(jù)存放到buffer。通過buffer可以減少進(jìn)程間通信需要等待的時間,在此期間MCU可以干其他的事情,但是當(dāng)循環(huán)指令小于4個word(最大8條指令)時,有可能代碼存放于高速buffer,造成循環(huán)代碼的取指時間不固定。對于這種情況,請參考以下解決方案:
建議在DelayMs函數(shù)中,增加循環(huán)體中指令數(shù)量,讓代碼的取指不會命中高速buffer。
由于Nop的指令只有16bit,buffer是32位取指,所以為了一致性,建議加偶數(shù)個 nop。
修改前
修改后