STM32入門C語言詳解_第1頁
STM32入門C語言詳解_第2頁
STM32入門C語言詳解_第3頁
STM32入門C語言詳解_第4頁
STM32入門C語言詳解_第5頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、閱讀flash :芯片內(nèi)部存儲器flash操作函數(shù)我的理解對芯片內(nèi)部flash進(jìn)行操作的函數(shù),包括讀取,狀態(tài),擦除,寫入等等,可以允許程序去操作flash上的數(shù)據(jù)?;A(chǔ)應(yīng)用1,F(xiàn)LASH時序延遲幾個周期,等待總線同步操作。推薦按照單片機(jī)系統(tǒng)運行頻率,0 24MHz 時,取 Latency=O ; 24 48MHz 時,取 Latency=1 ; 4872MHz 時,取 Latency=2。 所有程序中必須的用法:FLASH_SetLate ncy(FLASH_Late ncy_2);位置:RCC初始化子函數(shù)里面,時鐘起振之后?;A(chǔ)應(yīng)用2,開啟FLASH預(yù)讀緩沖功能,加速 FLASH的讀取。 所

2、有程序中必須的用法:FLASH _P refetchBufferCmd(FLASH _P refetchBuffer_E nable);位置:RCC初始化子函數(shù)里面,時鐘起振之后。3、閱讀lib :調(diào)試所有外設(shè)初始化的函數(shù)。EWRAM需要從這個函數(shù)我的理解一一不理解,也不需要理解。只要知道所有外設(shè)在調(diào)試的時候, 里面獲得調(diào)試所需信息的地址或者指針之類的信息。基礎(chǔ)應(yīng)用1,只有一個函數(shù)debug。所有程序中必須的。用法: #ifdef DEBUGdebug();#en dif位置:main函數(shù)開頭,聲明變量之后。4、閱讀nvic :系統(tǒng)中斷管理。我的理解一一管理系統(tǒng)內(nèi)部的中斷,負(fù)責(zé)打開和關(guān)閉中斷。

3、基礎(chǔ)應(yīng)用1,中斷的初始化函數(shù),包括設(shè)置中斷向量表位置,和開啟所需的中斷兩部分。所有程序中必須的。用法:void NVIC_C on figuratio n(void)NVIC_I nitTyp eDef NVIC_I nitStructure; /中斷管理恢復(fù)默認(rèn)參數(shù)中的定義了#ifdef VECT_TAB_RAM / 如果 C/C+ CompilerPreprocessor'Defined symbols則在RAM調(diào)試VECT_TAB_RAM(見程序庫更改內(nèi)容的表格)NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); /則在Flash里調(diào)試#els

4、e / 如果沒有定義 VECT_TAB_RAMNVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);/#endif /結(jié)束判斷語句以下為中斷的開啟過程,不是所有程序必須的。NVIC_ PriorityGrou pCon fig(NVIC_PriorityGroup_2);設(shè)置NVIC優(yōu)先級分組,方式。注:一共16個優(yōu)先級,分為搶占式和響應(yīng)式。兩種優(yōu)先級所占的數(shù)量由此代碼確定,NVIC_PriorityGroup_x可以是0、1、2、3、4,分別代表搶占優(yōu)先級有1、2、4、8、16個和響應(yīng)優(yōu)先級有16、& 4、2、1個。規(guī)定兩種優(yōu)先級的數(shù)量后,所有的中

5、斷級別必須在其中選擇,搶占級 別高的會打斷其他中斷優(yōu)先執(zhí)行,而響應(yīng)級別高的會在其他中斷執(zhí)行完優(yōu)先執(zhí)行。NVIC_InitStructure.NVIC_IRQChannel =中斷通道名;/開中斷,中斷名稱見函數(shù)庫/NVIC_I ni tStructure.NVIC_IRQCha nn el Preemp tio nPriority = 0; /搶占優(yōu)先級/NVIC_I nitStructure.NVIC_IRQCha nn elSub Priority = 0; /響應(yīng)優(yōu)先級啟動此通道的中斷NVIC_I nitStructure.NVIC_IRQCha nn elCmd = ENABLE; /

6、NVIC_I nit (&N VIC_I nitStructure);中斷初始化5、閱讀rcc :單片機(jī)時鐘管理。我的理解一一管理外部、內(nèi)部和外設(shè)的時鐘,設(shè)置、打開和關(guān)閉這些時鐘。基礎(chǔ)應(yīng)用1 :時鐘的初始化函數(shù)過程 一一用法:void RCC_Co nfiguratio n(void)/時鐘初始化函數(shù)ErrorStatus HSEStartU pStatus; / 等待時鐘的穩(wěn)定RCC_DeInit(); /時鐘管理重置RCC_HSEC on fig(RCC_HSE_ON); /打開外部晶振HSEStart Up Status = RCC_WaitForHSEStart Up ();

