版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、閱讀flash: 芯片內(nèi)部存儲(chǔ)器flash操作函數(shù)我的理解對(duì)芯片內(nèi)部flash進(jìn)行操作的函數(shù),包括讀取,狀態(tài),擦除,寫入等等,可以允許程序去操作flash上的數(shù)據(jù)。 基礎(chǔ)應(yīng)用1,F(xiàn)LASH時(shí)序延遲幾個(gè)周期,等待總線同步操作。推薦按照單片機(jī)系統(tǒng)運(yùn)行頻率,024MHz時(shí),取Latency=0;2448MHz時(shí),取Latency=1;4872MHz時(shí),取Latency=2。所有程序中必須的用法:FLASH_SetLatency(FLASH_Latency_2); 位置:RCC初始化子函數(shù)里面,時(shí)鐘起振之后。 基礎(chǔ)應(yīng)用2,開啟FLASH預(yù)讀緩沖功能,加速FLASH的讀取。所有程序中必須的 用法:FLA
2、SH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); 位置:RCC初始化子函數(shù)里面,時(shí)鐘起振之后。 3、閱讀lib:調(diào)試所有外設(shè)初始化的函數(shù)。 我的理解不理解,也不需要理解。只要知道所有外設(shè)在調(diào)試的時(shí)候,EWRAM需要從這個(gè)函數(shù)里面獲得調(diào)試所需信息的地址或者指針之類的信息。 基礎(chǔ)應(yīng)用1,只有一個(gè)函數(shù)debug。所有程序中必須的。 用法: #ifdef DEBUG debug(); #endif 位置:main函數(shù)開頭,聲明變量之后。 4、 閱讀nvic:系統(tǒng)中斷管理。 我的理解管理系統(tǒng)內(nèi)部的中斷,負(fù)責(zé)打開和關(guān)閉中斷。 基礎(chǔ)應(yīng)用1,中斷的初始化函數(shù)
3、,包括設(shè)置中斷向量表位置,和開啟所需的中斷兩部分。所有程序中必須的。 用法: void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure; /中斷管理恢復(fù)默認(rèn)參數(shù) #ifdef VECT_TAB_RAM /如果C/C+ CompilerPreprocessorDefined symbols中的定義了VECT_TAB_RAM(見(jiàn)程序庫(kù)更改內(nèi)容的表格) NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); /則在RAM調(diào)試 #else /如果沒(méi)有定義VECT_TAB_RAM NVIC_SetV
4、ectorTable(NVIC_VectTab_FLASH, 0x0);/則在Flash里調(diào)試 #endif /結(jié)束判斷語(yǔ)句 /以下為中斷的開啟過(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ì)打斷其
5、他中斷優(yōu)先執(zhí)行,而響應(yīng)級(jí)別高的會(huì)在其他中斷執(zhí)行完優(yōu)先執(zhí)行。 /NVIC_InitStructure.NVIC_IRQChannel = 中斷通道名; /開中斷,中斷名稱見(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_InitSt
6、ructure); 中斷初始化 5、閱讀rcc:?jiǎn)纹瑱C(jī)時(shí)鐘管理。 我的理解管理外部、內(nèi)部和外設(shè)的時(shí)鐘,設(shè)置、打開和關(guān)閉這些時(shí)鐘。 基礎(chǔ)應(yīng)用1:時(shí)鐘的初始化函數(shù)過(guò)程 用法:void RCC_Configuration(void) /時(shí)鐘初始化函數(shù) ErrorStatus HSEStartUpStatus; /等待時(shí)鐘的穩(wěn)定 RCC_DeInit(); /時(shí)鐘管理重置 RCC_HSEConfig(RCC_HSE_ON); /打開外部晶振 HSEStartUpStatus = RCC_WaitForHSEStartUp(); /等待外部晶振就緒 if (HSEStartUpStatus = SUCC
7、ESS) 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,串
8、口1。APB1負(fù)責(zé)DA,USB,SPI,I2C,CAN,串口2345,普通TIM。 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /PLLCLK = 8MHz * 9 = 72 MH RCC_PLLCmd(ENABLE); /啟動(dòng)PLL while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /等待PLL啟動(dòng) RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /將PLL設(shè)置為系統(tǒng)時(shí)鐘源 while (RCC_GetSYSCLKSource() != 0x
9、08) /等待系統(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ā)。EXTI0EXTI15連接到管腳,EXTI線16連接到PVD(VD
10、D監(jiān)視),EXTI線17連接到RTC(鬧鐘),EXTI線18連接到USB(喚醒)?;A(chǔ)應(yīng)用1,設(shè)定外部中斷初始化函數(shù)。按需求,不是必須代碼。 用法: void EXTI_Configuration(void) EXTI_InitTypeDef EXTI_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_
11、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ì)于入門開發(fā)基本功能來(lái) 說(shuō)沒(méi)有太大必要,這個(gè)內(nèi)容先行跳過(guò)。 8、 閱讀systic:系統(tǒng)定時(shí)器 我的理解可以輸出和利用系統(tǒng)時(shí)鐘的計(jì)數(shù)、狀態(tài)。 基礎(chǔ)應(yīng)用1,精確計(jì)時(shí)的延
12、時(shí)子函數(shù)。推薦使用的代碼。 用法: static vu32 TimingDelay; /全局變量聲明 void SysTick_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毫秒
13、(以72MHz為基礎(chǔ)計(jì)算) SysTick_ITConfig(ENABLE); /開啟systic中斷 void Delay (u32 nTime) /延遲一毫秒的函數(shù) SysTick_CounterCmd(SysTick_Counter_Enable); /systic開始計(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_Cle
14、ar); /清除計(jì)數(shù)值 void TimingDelay_Decrement(void) /遞減變量函數(shù),函數(shù)名由“stm32f10x_it.c”中的中斷響應(yīng)函數(shù)定義好了。 if (TimingDelay != 0x00) /檢測(cè)計(jì)數(shù)變量是否達(dá)到0 TimingDelay-; /計(jì)數(shù)變量遞減 注:建議熟練后使用,所涉及知識(shí)和設(shè)備太多,新手出錯(cuò)的可能性比較大。新手可用簡(jiǎn)化的延時(shí)函數(shù)代替: void Delay(vu32 nCount) /簡(jiǎn)單延時(shí)函數(shù) for(; nCount != 0; nCount-); /循環(huán)變量遞減計(jì)數(shù) 當(dāng)延時(shí)較長(zhǎng),又不需要精確計(jì)時(shí)的時(shí)候可以使用嵌套循環(huán): void De
15、lay(vu32 nCount) /簡(jiǎn)單的長(zhǎng)時(shí)間延時(shí)函數(shù) int i; /聲明內(nèi)部遞減變量 for(; nCount != 0; nCount-) /遞減變量計(jì)數(shù) for (i=0; i<0xffff; i+) /內(nèi)部循環(huán)遞減變量計(jì)數(shù) 9、 閱讀gpio:I/O設(shè)置函數(shù) 我的理解所有輸入輸出管腳模式設(shè)置,可以是上下拉、浮空、開漏、模擬、推挽模式,頻率特性為2M,10M,50M。也可以向該管腳直接寫入數(shù)據(jù)和讀取數(shù)據(jù)?;A(chǔ)應(yīng)用1,gpio初始化函數(shù)。所有程序必須。 用法:void GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStruc
16、ture; /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;/輸出速度2MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; /模擬輸入模式 GPIO_Init(GPIOC, &GPIO_InitStructure); /C組GPIO初始化 /注:以上四行代碼為一組,每組GPIO屬性必須相同,默認(rèn)
17、的GPIO參數(shù)為:ALL,2MHz,F(xiàn)LATING。如果其中任意一行與前一組相應(yīng)設(shè)置相同,那么那一行可以省略,由此推論如果前面已經(jīng)將此行參數(shù)設(shè)定為默認(rèn)參數(shù)(包括使用GPIO_InitTypeDef GPIO_InitStructure代碼),本組應(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)
18、 STM32筆記之七:讓它跑起來(lái),基本硬件功能的建立 0、 實(shí)驗(yàn)之前的準(zhǔn)備 a) 接通串口轉(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è)所迷惑住。
19、b) 全部必用代碼取自庫(kù)函數(shù)所帶例程,并增加逐句注釋。 c) 習(xí)慣順序Lib(debug),RCC(包括Flash優(yōu)化),NVIC,GPIO d) 必用模塊初始化函數(shù)的定義: void RCC_Configuration(void); /定義時(shí)鐘初始化函數(shù) void GPIO_Configuration(void); /定義管腳初始化函數(shù) void NVIC_Configuration(void); /定義中斷管理初始化函數(shù) void Delay(vu32 nCount); /定義延遲函數(shù) e) Main中的初始化函數(shù)調(diào)用: RCC_Configuration(); /時(shí)鐘初始化函數(shù)調(diào)用 NV
20、IC_Configuration(); /中斷初始化函數(shù)調(diào)用 GPIO_Configuration(); /管腳初始化函數(shù)調(diào)用 f) Lib注意事項(xiàng):屬于Lib的Debug函數(shù)的調(diào)用,應(yīng)該放在main函數(shù)最開始,不要改變其位置。 g) RCC注意事項(xiàng): Flash優(yōu)化處理可以不做,但是兩句也不難也不用改參數(shù)根據(jù)需要開啟設(shè)備時(shí)鐘可以節(jié)省電能時(shí)鐘頻率需要根據(jù)實(shí)際情況設(shè)置參數(shù) h) NVIC注意事項(xiàng) 注意理解占先優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的分組的概念 i) GPIO注意事項(xiàng) 注意以后的過(guò)程中收集不同管腳應(yīng)用對(duì)應(yīng)的頻率和模式的設(shè)置。 作為高低電平的I/O,所需設(shè)置:RCC初始化里面打開RCC_APB2 Per
21、iphClockCmd(RCC_APB2Periph_GPIOA);GPIO里面管腳設(shè)定:IO輸出(50MHz,Out_PP);IO輸入(50MHz,IPU); j) GPIO應(yīng)用 GPIO_WriteBit(GPIOB, GPIO_Pin_2, Bit_RESET);/重置 GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x01);/寫入1 GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x00);/寫入0 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) ;/讀入IO k)
22、簡(jiǎn)單Delay函數(shù) void Delay(vu32 nCount)/簡(jiǎn)單延時(shí)函數(shù) for(; nCount != 0; nCount-); 實(shí)驗(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_Init
23、Structure.GPIO_Speed = GPIO_Speed_50MHz; /輸出速度 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /輸入輸出模式 GPIO_Init(GPIOB, &GPIO_InitStructure); /初始化 簡(jiǎn)單的延遲函數(shù): void Delay(vu32 nCount) /簡(jiǎn)單延時(shí)函數(shù) for (; nCount != 0; nCount-); /循環(huán)計(jì)數(shù)延時(shí) 完成之后再在main.c的while里面寫一段: GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)
24、0x01);/寫入1 Delay(0xffff); GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x00);/寫入0 Delay(0xffff); 就可以看到連接在PB2腳上的LED閃爍了,單片機(jī)就跑起來(lái)了。 STM32筆記之八:來(lái)跟PC打個(gè)招呼,基本串口通訊 a) 目的:在基礎(chǔ)實(shí)驗(yàn)成功的基礎(chǔ)上,對(duì)串口的調(diào)試方法進(jìn)行實(shí)踐。硬件代碼順利完成之后,對(duì)日后調(diào)試需要用到的printf重定義進(jìn)行調(diào)試, 固定在自己的庫(kù)函數(shù)中。 b) 初始化函數(shù)定義: void USART_Configuration(void); /定義串口初始化函數(shù) c) 初始化函數(shù)調(diào)用: void UART_Configuration(void); /串口初始化函數(shù)調(diào)用 初始化代碼: void USART_Configuration(void) /串口初始化函數(shù) /串口參數(shù)初始化 USART_InitTypeDef USART_InitStructure; /串口設(shè)置恢復(fù)默認(rèn)參數(shù) /初始化參數(shù)設(shè)置 USART_InitStructure.USART_BaudRate = 9600; /波特率9600 USART_InitStruct
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小額汽車貸款合同范例
- 2024年企業(yè)租車合同協(xié)議樣本
- 標(biāo)準(zhǔn)版市政道路工程合同
- 上門服務(wù)協(xié)議合同范本2024年
- 小型貨車銷售合同
- 網(wǎng)絡(luò)廣告合作協(xié)議
- 2024年度網(wǎng)絡(luò)安全防護(hù)服務(wù)合同
- 辦公租賃合同模板
- (2024版)人工智能醫(yī)療診斷系統(tǒng)開發(fā)合同
- 2024年度醫(yī)療器械獨(dú)家代理合同
- 跨境數(shù)據(jù)流動(dòng)的全球治理進(jìn)展、趨勢(shì)與中國(guó)路徑
- 【多旋翼無(wú)人機(jī)的組裝與調(diào)試5600字(論文)】
- 2023年遼陽(yáng)市宏偉區(qū)事業(yè)單位考試真題
- 環(huán)境工程專業(yè)英語(yǔ) 課件
- 繼電保護(hù)動(dòng)作分析報(bào)告課件
- 五年級(jí)數(shù)學(xué)上冊(cè)8解方程課件
- 教學(xué)工作中存在問(wèn)題及整改措施
- 內(nèi)部項(xiàng)目跟投協(xié)議書(正)
- 鋼管靜壓樁質(zhì)量監(jiān)理細(xì)則
- 5000頭奶牛養(yǎng)殖場(chǎng)新建項(xiàng)目環(huán)境評(píng)估報(bào)告書
- 16飛機(jī)顛簸教學(xué)課件
評(píng)論
0/150
提交評(píng)論