標(biāo)題: STM32練手總結(jié) [打印本頁]

作者: 51黑ren    時間: 2015-12-27 03:46
標(biāo)題: STM32練手總結(jié)
  剛剛做完一個練手的項(xiàng)目,寫一下心得總結(jié)。
   1、關(guān)于全局變量,因?yàn)橐粋項(xiàng)目必然會有很多的.c和.h。固然會用到全局變量,在一個.c中定義一個變量,在其.h中用extren聲明該變量,將該變量包含到其他的.c中,那么其他的.c也就能使用該變量了。
   2、現(xiàn)在寫單片機(jī)程序的基本框架就是,把每一個用的外設(shè)分為一個個模塊,在定時器中分時間逐個掃描。但是,發(fā)現(xiàn)了一個弊端,就是如果該時間掃描時間過長,就會導(dǎo)致中斷混亂,不能按時進(jìn)入或者跳出中斷。所以,就僅僅再定時器中斷里面用標(biāo)志位進(jìn)行置位,在while(1)中進(jìn)行判斷,定時一段時間給需要掃描時間長的函數(shù)。一般定時器掃描應(yīng)該是比較快的,因?yàn)榭,所以任?wù)進(jìn)行不完,下一次中斷已經(jīng)來了,比如一個任務(wù)需要10ms,而定時器中斷是2ms,那么就會出現(xiàn)錯誤,所以就讓10ms之內(nèi)一直做這個任務(wù),雖然定時器還是會中斷,在進(jìn)行完這件事之前,標(biāo)志位不會置位為其他事件。
3、在用屏幕的時候出現(xiàn)的一個問題。屏幕雖然廠家會給出官方的顯示函數(shù),直接調(diào)用即可,但是有時不符合自己的要求,比如想要顯示一個變量等等(其實(shí)還是自己基礎(chǔ)不行哈);

這是一個顯示函數(shù)


可以看出,他的第三個形參是一個指針形變量,但是再寫實(shí)參的時候,該如何寫變量呢?
有兩種方法:
指針型變量,指向的是地址。前者“字符串”,指針指向字符串第一個字符地址,使字符一個一個顯示,直到遇到字符串結(jié)束符“\0”顯示結(jié)束。后者,定義High[]為一個數(shù)組,把需要顯示的變量分成百位、十位、個位等等。。。在分別放到數(shù)組里面,關(guān)鍵的是,數(shù)組最后一個值要放“\0”,否則,無法判斷是否需要顯示結(jié)束。將數(shù)組命作為實(shí)參,道理如上。
一開始,我顯示變量的時候用的是&在加上變量,可是因?yàn)闆]有結(jié)束符“\0”,導(dǎo)致無法判斷顯示結(jié)束,而出現(xiàn)錯誤。
4、用到了睡眠模式,其實(shí)就是一條內(nèi)核指令,只要執(zhí)行就能進(jìn)入睡眠狀態(tài),一開始睡眠指令放在定時器中斷里面了,發(fā)現(xiàn)竟然睡不著。。。拿出來才行了。在一個就是喚醒,有兩種方式,取決于你進(jìn)入睡眠的指令,我用的是任意中斷喚醒,所以如果程序中用的定時器中斷等等的話,要先關(guān)閉這些中斷,只留下你自己設(shè)定的用來喚醒的中斷線就好。
5、上電復(fù)位,有兩種上電復(fù)位的方法,一種是,不清除寄存器的配置。另一種是將寄存器配置清除掉,其實(shí)來說,這種方法,就好似硬件復(fù)位。
    具體指令:
      __set_FAULTMASK(1);
         NVIC_SystemReset();

好了結(jié)束了





作者: jinhua1916    時間: 2018-8-7 11:31
感覺很不錯,贊贊贊!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1