7、/等待外部晶振就緒if (HSEStart Up Status = SUCCESS)讀取緩沖,加速FLASH _P refetchBufferCmd(FLASH _P refetchBuffer_E nable);/flash操作的延時使用系統(tǒng)時鐘(高速)為HCLK(低速)為HCLKFLASH_SetLate ncy(FLASH_Late ncy_2); /flash RCC_HCLKCo nfig(RCC_SYSCLK_Div1); /AHB的一半的一半RCC_ PCLK2CO nfig(RCC_HCLK_Div2); /APB2RCC_ PCLK1CO nfig(RCC_HCLK_Div2

8、); /APB1AD,I/O,高級 TIM,串口 1。APB1 負(fù)責(zé) DA,USB,注:AHB主要負(fù)責(zé)外部存儲器時鐘。PB2負(fù)責(zé)SPI , I2C , CAN,串口 2345,普通 TIM。RCC_ PLLCo nfig(RCC_ PLLSource_HSE_Div1, RCC_ PLLMul_9); /PLLCLK = 8MHz * 9 = 72 MH RCC_PLLCmd(ENABLE); /啟動 PLLwhile (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /等待 PLL 啟動RCC_SYSCLKConfig(RCC_SYSCLKSource

9、_PLLCLK); /將 PLL 設(shè)置為系統(tǒng)時鐘源while (RCC_GetSYSCLKSource() != 0x08)/ 等待系統(tǒng)時鐘源的啟動設(shè)備1 | ABP2設(shè)備2 |, ENABLE); /啟動AHP設(shè)備 設(shè)備 1 | ABP2 設(shè)備 2 |, ENABLE);/設(shè)備 1 | ABP2 設(shè)備 2 |, ENABLE); /RCC_AHB Perip hClockCmd(AB P2啟動ABP2啟動ABP1設(shè)備設(shè)備/RCC_A PB2 Perip hClockCmd(AB P2/RCC_A PB1 Perip hClockCmd(AB P26、閱讀exti :外部設(shè)備中斷函數(shù)外部設(shè)備通

10、過引腳給出的硬件中斷,EXTI線16連接到?;A(chǔ)應(yīng)用19個上升、下降或都觸發(fā)。也可以產(chǎn)生軟件中斷,PVD ( VDD監(jiān)視),EXTI線17連接到 RTC (鬧1,設(shè)定外部中斷初始化函數(shù)。按需求,不是必我的理解EXTI0EXTI15連接到管腳,鐘),EXTI線18連接到USB (喚醒)須代碼。用法:void EXTI_Co nfiguratio n(void)外部設(shè)備中斷恢復(fù)默認(rèn)參數(shù)1|通道2; /設(shè)定所需產(chǎn)生外部中斷的通道,一共19個。產(chǎn)生中斷上升下降沿都觸發(fā)啟動中斷的接收EXTI_I ni tTy peDef EXTI_I nitStructure; /EXTI_I nitStructure

11、.EXTI_Mode = EXTI_Mode_I nterru pt; /EXTI_I nitStructure.EXTI_Trigger = EXTI_Trigger_Falli ng; /EXTI_I ni tStructure.EXTI_Li neCmd = ENABLE; /EXTI_I nitStructure.EXTI_Li ne =通道EXTI_I ni t(&EXTI_I nitStructure); /外部設(shè)備中斷啟動7、閱讀dma :通過總線而越過 CPU讀取外設(shè)數(shù)據(jù)我的理解一一通過DMA應(yīng)用可以加速單片機(jī)外設(shè)、存儲器之間的數(shù)據(jù)傳輸,并在傳輸期間不影響 CPU進(jìn)行其

12、他事情。這對于入門開發(fā)基本功能來 說沒有太大必要,這個內(nèi)容先行跳過。8、閱讀systic :系統(tǒng)定時器我的理解一一可以輸出和利用系統(tǒng)時鐘的計數(shù)、狀態(tài)?;A(chǔ)應(yīng)用1,精確計時的延時子函數(shù)。推薦使用的代碼。 用法:static vu32 Timin gDelay; /全局變量聲明void SysTick_Co nfig(void) /systick初始化函數(shù)SysTick_Cou nterCmd(SysTick_Cou nter_Disable); /停止系統(tǒng)定時器SysTick_ITConfig(DISABLE); /停止 systick 中斷使用HCLK作為時鐘源,SysTick_CLKSour

13、ceCo nfig(SysTick_CLKSource_HCLK_Div8); /systick頻率值除以8。SysTick_SetReload(9000); /重置時間1毫秒(以72MHz為基礎(chǔ)計算)SysTick_ITConfig(ENABLE); /開啟 systic 中斷void Delay (u32 nTime) /延遲一毫秒的函數(shù)開始計時SysTick_C oun terCmd(SysTick_Co un ter_E nable); /systicTimi ngDelay = n Time; / 計時長度賦值給遞減變量 while(Timi ngDelay != 0); / 檢測是

14、否計時完成 SysTick_Cou nterCmd(SysTick_Cou nter_Disable); / 關(guān)閉計數(shù)器 SysTick_Cou nterCmd(SysTick_Cou nter_Clear); /清除計數(shù)值void TimingDelay_Decrement(void)/遞減變量函數(shù),函數(shù)名由“stm32f10x_it.c中的中斷響應(yīng)函數(shù)定義好了。if (Timi ngDelay != 0x00) /檢測計數(shù)變量是否達(dá)到0 TimingDelay-; /計數(shù)變量遞減注:建議熟練后使用,所涉及知識和設(shè)備太多,新手出錯的可能性比較大。新手可用簡化的延時函 數(shù)代替:void Del

15、ay(vu32 n Cou nt) /簡單延時函數(shù)for(; nCou nt != 0; n Cou nt-); /循環(huán)變量遞減計數(shù)當(dāng)延時較長,又不需要精確計時的時候可以使用嵌套循環(huán):void Delay(vu32 nCou nt) /簡單的長時間延時函數(shù)int i; /聲明內(nèi)部遞減變量for(; nCou nt != 0; n Cou nt-) II遞減變量計數(shù)for (i=0; i<0xffff; i+)內(nèi)部循環(huán)遞減變量計數(shù)9、閱讀gpio : IIO設(shè)置函數(shù)我的理解一一所有輸入輸出管腳模式設(shè)置,可以是上下拉、浮空、開漏、模擬、推挽模式,頻率特 性為2M , 10M , 50M。也可

16、以向該管腳直接寫入數(shù)據(jù)和讀取數(shù)據(jù)。基礎(chǔ)應(yīng)用1 , gpio初始化函數(shù)。所有程序必須。用法:void GPIO_Con figuratio n( void)狀態(tài)恢復(fù)默認(rèn)參數(shù)標(biāo)號I GPIO_Pin_標(biāo)號;管腳位置定義,標(biāo)號可以是GP IO_I ni tTy peDef GP IO_I ni tStructure; /GP IOGP IO_I ni tStructure.G PIO_ Pin = GPIO_Pin_NONE、ALL、0 至 15。輸出速度2MHz模擬輸入模式初始化GP IO_I nitStructure.G PIO_Sp eed = GPIO_Sp eed_2MHz;IIGP IO

17、_I nitStructure.G PI O_Mode = GPI O_Mode_AIN; IIGPIO_Init(GPIOC, &GPIO_InitStructure); IIC組 GPIO注:以上四行代碼為一組,每組GPIO屬性必須相同,默認(rèn)的GPIO參數(shù)為:ALL, 2MHz , FLATING 。如果其中任意一行與前一組相應(yīng)設(shè)置相同,那么那一行可以省略,由此推論如果前面已經(jīng)將此行參數(shù)設(shè)定為默認(rèn)參數(shù)(包括使用GP IO_I nitTyp eDef GP IO_I nitStructure代碼),本組應(yīng)用也是默認(rèn)參數(shù)的話,那么也可以省略。以下重復(fù)這個過程直到所有應(yīng)用的管腳全部被定義

18、完畢。寫入1 基礎(chǔ)應(yīng)用2,向管腳寫入0或1 用法:GP IO_WriteBit(G PIOB, GP IO_ Pin_2, (BitActio n)0x01); / 基礎(chǔ)應(yīng)用3,從管腳讀入0或1 用法:GPI O_Readl np utDataBit(G PIOA, GP IO_ Pin_6) STM32筆記之七:讓它跑起來,基本硬件功能的建立0、a)b)1、a)實驗之前的準(zhǔn)備 接通串口轉(zhuǎn)接器 下載IO與串口的原廠程序,編譯通過保證調(diào)試所需硬件正常。flash , lib , nvic , rcc和GPIO,基礎(chǔ)程序庫編寫這幾個庫函數(shù)中有一些函數(shù)是關(guān)于芯片的初始化的,每個程序中必用。為保障程序

