stm32入門C語(yǔ)言詳解_第1頁(yè)
stm32入門C語(yǔ)言詳解_第2頁(yè)
stm32入門C語(yǔ)言詳解_第3頁(yè)
stm32入門C語(yǔ)言詳解_第4頁(yè)
stm32入門C語(yǔ)言詳解_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

stm32入門C語(yǔ)言詳解閱讀flash:芯片內(nèi)部存儲(chǔ)器flash操作函數(shù)我的理解一一對(duì)芯片內(nèi)部flash進(jìn)行操作的函數(shù),包括讀取,狀態(tài),擦除,寫入等等,可以允許程序去操作flash上的數(shù)據(jù)。基礎(chǔ)應(yīng)用LFLASH時(shí)序延遲幾個(gè)周期,等待總線同步操作。推舉根據(jù)單片機(jī)系統(tǒng)運(yùn)行頻率,0—24MHZ時(shí),取Latency=。;24—48MHZ時(shí),取Latency=1;48~72MHz時(shí),取Latency=2。全部程序中必需的用法:FLASH_SetLatency(FLASH_Latency_2);位置:RCC初始化子函數(shù)里面,時(shí)鐘起振之后?;A(chǔ)應(yīng)用2,開(kāi)啟FLASH預(yù)讀緩沖功能,加速FLASH的讀取。全部程序中必需的用法:FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);位置:RCC初始化子函數(shù)里面,時(shí)鐘起振之后。3、閱讀lib:調(diào)試全部外設(shè)初始化的函數(shù)。我的理解——不理解,也不需要理解。只要知道全部外設(shè)在調(diào)試的時(shí)候,EWRAM需要從這個(gè)函數(shù)里面獲得調(diào)試所需信息的地址或者指針之類的信息?;A(chǔ)應(yīng)用1,只有一個(gè)函數(shù)debug。全部程序中必需的。用法:#ifdefDEBUGdebug();#endif位置:main函數(shù)開(kāi)頭,聲明變量之后。4、閱讀nvic:系統(tǒng)中斷管理。我的理解——管理系統(tǒng)內(nèi)部的中斷,負(fù)責(zé)打開(kāi)和關(guān)閉中斷?;A(chǔ)應(yīng)用1,中斷的初始化函數(shù),包括設(shè)置中斷向量表位置,和開(kāi)啟所需的中斷兩部分。全部程序中必需的。用法:voidNVIC_Configuration(void){NVIC_InitTypeDefNVIC_InitStructure;//中斷管理恢復(fù)默認(rèn)參數(shù)#ifdefVECT_TAB_RAM〃假如C/C++ComPiler?Preprocessor?Definedsymbols中的定義了VECT_TAB_RAM(見(jiàn)程序庫(kù)更改內(nèi)容的表格)NVIC_SetVectorTabIe(NVIC_VectTab_RAM,0x0);//則在RAM調(diào)試#else//假如沒(méi)有定義VECTJAB_RAMNVIC_SetVectorTabIe(NVIC_VectTab_FLASH,0乂0);//則在Flash里調(diào)試#endif//結(jié)束推斷語(yǔ)句//以下為中斷的開(kāi)啟過(guò)程,不是全部程序必需的。//NVIC_PriorityGrouPConfig(NVIC_PriorityGrouP_2);//設(shè)置NVIC優(yōu)先級(jí)分組,方式。//注:一共16個(gè)優(yōu)先級(jí),分為搶占式和響應(yīng)式。兩種優(yōu)先級(jí)所占的數(shù)量由此代碼確定,NVIC_PriorityGroup_x可以是0、1、2、3、4,分別代表?yè)屨純?yōu)先級(jí)有1、2、4、8、16個(gè)和響應(yīng)優(yōu)先級(jí)有16、8、4、2、1個(gè)。規(guī)定兩種優(yōu)先級(jí)的數(shù)量后,全部的中斷級(jí)別必需在其中選擇,搶占級(jí)別高的會(huì)打斷其他中斷優(yōu)先執(zhí)行,而響應(yīng)級(jí)別高的會(huì)在其他中斷執(zhí)行完優(yōu)先執(zhí)行。//NVIC_InitStructure.NVIC_IRQChannel=中斷通道名;//開(kāi)中斷,中斷名稱見(jiàn)函數(shù)庫(kù)//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//搶占優(yōu)先級(jí)//NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//響應(yīng)優(yōu)先級(jí)//NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//啟動(dòng)此通道的中斷//NVIC_Init(NVIC_InitStructure);中斷初始化}5、閱讀rcc:?jiǎn)纹瑱C(jī)時(shí)鐘管理。我的理解——管理外部、內(nèi)部和外設(shè)的時(shí)鐘,設(shè)置、打開(kāi)和關(guān)閉這些時(shí)鐘?;A(chǔ)應(yīng)用1:時(shí)鐘的初始化函數(shù)過(guò)程——用法:VoidRCC_Configuration(Void)//時(shí)鐘初始化函數(shù){ErrorStatusHSEStartUpStatus;//等待時(shí)鐘的穩(wěn)定RCC_DeInit();//時(shí)鐘管理重置RCC_HSEConfig(RCC_HSE_ON);//打開(kāi)外部晶振HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待外部晶振就緒if(HSEStartUpStatus==SUCCESS){FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//flash讀取緩沖,加速FLASH_SetLatency(FLASH_Latency_2);//flash操作的延時(shí)RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB使用系統(tǒng)時(shí)鐘RCC_PCLK2Config(RCC_HCLK_Div2);//APB2(高速)為HCLK的一半RCC_PCLK1Config(RCC_HCLK_Div2);//APB1(低速)為HCLK的一半//注:AHB主要負(fù)責(zé)外部存儲(chǔ)器時(shí)鐘。PB2負(fù)責(zé)AD,I/O,高級(jí)TIM,串口1。APB1負(fù)責(zé)DA,USB,SPI,I2C,CAN,串口2345,一般TIM。RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//PLLCLK=8MHz*9=72MHRCC_PLLCmd(ENABLE);//啟動(dòng)PLLwhile(RCC_GetFIagStatuS(RCC_FLAG_PLLRDY)==RESET){}//等待PLL啟動(dòng)RCJSYSCLKConfig(RCJSYSCLKSource-PLLCLK);〃將PLL設(shè)置為系統(tǒng)時(shí)鐘源while(RCC_GetSYSCLKSource()!=0x08){}〃等待系統(tǒng)時(shí)鐘源的啟動(dòng)}//RCC_AHBPeriPhClockCmd(ABP2設(shè)備1|ABP2設(shè)備2|,ENABLE);//啟動(dòng)AHP設(shè)備//RCC_APB2PeriphClockCmd(ABP2設(shè)備1|ABP2設(shè)備2|,ENABLE);//啟動(dòng)ABP2設(shè)備//RCC_APB1PeriphClockCmd(ABP2設(shè)備1|ABP2設(shè)備2|,ENABLE);//啟動(dòng)ABP1設(shè)備}6、閱讀exti:外部設(shè)備中斷函數(shù)我的理解——外部設(shè)備通過(guò)引腳給出的硬件中斷,也可以產(chǎn)生軟件中斷,19個(gè)上升、下降或都觸發(fā)。EXTI0?EXTI15連接到管腳,EXTI線16連接到PVD(VDD監(jiān)視),EXTI線17連接到RTC(鬧鐘),EXTI線18連接到USB(喚醒)?;A(chǔ)應(yīng)用1,設(shè)定外部中斷初始化函數(shù)。按需求,不是必需代碼。用法:voidEXTI_Configuration(void){EXTI_InitTypeDefEXTI_InitStructure;//外部設(shè)備中斷恢復(fù)默認(rèn)參數(shù)EXTI_InitStructure.EXTI_Line=通道1|通道2;//設(shè)定所需產(chǎn)生外部中斷的通道,一共19個(gè)。EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//產(chǎn)生中斷EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//上升下降沿都觸發(fā)EXTI_InitStructure.EXTI_LineCmd=ENABLE;//啟動(dòng)中斷的接收EXTI_Init(EXTI_InitStructure);//外部設(shè)備中斷啟動(dòng)}7、閱讀dma:通過(guò)總線而越過(guò)CPU讀取外設(shè)數(shù)據(jù)我的理解一一通過(guò)DMA應(yīng)用可以加速單片機(jī)外設(shè)、存儲(chǔ)器之間的數(shù)據(jù)傳輸,并在傳輸期間不影響CPU進(jìn)行其他事情。這對(duì)于入門開(kāi)發(fā)基本功能來(lái)說(shuō)沒(méi)有太大必要,這個(gè)內(nèi)容先行跳過(guò)。8、閱讀SyStiC:系統(tǒng)定時(shí)器我的理解——可以輸出和利用系統(tǒng)時(shí)鐘的計(jì)數(shù)、狀態(tài)?;A(chǔ)應(yīng)用1,精確計(jì)時(shí)的延時(shí)子函數(shù)。推舉使用的代碼。用法:StatiCvu32TimingDelay;//全局變量聲明voidSySTiCk_Config(Void)//systick初始化函數(shù){SySTiCk_CounterCmd(SySTiCk_Counter_DiSable);//停止系統(tǒng)定時(shí)器SySTiCk_ITConfig(DISABLE);//停止systick中斷SySTiCk_CLKSourceConfig(SySTiCk_CLKSource_HCLK_Div8);//systick使用HCLK作為時(shí)鐘源,頻率值除以8。SySTiCk_SetReload(9000);//重置時(shí)間1毫秒(以72MHz為基礎(chǔ)計(jì)算)SySTiCk_ITConfig(ENABLE);//開(kāi)啟systic中斷}voidDelay(u32nTime)//延遲一毫秒的函數(shù){SysTick_CounterCmd(SysTick_Counter_Enable);//systic開(kāi)頭計(jì)時(shí)TimingDelay=nTime;//計(jì)時(shí)長(zhǎng)度賦值給遞減變量while(TimingDelay!=0);//檢測(cè)是否計(jì)時(shí)完成SysTiCk_CounterCmd(SysTiCk_Counter_Disable);//關(guān)閉計(jì)數(shù)器SysTiCk_CounterCmd(SysTiCk_Counter_Clear);//清除計(jì)數(shù)值}voidTimingDelay_Decrement(void)//遞減變量函數(shù),函數(shù)名由“stm32f10x_it.c”中的中斷響應(yīng)函數(shù)定義好了。{if(TimingDelay!=0x00)//檢測(cè)計(jì)數(shù)變量是否達(dá)到0{TimingDelay--;//計(jì)數(shù)變量遞減}}注:建議嫻熟后使用,所涉及學(xué)問(wèn)和設(shè)備太多,新手出錯(cuò)的可能性比較大。新手可用簡(jiǎn)化的延時(shí)函數(shù)代替:voidDelay(vu32nCount)//簡(jiǎn)潔延時(shí)函數(shù){for(;nCount!=0;nCount--);//循環(huán)變量遞減計(jì)數(shù)}當(dāng)延時(shí)較長(zhǎng),又不需要精確計(jì)時(shí)的時(shí)候可以使用嵌套循環(huán):voidDelay(vu32nCount)//簡(jiǎn)潔的長(zhǎng)時(shí)間延時(shí)函數(shù){inti;//聲明內(nèi)部遞減變量for(;nCount!=0;nCount--)//遞減變量計(jì)數(shù){for(i=0;i0xffff;i++)}//內(nèi)部循環(huán)遞減變量計(jì)數(shù)}9、閱讀gpio:I/O設(shè)置函數(shù)我的理解——全部輸入輸出管腳模式設(shè)置,可以是上下拉、浮空、開(kāi)漏、模擬、推挽模式,頻率特性為2M,10M,50M。也可以向該管腳直接寫入數(shù)據(jù)和讀取數(shù)據(jù)?;A(chǔ)應(yīng)用1,gpio初始化函數(shù)。全部程序必需。用法:VoidGPIO_Configuration(Void){GPIOJnitTypeDefGPIO_InitStructure;//GPIO狀態(tài)恢復(fù)默認(rèn)參數(shù)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_標(biāo)號(hào)|GPIO_Pin_標(biāo)號(hào);//管腳位置定義,標(biāo)號(hào)可以是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屬性必需相同,默認(rèn)的GPIO參數(shù)為:ALL,2MHz,FLATING。假如其中任意一行與前一組相應(yīng)設(shè)置相同,那么那一行可以省略,由此推論假如前面已經(jīng)將此行參數(shù)設(shè)定為默認(rèn)參數(shù)(包括使用GPIOJnitTypeDefGPIOJnitStructure代碼),本組應(yīng)用也是默認(rèn)參數(shù)的話,那么也可以省略。以下重復(fù)這個(gè)過(guò)程直到全部應(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筆記之七:讓它跑起來(lái),基本硬件功能的建立0、試驗(yàn)之前的預(yù)備接通串口轉(zhuǎn)接器b)下載IO與串口的原廠程序,編譯通過(guò)保證調(diào)試所需硬件正常。1、flash,lib,nvic,rcc和GPIO,基礎(chǔ)程序庫(kù)編寫a)這幾個(gè)庫(kù)函數(shù)中有一些函數(shù)是關(guān)于芯片的初始化的,每個(gè)程序中必用。為保障程序品質(zhì),初學(xué)階段要求嚴(yán)格遵守官方習(xí)慣。留意,官方程序庫(kù)例程中有個(gè)platform_config.h文件,是特地用來(lái)指定同類外設(shè)中第幾號(hào)外設(shè)被使用,就是說(shuō)在main.C里面全部外設(shè)序號(hào)用X代替,比如USARTX,程序會(huì)到這個(gè)頭文件中去查找究竟是用那些外設(shè),初學(xué)的時(shí)候參考例程別被這個(gè)所迷惑住。全部必用代碼取自庫(kù)函數(shù)所帶例程,并增加逐句解釋。c)習(xí)慣挨次一一Lib(debug),RCC(包括Flash優(yōu)化),NVIC,GPIO必用模塊初始化函數(shù)的定義:voidRCC_Configuration(void);//定義時(shí)鐘初始化函數(shù)voidGPIO_Configuration(void);//定義管腳初始化函數(shù)voidNVIC_Configuration(void);//定義中斷管理初始化函數(shù)voidDelay(vu32nCount);//定義延遲函數(shù)Main中的初始化函數(shù)調(diào)用:RCC_Configuration();//時(shí)鐘初始化函數(shù)調(diào)用NVIC_Configuration();//中斷初始化函數(shù)調(diào)用GPIO_Configuration();//管腳初始化函數(shù)調(diào)用Lib留意事項(xiàng):屬于Lib的Debug函數(shù)的調(diào)用,應(yīng)當(dāng)放在main函數(shù)最開(kāi)頭,不要轉(zhuǎn)變其位置。g)RCC留意事項(xiàng):Flash優(yōu)化處理可以不做,但是兩句也不難也不用改參數(shù)……依據(jù)需要開(kāi)啟設(shè)備時(shí)鐘可以節(jié)約電能時(shí)鐘頻率需要依據(jù)實(shí)際狀況設(shè)置參數(shù)NVIC留意事項(xiàng)留意理解占先優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的分組的概念GPIO留意事項(xiàng)留意以后的過(guò)程中收集不同管腳應(yīng)用對(duì)應(yīng)的頻率和模式的設(shè)置。作為凹凸電平的I/O,所需設(shè)置:RCC初始化里面打開(kāi)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)簡(jiǎn)潔Delay函數(shù)voidDelay(Vu32nCount)//簡(jiǎn)潔延時(shí)函數(shù){for(;nCount!=0;nCount--);}試驗(yàn)步驟: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;//管腳號(hào)GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//輸出速度GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//輸入輸出模式GPIO_Init(GPIOB,GPIO_InitStructure);//初始化簡(jiǎn)潔的延遲函數(shù):voidDelay(vu32nCount)//簡(jiǎn)潔延時(shí)函數(shù){for(;nCount!=0;nCount--);}//循環(huán)計(jì)數(shù)延時(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閃耀了,單片機(jī)就跑起來(lái)了。STM32筆記之八:來(lái)跟PC打個(gè)招呼,基本串口通訊目的:在基礎(chǔ)試驗(yàn)勝利的基礎(chǔ)上,對(duì)串口的調(diào)試方法進(jìn)行實(shí)踐。硬件代碼順當(dāng)完成之后,對(duì)日后調(diào)試需要用到的Printf重定義進(jìn)行調(diào)試,固定在自己的庫(kù)函數(shù)中。初始化函數(shù)定義:voidUSART_Configuration(void);//定義串口初始化函數(shù)初始化函數(shù)調(diào)用:voidUART_Configuration(void);//串口初始化函數(shù)調(diào)用初始化代碼:voidUSART_Configuration(void)//串口初始化函數(shù){//串口參數(shù)初始化USART_InitTyPeDefUSART

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論