<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Keil MDK下學(xué)習(xí)STM32注意事項(xiàng)

          Keil MDK下學(xué)習(xí)STM32注意事項(xiàng)

          作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
          MDK下學(xué)習(xí)使用STM32也快兩個(gè)禮拜了,基本掌握了STM32在MDK環(huán)境下的開發(fā)流程和基本硬件程序的書寫。其間,遇到了許多問(wèn)題,其中不少問(wèn)題花費(fèi)了我相當(dāng)多得時(shí)間才得以解決,現(xiàn)將這些問(wèn)題和解決方法列出。其中也有一些是學(xué)習(xí)過(guò)程中我覺得需要記下的注意事項(xiàng)。
          1、STM32固件庫(kù)使用外圍設(shè)備的主要思路
          在STM32中,外圍設(shè)備的配置思路比較固定。首先是使能相關(guān)的時(shí)鐘,一方面是設(shè)備本身的時(shí)鐘,另一方面如果設(shè)備通過(guò)IO口輸出還需要使能IO口的時(shí)鐘;最后如果對(duì)應(yīng)的IO口是復(fù)用功能的IO口,則還必須使能AFIO的時(shí)鐘。
          其次是配置GPIO,GPIO的各種屬性由硬件手冊(cè)的AFIO一章詳細(xì)規(guī)定,較為簡(jiǎn)單。
          接著相關(guān)設(shè)備需要如果需要使用中斷功能,必須先配置中斷優(yōu)先級(jí),后文詳述。
          然后是配置外圍設(shè)備的相關(guān)屬性,視具體設(shè)備而定,如果設(shè)備需要使用中斷方式,必須使能相應(yīng)設(shè)備的中斷,之后需要使能相關(guān)設(shè)備。
          最后如果設(shè)備使用了中斷功能,則還需要填寫相應(yīng)的中斷服務(wù)程序,在服務(wù)程序中進(jìn)行相應(yīng)操作。
          2、如果在源文件中未定義以下預(yù)定義,需在工程“C/C++”中預(yù)定義一欄 填寫
          “USE_STDPERIPH_DRIVER,STM32F10X_CL(器件所屬分類),USE_STM3210C_EVAL(使用的評(píng)估板,庫(kù)自帶的歷程中需要根據(jù)"readme"文件提示添加,自己的工程除非是在一樣的評(píng)估板上運(yùn)行,否則不需要預(yù)定義此項(xiàng))”
          3、NVIC的優(yōu)先級(jí)分組
          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //這個(gè)對(duì)所有中斷有效,一個(gè)程序中只能有一個(gè)分組
          NVIC_PriorityGroup_n中n代表4位中有n位是給中斷分配搶占式優(yōu)先級(jí)的,4-n位是給中斷分配響應(yīng)優(yōu)先級(jí)的。
          4、NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn;//其中EXTI15_10_IRQn表示選中的通道為[15:10],不懂就跳到它的定義處看注釋
          5、TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV4中的TIM_ClockDivision或 控制寄存器1(TIMx_CR1)中得位CKD[1:0] 為 時(shí)鐘分頻因子 (Clock division)
          為定義在定時(shí)器時(shí)鐘(CK_INT)頻率與數(shù)字濾波器(ETR ,TIx)使用的采樣頻率之間的分頻比例,與用內(nèi)部時(shí)鐘時(shí)counter使用的時(shí)鐘頻率(分頻是在PSC寄存器中設(shè)置)無(wú)關(guān)。
          6、下面對(duì)該庫(kù)文件做個(gè)簡(jiǎn)單介紹:
          LibrariesSTM32F10x_StdPeriph_Driver下的內(nèi)容很好理解就是stm32的各個(gè)外設(shè)模塊驅(qū)動(dòng)代碼。
          misc.h和misc.c是和CM3內(nèi)核有關(guān)的NVIC和SysTick的驅(qū)動(dòng)代碼。
          LibrariesCMSIS下是什么呢?cmsis英文全稱:CortexMicrocontroller Software InterfaceStandard,是Cortex系列處理器硬件抽象層,可以理解為cortex內(nèi)核的軟件接口。
          core_cm3.c, core_cm3.h
          它們的目錄名為CoreSupport,說(shuō)明這兩個(gè)文件是CM3內(nèi)核支撐文件,其他使用CM3內(nèi)核的芯片也可以用,不一定是stm32。這兩個(gè)文件用來(lái)獲取設(shè)置CM3內(nèi)核,配置一些內(nèi)核寄存器。
          stm32f10x.h, system_stm32f10x.c,system_stm32f10x.h和startup_stm32f10x_hd.s在DeviceSupport目錄下,說(shuō)明這幾個(gè)文件是和具體的芯片有關(guān)的,也就是stm32芯片的支撐文件。其中stm32f10x.h是標(biāo)準(zhǔn)外設(shè)庫(kù)的入口,使用標(biāo)準(zhǔn)外設(shè)庫(kù)的代碼中必須包含該頭文件。system_stm32f10x.c,system_stm32f10x.h這兩個(gè)文件提供函數(shù)用來(lái)初始化stm32芯片,配置PLL、系統(tǒng)時(shí)鐘和內(nèi)置flash接口。startup_stm32f10x_hd.s是大容量型stm32芯片的啟動(dòng)文件。
          7、USER下部分文件介紹
          (1)stm32f10x_conf.h是用來(lái)添加所需外設(shè)頭文件的,要根據(jù)需要進(jìn)行更改,否則編譯會(huì)出現(xiàn)很多提示外設(shè)庫(kù)函數(shù)沒有定義 的錯(cuò)誤。
          (2)stm32f10x_it.c這是一個(gè)中斷處理文件,_it結(jié)尾,就是interrupt(中斷)的意思,說(shuō)明這個(gè)是整個(gè)工程的中斷處理函數(shù),要是樓主沒有用到中斷的話就可以不添加進(jìn)去,還有,也可以去掉,將中斷函數(shù)添加到其它.c文件里也行.
          stm32f10x_it.h中是對(duì)中斷處理函數(shù)的聲明。
          (3)System_stm32f10x.c這個(gè)文件中定義的單片機(jī)的時(shí)鐘設(shè)置,修改時(shí)鐘設(shè)置直接修改里面的相應(yīng)宏定義即可。調(diào)用System_Init()函數(shù)時(shí)會(huì)調(diào)用這個(gè)宏定義。由于在STM32的啟動(dòng)代碼中(eg.starup_stm32f10x_cl.s)就調(diào)用了System_Init()函數(shù),因此在主函數(shù)中不需調(diào)用此函數(shù)。
          8、24C02器件地址組成
          八位前面4位代表器件類型,eeprom為1010,A2、A1、A0為同類型器件地址,主要看原理圖中相應(yīng)位是接高還是接地。
          eg.由STM32HY-GoldBullV3開發(fā)板的原理圖可知,24C02的A2、A1、A0腳全部接地,所以24C02的地址應(yīng)為1010000_,最后一位表示讀還是寫。
          9、在一個(gè)源文件中調(diào)用其他文件的函數(shù),也需要在文件頭聲明,不然會(huì)有警告。
          10、使用串口出現(xiàn)亂碼
          原因分析(1)USART設(shè)置有錯(cuò)(2)系統(tǒng)時(shí)鐘設(shè)置有誤
          (3)如果使用的是MDK,使用printf()函數(shù)需要在工程屬性的“Target“-》”Code Generation“中勾選”UseMicroLIB“,否則使用printf函數(shù)會(huì)出現(xiàn)問(wèn)題,例如會(huì)出現(xiàn)亂碼。
          11、如果錯(cuò)誤提示“expect a ")" " 原因有可能為
          (1)少寫了半個(gè)括號(hào) ")" (2)輸成中文輸入法的括號(hào) (3)定義了與宏定義重復(fù)的變量
          其中第三個(gè)最不容易發(fā)現(xiàn),平常寫程序時(shí)要注意。



          關(guān)鍵詞: KeilMDKSTM32注意事

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();