19、品質(zhì),初學(xué)階段要求嚴(yán)格遵守官方習(xí)慣。注意,官方程序庫例程中有個platform_co nfig.h 文件,是專門用來指定同類外設(shè)中第幾號外設(shè)被使用,就是說在ma in .c里面所有外設(shè)序號用x代替,比如USARTx,程序會到這個頭文件中去查找到底是用那些外設(shè),初學(xué)的時候參考例程別被這個所迷惑住。b) 全部必用代碼取自庫函數(shù)所帶例程,并增加逐句注釋。RCC (包括 Flash 優(yōu)化),NVIC , GPIOc) 習(xí)慣順序一一Lib ( debug ),d) 必用模塊初始化函數(shù)的定義:定義時鐘初始化函數(shù) 定義管腳初始化函數(shù) 定義中斷管理初始化函數(shù)void RCC_Co nfiguratio n(

20、void); / void GPI O_Co nfigurati on( void); / void NVIC_Co nfigurati on( void); /void Delay(vu32 nCou nt); /定義延遲函數(shù)e) Ma in中的初始化函數(shù)調(diào)用:RCC_Co nfiguratio n(); II 時鐘初始化函數(shù)調(diào)用 NVIC_C on figuratio n(); II中斷初始化函數(shù)調(diào)用GPI O_Co nfiguratio n(); II管腳初始化函數(shù)調(diào)用f) Lib注意事項:屬于 Lib的Debug函數(shù)的調(diào)用,應(yīng)該放在 main函數(shù)最開始,不要改變其位置。g) RCC注意

