版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
stm32入門C語言詳解閱讀flash:芯片內(nèi)部存儲器flash操作函數(shù)我的理解一一對芯片內(nèi)部flash進行操作的函數(shù),包括讀取,狀態(tài),擦除,寫入等等,可以允許程序去操作flash上的數(shù)據(jù)?;A(chǔ)應(yīng)用LFLASH時序延遲幾個周期,等待總線同步操作。推舉根據(jù)單片機系統(tǒng)運行頻率,0—24MHZ時,取Latency=。;24—48MHZ時,取Latency=1;48~72MHz時,取Latency=2。全部程序中必需的用法:FLASH_SetLatency(FLASH_Latency_2);位置:RCC初始化子函數(shù)里面,時鐘起振之后。基礎(chǔ)應(yīng)用2,開啟FLASH預(yù)讀緩沖功能,加速FLASH的讀取。全部程序中必需的用法:FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);位置:RCC初始化子函數(shù)里面,時鐘起振之后。3、閱讀lib:調(diào)試全部外設(shè)初始化的函數(shù)。我的理解——不理解,也不需要理解。只要知道全部外設(shè)在調(diào)試的時候,EWRAM需要從這個函數(shù)里面獲得調(diào)試所需信息的地址或者指針之類的信息?;A(chǔ)應(yīng)用1,只有一個函數(shù)debug。全部程序中必需的。用法:#ifdefDEBUGdebug();#endif位置:main函數(shù)開頭,聲明變量之后。4、閱讀nvic:系統(tǒng)中斷管理。我的理解——管理系統(tǒng)內(nèi)部的中斷,負責打開和關(guān)閉中斷?;A(chǔ)應(yīng)用1,中斷的初始化函數(shù),包括設(shè)置中斷向量表位置,和開啟所需的中斷兩部分。全部程序中必需的。用法:voidNVIC_Configuration(void){NVIC_InitTypeDefNVIC_InitStructure;//中斷管理恢復(fù)默認參數(shù)#ifdefVECT_TAB_RAM〃假如C/C++ComPiler?Preprocessor?Definedsymbols中的定義了VECT_TAB_RAM(見程序庫更改內(nèi)容的表格)NVIC_SetVectorTabIe(NVIC_VectTab_RAM,0x0);//則在RAM調(diào)試#else//假如沒有定義VECTJAB_RAMNVIC_SetVectorTabIe(NVIC_VectTab_FLASH,0乂0);//則在Flash里調(diào)試#endif//結(jié)束推斷語句//以下為中斷的開啟過程,不是全部程序必需的。//NVIC_PriorityGrouPConfig(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、8、4、2、1個。規(guī)定兩種優(yōu)先級的數(shù)量后,全部的中斷級別必需在其中選擇,搶占級別高的會打斷其他中斷優(yōu)先執(zhí)行,而響應(yīng)級別高的會在其他中斷執(zhí)行完優(yōu)先執(zhí)行。//NVIC_InitStructure.NVIC_IRQChannel=中斷通道名;//開中斷,中斷名稱見函數(shù)庫//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//搶占優(yōu)先級//NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//響應(yīng)優(yōu)先級//NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//啟動此通道的中斷//NVIC_Init(NVIC_InitStructure);中斷初始化}5、閱讀rcc:單片機時鐘管理。我的理解——管理外部、內(nèi)部和外設(shè)的時鐘,設(shè)置、打開和關(guān)閉這些時鐘。基礎(chǔ)應(yīng)用1:時鐘的初始化函數(shù)過程——用法:VoidRCC_Configuration(Void)//時鐘初始化函數(shù){ErrorStatusHSEStartUpStatus;//等待時鐘的穩(wěn)定RCC_DeInit();//時鐘管理重置RCC_HSEConfig(RCC_HSE_ON);//打開外部晶振HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待外部晶振就緒if(HSEStartUpStatus==SUCCESS){FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//flash讀取緩沖,加速FLASH_SetLatency(FLASH_Latency_2);//flash操作的延時RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB使用系統(tǒng)時鐘RCC_PCLK2Config(RCC_HCLK_Div2);//APB2(高速)為HCLK的一半RCC_PCLK1Config(RCC_HCLK_Div2);//APB1(低速)為HCLK的一半//注:AHB主要負責外部存儲器時鐘。PB2負責AD,I/O,高級TIM,串口1。APB1負責DA,USB,SPI,I2C,CAN,串口2345,一般TIM。RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//PLLCLK=8MHz*9=72MHRCC_PLLCmd(ENABLE);//啟動PLLwhile(RCC_GetFIagStatuS(RCC_FLAG_PLLRDY)==RESET){}//等待PLL啟動RCJSYSCLKConfig(RCJSYSCLKSource-PLLCLK);〃將PLL設(shè)置為系統(tǒng)時鐘源while(RCC_GetSYSCLKSource()!=0x08){}〃等待系統(tǒng)時鐘源的啟動}//RCC_AHBPeriPhClockCmd(ABP2設(shè)備1|ABP2設(shè)備2|,ENABLE);//啟動AHP設(shè)備//RCC_APB2PeriphClockCmd(ABP2設(shè)備1|ABP2設(shè)備2|,ENABLE);//啟動ABP2設(shè)備//RCC_APB1PeriphClockCmd(ABP2設(shè)備1|ABP2設(shè)備2|,ENABLE);//啟動ABP1設(shè)備}6、閱讀exti:外部設(shè)備中斷函數(shù)我的理解——外部設(shè)備通過引腳給出的硬件中斷,也可以產(chǎn)生軟件中斷,19個上升、下降或都觸發(fā)。EXTI0?EXTI15連接到管腳,EXTI線16連接到PVD(VDD監(jiān)視),EXTI線17連接到RTC(鬧鐘),EXTI線18連接到USB(喚醒)。基礎(chǔ)應(yīng)用1,設(shè)定外部中斷初始化函數(shù)。按需求,不是必需代碼。用法:voidEXTI_Configuration(void){EXTI_InitTypeDefEXTI_InitStructure;//外部設(shè)備中斷恢復(fù)默認參數(shù)EXTI_InitStructure.EXTI_Line=通道1|通道2;//設(shè)定所需產(chǎn)生外部中斷的通道,一共19個。EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//產(chǎn)生中斷EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//上升下降沿都觸發(fā)EXTI_InitStructure.EXTI_LineCmd=ENABLE;//啟動中斷的接收EXTI_Init(EXTI_InitStructure);//外部設(shè)備中斷啟動}7、閱讀dma:通過總線而越過CPU讀取外設(shè)數(shù)據(jù)我的理解一一通過DMA應(yīng)用可以加速單片機外設(shè)、存儲器之間的數(shù)據(jù)傳輸,并在傳輸期間不影響CPU進行其他事情。這對于入門開發(fā)基本功能來說沒有太大必要,這個內(nèi)容先行跳過。8、閱讀SyStiC:系統(tǒng)定時器我的理解——可以輸出和利用系統(tǒng)時鐘的計數(shù)、狀態(tài)?;A(chǔ)應(yīng)用1,精確計時的延時子函數(shù)。推舉使用的代碼。用法:StatiCvu32TimingDelay;//全局變量聲明voidSySTiCk_Config(Void)//systick初始化函數(shù){SySTiCk_CounterCmd(SySTiCk_Counter_DiSable);//停止系統(tǒng)定時器SySTiCk_ITConfig(DISABLE);//停止systick中斷SySTiCk_CLKSourceConfig(SySTiCk_CLKSource_HCLK_Div8);//systick使用HCLK作為時鐘源,頻率值除以8。SySTiCk_SetReload(9000);//重置時間1毫秒(以72MHz為基礎(chǔ)計算)SySTiCk_ITConfig(ENABLE);//開啟systic中斷}voidDelay(u32nTime)//延遲一毫秒的函數(shù){SysTick_CounterCmd(SysTick_Counter_Enable);//systic開頭計時TimingDelay=nTime;//計時長度賦值給遞減變量while(TimingDelay!=0);//檢測是否計時完成SysTiCk_CounterCmd(SysTiCk_Counter_Disable);//關(guān)閉計數(shù)器SysTiCk_CounterCmd(SysTiCk_Counter_Clear);//清除計數(shù)值}voidTimingDelay_Decrement(void)//遞減變量函數(shù),函數(shù)名由“stm32f10x_it.c”中的中斷響應(yīng)函數(shù)定義好了。{if(TimingDelay!=0x00)//檢測計數(shù)變量是否達到0{TimingDelay--;//計數(shù)變量遞減}}注:建議嫻熟后使用,所涉及學問和設(shè)備太多,新手出錯的可能性比較大。新手可用簡化的延時函數(shù)代替:voidDelay(vu32nCount)//簡潔延時函數(shù){for(;nCount!=0;nCount--);//循環(huán)變量遞減計數(shù)}當延時較長,又不需要精確計時的時候可以使用嵌套循環(huán):voidDelay(vu32nCount)//簡潔的長時間延時函數(shù){inti;//聲明內(nèi)部遞減變量for(;nCount!=0;nCount--)//遞減變量計數(shù){for(i=0;i0xffff;i++)}//內(nèi)部循環(huán)遞減變量計數(shù)}9、閱讀gpio:I/O設(shè)置函數(shù)我的理解——全部輸入輸出管腳模式設(shè)置,可以是上下拉、浮空、開漏、模擬、推挽模式,頻率特性為2M,10M,50M。也可以向該管腳直接寫入數(shù)據(jù)和讀取數(shù)據(jù)。基礎(chǔ)應(yīng)用1,gpio初始化函數(shù)。全部程序必需。用法:VoidGPIO_Configuration(Void){GPIOJnitTypeDefGPIO_InitStructure;//GPIO狀態(tài)恢復(fù)默認參數(shù)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_標號|GPIO_Pin_標號;//管腳位置定義,標號可以是NONE、ALL、0至15。GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;//輸出速度2MHzGPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模擬輸入模式GPIO_Init(GPIOC,GPIOJnitStructure);//C組GPIO初始化//注:以上四行代碼為一組,每組GPIO屬性必需相同,默認的GPIO參數(shù)為:ALL,2MHz,FLATING。假如其中任意一行與前一組相應(yīng)設(shè)置相同,那么那一行可以省略,由此推論假如前面已經(jīng)將此行參數(shù)設(shè)定為默認參數(shù)(包括使用GPIOJnitTypeDefGPIOJnitStructure代碼),本組應(yīng)用也是默認參數(shù)的話,那么也可以省略。以下重復(fù)這個過程直到全部應(yīng)用的管腳全部被定義完畢。}基礎(chǔ)應(yīng)用2,向管腳寫入0或1用法:GPIO_WriteBit(GPIOB,GPIO_Pin_2,(BitAction)0x01);//寫入1基礎(chǔ)應(yīng)用3,從管腳讀入0或1用法:GPIO-ReadInputDataBit(GPIOA,GPIO_Pin_6)STM32筆記之七:讓它跑起來,基本硬件功能的建立0、試驗之前的預(yù)備接通串口轉(zhuǎn)接器b)下載IO與串口的原廠程序,編譯通過保證調(diào)試所需硬件正常。1、flash,lib,nvic,rcc和GPIO,基礎(chǔ)程序庫編寫a)這幾個庫函數(shù)中有一些函數(shù)是關(guān)于芯片的初始化的,每個程序中必用。為保障程序品質(zhì),初學階段要求嚴格遵守官方習慣。留意,官方程序庫例程中有個platform_config.h文件,是特地用來指定同類外設(shè)中第幾號外設(shè)被使用,就是說在main.C里面全部外設(shè)序號用X代替,比如USARTX,程序會到這個頭文件中去查找究竟是用那些外設(shè),初學的時候參考例程別被這個所迷惑住。全部必用代碼取自庫函數(shù)所帶例程,并增加逐句解釋。c)習慣挨次一一Lib(debug),RCC(包括Flash優(yōu)化),NVIC,GPIO必用模塊初始化函數(shù)的定義:voidRCC_Configuration(void);//定義時鐘初始化函數(shù)voidGPIO_Configuration(void);//定義管腳初始化函數(shù)voidNVIC_Configuration(void);//定義中斷管理初始化函數(shù)voidDelay(vu32nCount);//定義延遲函數(shù)Main中的初始化函數(shù)調(diào)用:RCC_Configuration();//時鐘初始化函數(shù)調(diào)用NVIC_Configuration();//中斷初始化函數(shù)調(diào)用GPIO_Configuration();//管腳初始化函數(shù)調(diào)用Lib留意事項:屬于Lib的Debug函數(shù)的調(diào)用,應(yīng)當放在main函數(shù)最開頭,不要轉(zhuǎn)變其位置。g)RCC留意事項:Flash優(yōu)化處理可以不做,但是兩句也不難也不用改參數(shù)……依據(jù)需要開啟設(shè)備時鐘可以節(jié)約電能時鐘頻率需要依據(jù)實際狀況設(shè)置參數(shù)NVIC留意事項留意理解占先優(yōu)先級和響應(yīng)優(yōu)先級的分組的概念GPIO留意事項留意以后的過程中收集不同管腳應(yīng)用對應(yīng)的頻率和模式的設(shè)置。作為凹凸電平的I/O,所需設(shè)置:RCC初始化里面打開RCJAPB2PeriPhCIockCmd(RCC_APB2Periph_GPIOA);GPIO里面管腳設(shè)定:IO輸出(50MHz,Out_PP);IO輸入(50乂W,IPU);GPIO應(yīng)用GPIO_WriteBit(GPIOB,GPIO_Pin_2,BijRESET);//重置GPIO_WriteBit(GPIOB,GPIO_Pin_2,(BitAction)0乂01);//寫入1GPIO_WriteBit(GPIOB,GPIO_Pin_2,(BitAction)0乂00);//寫入0GPIO-ReadInputDataBit(GPIOA,GPIO_Pin_6);〃讀入IOk)簡潔Delay函數(shù)voidDelay(Vu32nCount)//簡潔延時函數(shù){for(;nCount!=0;nCount--);}試驗步驟:RCC初始化函數(shù)里添加RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);不用其他中斷,NVIC初始化函數(shù)不用改GPIO初始化代碼://IO輸入,GPIOB的2、10、11腳輸出GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//管腳號GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//輸出速度GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//輸入輸出模式GPIO_Init(GPIOB,GPIO_InitStructure);//初始化簡潔的延遲函數(shù):voidDelay(vu32nCount)//簡潔延時函數(shù){for(;nCount!=0;nCount--);}//循環(huán)計數(shù)延時完成之后再在main.C的while里面寫一段:GPIO_WriteBit(GPIOB,GPIO_Pin_2,(BitACtion)0乂01);//寫入1Delay(0xffff);GPIO_WriteBit(GPIOB,GPIO_Pin_2,(BitACtion)0乂00);//寫入0Delay(0xffff);就可以看到連接在PB2腳上的LED閃耀了,單片機就跑起來了。STM32筆記之八:來跟PC打個招呼,基本串口通訊目的:在基礎(chǔ)試驗勝利的基礎(chǔ)上,對串口的調(diào)試方法進行實踐。硬件代碼順當完成之后,對日后調(diào)試需要用到的Printf重定義進行調(diào)試,固定在自己的庫函數(shù)中。初始化函數(shù)定義:voidUSART_Configuration(void);//定義串口初始化函數(shù)初始化函數(shù)調(diào)用:voidUART_Configuration(void);//串口初始化函數(shù)調(diào)用初始化代碼:voidUSART_Configuration(void)//串口初始化函數(shù){//串口參數(shù)初始化USART_InitTyPeDefUSART
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年生物法殼聚糖合作協(xié)議書
- 一年級小學生自我介紹200字女生版
- ?二年級小學生讀的睡前小故事10篇
- Sucralfate-Standard-生命科學試劑-MCE
- Stearic-acid-PEG-Mal-MW-5000-生命科學試劑-MCE
- 2025屆高考英語二輪復(fù)習好題專題06書面表達-讀后續(xù)寫或概要寫作第04期含解析
- 2024年鍺單晶、鍺片及金屬鍺項目建議書
- 貴州省農(nóng)村信用社2024年高層次人才引進招聘報名表
- 2023屆新高考新教材化學人教版一輪學案-第九章第5講 合成高分子
- 玉溪師范學院《歌曲寫作與樂隊編配》2023-2024學年第一學期期末試卷
- 24年追覓在線測評28題及答案
- 《陸上風電場工程概算定額》NBT 31010-2019
- JTGT F20-2015 公路路面基層施工技術(shù)細則
- 第五章 中國特色社會主義理論體系的形成發(fā)展(一)
- 公園綠化養(yǎng)護服務(wù)投標方案
- BS EN ISO 15848-1-2015 工業(yè)閥-逸散性排放的測量、試驗和鑒定程序(中文)
- 期中家長會二年級數(shù)學
- (核電站)反應(yīng)堆棚和水補給系統(tǒng)(REA)
- 抗菌藥物使用強度整改的PDCA案例
- 昔日中國數(shù)學物理奧賽選手今何在
- 自來水廠操作規(guī)程手冊
評論
0/150
提交評論