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