21、事項:根據(jù)需要開啟設(shè)備時鐘可以節(jié)省電能時Flash優(yōu)化處理可以不做,但是兩句也不難也不用改參數(shù)鐘頻率需要根據(jù)實際情況設(shè)置參數(shù)h) NVIC注意事項注意理解占先優(yōu)先級和響應(yīng)優(yōu)先級的分組的概念i) GP10注意事項注意以后的過程中收集不同管腳應(yīng)用對應(yīng)的頻率和模式的設(shè)置。作為高低電平的I/O,所需設(shè)置:RCC初始化里面打開 RCC_APB2里面管腳設(shè)定:10輸出(50MHz,Out_PP);Perip hClockCmd(RCC_A PB2 Periph_GPI 0A);G PIO IO 輸入(50MHz,IPU );j) GPIO應(yīng)用重置寫入1寫入010GPI O_WriteBit(G PIOB,

22、 GPIO_P in_2, Bit_RESET);/GP IO_WriteBit(G PIOB, GPIO_P in_2, (BitActio n)0x01);/GP IO_WriteBit(G PIOB, GPIO_P in_2, (BitActio n)0x00);/GP IO_Readl npu tDataBit(G PI OA, GPIO_P in_6) ;/讀入k) 簡單Delay函數(shù)void Delay(vu32 n Cou nt)/簡單延時函數(shù)for(; nCount != 0; nCount-);實驗步驟:RCC 初始化函數(shù)里添加:RCC_APB2PeriphClockCmd(

23、RCC_APB2Periph_USART1 |RCC_A PB2Periph_GP lOA | RCC_A PB2 Periph_GPIOB , ENABLE);不用其他中斷,NVIC初始化函數(shù)不用改GPIO初始化代碼:/IO輸入,GPlOB的2、10、11腳輸出GP IO_I nitStructure.G PIO_ Pin = GPIO_P in_2 ;/管腳號輸出速度 輸入輸出模式GP IO_I nitStructure.G PIO_S peed = GPIO_Sp eed_50MH z; /GP IO_I ni tStructure.G PI O_Mode = GPI O_Mode_Ou

24、t_ PP; /GP IO_I nit(G PI OB, &GP IO_I nitStructure); /初始化簡單的延遲函數(shù):void Delay(vu32 n Cou nt) /簡單延時函數(shù) for (; nCount != 0; nCount-); /循環(huán)計數(shù)延時完成之后再在 main.c的while里面寫一段:寫入1GP IO_WriteBit(G PIOB, GPIO_P in_2, (BitActio n)0x01);/Delay ( 0xffff);寫入0GP IO_WriteBit(G PIOB, GPIO_P in_2, (BitActio n)0x00);/Del

25、ay ( 0xffff);就可以看到連接在 PB2腳上的LED閃爍了,單片機(jī)就跑起來了。STM32筆記之八:來跟 PC打個招呼,基本串口通訊a) 目的:在基礎(chǔ)實驗成功的基礎(chǔ)上,對串口的調(diào)試方法進(jìn)行實踐。硬件代碼順利完成之后,對日后 調(diào)試需要用到的printf重定義進(jìn)行調(diào)試, 固定在自己的庫函數(shù)中。b) 初始化函數(shù)定義:定義串口初始化函數(shù)void USART_Co nfiguratio n(void); /c)初始化函數(shù)調(diào)用:串口初始化函數(shù)調(diào)用void UART_C on figurati on (void); /初始化代碼:串口初始化函數(shù)void USART_Co nfiguratio n(void) /串口參數(shù)初始化USART_I ni tTy peDef USART_I nitStructure; /串口設(shè)置恢復(fù)默認(rèn)參數(shù)初始化參數(shù)設(shè)置USART_InitStructure.USART_BaudRate = 9600; /波特率 9600USART_InitStructure.USART_Wo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論