STM32入門C語言詳解_第1頁
STM32入門C語言詳解_第2頁
STM32入門C語言詳解_第3頁
STM32入門C語言詳解_第4頁
STM32入門C語言詳解_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、能,加速FLASH 的讀取。所有程序中必須的用法: FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);位置: RCC 初始化子函數(shù)里面,時鐘起振之后。3 、閱讀 lib :調試所有外設初始化的函數(shù)。我的理解 不理解,也不需要理解。只要知道所有外設在調試的時候,EWRAM需要從這個函數(shù)里面獲得調試所需信息的地址或者指針之類的信息。基礎應用1 ,只有一個函數(shù)debug 。所有程序中必須的。用法:#ifdef DEBUGdebug();#endif位置: main 函數(shù)開頭,聲明變量之后。4 、 閱讀 nvic :系統(tǒng)中斷管理。我的理解 管理系

3、統(tǒng)內(nèi)部的中斷,負責打開和關閉中斷?;A應用1 ,中斷的初始化函數(shù),包括設置中斷向量表位置,和開啟所需的中斷兩部分。所有程序中必須的。用法:void NVIC_Configuration(void)NVIC_InitTypeDef NVIC_InitStructure; /中斷管理恢復默認參數(shù)#ifdef VECT_TAB_RAM /如果 C/C+ CompilerPreprocessorDefined symbols中的定義了VECT_TAB_RAM(見程序庫更改內(nèi)容的表格)NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); /則在 RAM 調試#else

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

5、 、8、4 、2 、1 個。規(guī)定兩種優(yōu)先級的數(shù)量后,所有的中斷級別必須在其中選擇,搶占級別高的會打斷其他中斷優(yōu)先執(zhí)行,而響應級別高的會在其他中斷執(zhí)行完優(yōu)先執(zhí)行。/NVIC_InitStructure.NVIC_IRQChannel =中斷通道名 ; /開中斷,中斷名稱見函數(shù)庫/NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /搶占優(yōu)先級/NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /響應優(yōu)先級1最新 料推薦/NVIC_InitStructure.NVIC_IRQChan

6、nelCmd = ENABLE; /啟動此通道的中斷/NVIC_Init(&NVIC_InitStructure);中斷初始化5 、閱讀 rcc :單片機時鐘管理。我的理解 管理外部、內(nèi)部和外設的時鐘,設置、打開和關閉這些時鐘?;A應用1 :時鐘的初始化函數(shù)過程用法: void RCC_Configuration(void) /時鐘初始化函數(shù)ErrorStatus HSEStartUpStatus; /等待時鐘的穩(wěn)定RCC_DeInit(); / 時鐘管理重置RCC_HSEConfig(RCC_HSE_ON); /打開外部晶振HSEStartUpStatus = RCC_WaitForHSES

7、tartUp(); /等待外部晶振就緒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(低速)為 HC

8、LK的一半/注: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 = 72 MHRCC_PLLCmd(ENABLE); / 啟動 PLLwhile (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /等待 PLL 啟動RCC_SYSCLKConfig(RCC_SYSCLKS

9、ource_PLLCLK); /將 PLL 設置為系統(tǒng)時鐘源while (RCC_GetSYSCLKSource() != 0x08) / 等待系統(tǒng)時鐘源的啟動/RCC_AHBPeriphClockCmd(ABP2設備 1 | ABP2 設備 2 |, ENABLE); /啟動 AHP 設備/RCC_APB2PeriphClockCmd(ABP2設備 1 | ABP2設備 2 |, ENABLE);/啟動 ABP2設備/RCC_APB1PeriphClockCmd(ABP2設備 1 | ABP2設備 2 |, ENABLE); /啟動 ABP1設備6 、 閱讀 exti :外部設備中斷函數(shù)我的

10、理解 外部設備通過引腳給出的硬件中斷,也可以產(chǎn)生軟件中斷,19 個上升、 下降或都觸發(fā)。EXTI0 EXTI15 連接到管腳, EXTI 線 16連接到 PVD (VDD監(jiān)視), EXTI 線 17 連接到 RTC (鬧鐘), EXTI 線 18 連接到 USB (喚醒)?;A應用 1 ,設定外部中斷初始化函數(shù)。按需求,不是必須代碼。用法: void EXTI_Configuration(void)EXTI_InitTypeDef EXTI_InitStructure; /外部設備中斷恢復默認參數(shù)EXTI_InitStructure.EXTI_Line =通道 1| 通道 2; / 設定所需產(chǎn)

11、生外部中斷的通道,一共19 個。EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; /產(chǎn)生中斷EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; /上升下降沿都觸發(fā)EXTI_InitStructure.EXTI_LineCmd = ENABLE; /啟動中斷的接收2最新 料推薦EXTI_Init(&EXTI_InitStructure); /外部設備中斷啟動7 、 閱讀 dma :通過總線而越過CPU 讀取外設數(shù)據(jù)我的理解 通過 DMA 應用可以加速單片機外設、存儲器之間的數(shù)據(jù)傳輸,

12、并在傳輸期間不影響CPU 進行其他事情。這對于入門開發(fā)基本功能來說沒有太大必要,這個內(nèi)容先行跳過。8 、 閱讀 systic :系統(tǒng)定時器我的理解 可以輸出和利用系統(tǒng)時鐘的計數(shù)、狀態(tài)。基礎應用1 ,精確計時的延時子函數(shù)。推薦使用的代碼。用法:static vu32 TimingDelay; /全局變量聲明void SysTick_Config(void) /systick初始化函數(shù)SysTick_CounterCmd(SysTick_Counter_Disable); /停止系統(tǒng)定時器SysTick_ITConfig(DISABLE); /停止 systick 中斷SysTick_CLKSou

13、rceConfig(SysTick_CLKSource_HCLK_Div8); /systick使用 HCLK 作為時鐘源,頻率值除以 8。SysTick_SetReload(9000); /重置時間 1 毫秒(以 72MHz為基礎計算)SysTick_ITConfig(ENABLE); /開啟 systic 中斷void Delay (u32 nTime) /延遲一毫秒的函數(shù)SysTick_CounterCmd(SysTick_Counter_Enable); /systic開始計時TimingDelay = nTime; /計時長度賦值給遞減變量while(TimingDelay != 0

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

15、 Delay(vu32 nCount) /簡單延時函數(shù)for(; nCount != 0; nCount-); /循環(huán)變量遞減計數(shù)當延時較長,又不需要精確計時的時候可以使用嵌套循環(huán):void Delay(vu32 nCount) /簡單的長時間延時函數(shù) int i; / 聲明內(nèi)部遞減變量3最新 料推薦for(; nCount != 0; nCount-) / 減 量 數(shù) for (i=0; i0xffff; i+) /內(nèi)部循 減 量 數(shù)9 、 閱讀 gpio :I/O 置函數(shù)我的理解 所有 入 出管腳模式 置,可以是上下拉、浮空、開漏、模 、推挽模式, 率特性 2M , 10M ,50M 。也

16、可以向 管腳直接寫入數(shù)據(jù)和 取數(shù)據(jù)?;?用1 , gpio 初始化函數(shù)。所有程序必 。用法: void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure; /GPIO狀 恢復默 參數(shù)GPIO_InitStructure.GPIO_Pin = GPIO_Pin_ 號| GPIO_Pin_ 號; /管腳位置定 , 號可以是NONE 、 ALL 、 0 至 15 。GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;/ 出速度2MHzGPIO_InitStructure.GPIO_Mod

17、e = GPIO_Mode_AIN; /模 入模式GPIO_Init(GPIOC, &GPIO_InitStructure); /C組 GPIO 初始化/注:以上四行代 一 , 每 GPIO 屬性必 相同, 默 的 GPIO 參數(shù) :ALL ,2MHz ,F(xiàn)LATING 。如果其中任意一行與前一 相 置相同,那么那一行可以省略,由此推 如果前面已 將此行參數(shù) 定 默 參數(shù)(包括使用 GPIO_InitTypeDef GPIO_InitStructure 代 ),本 用也是默 參數(shù)的 ,那么也可以省略。以下重復 個 程直到所有 用的管腳全部被定 完 ?;?用2 ,向管腳寫入0 或 1用法: GP

18、IO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x01); /寫入 1基 用3 ,從管腳 入0 或 1用法: GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6)STM32 筆 之七: 它跑起來,基本硬件功能的建立0 、 之前的準 a) 接通串口 接器b) 下 IO 與串口的原廠程序, 通 保 所需硬件正常。1 、 flash ,lib , nvic , rcc 和 GPIO ,基 程序 寫a) 幾個 函數(shù)中有一些函數(shù)是關于芯片的初始化的,每個程序中必用。 保障程序品 ,初學 段要求 格遵守官方 。注意,官方程序 例程中有個pl

19、atform_config.h文件,是 用來指定同 外 中第幾號外 被使用,就是 在main.c 里面所有外 序號用x 代替,比如USARTx ,程序會到 個 文件中去 找到底是用那些外 ,初學的 候參考例程 被 個所迷惑住。b) 全部必用代 取自 函數(shù)所 例程,并增加逐句注 。c) 序 Lib ( debug ), RCC (包括 Flash 化), NVIC , GPIOd) 必用模 初始化函數(shù)的定 :void RCC_Configuration(void); / 定 初始化函數(shù) void GPIO_Configuration(void); / 定 管腳初始化函數(shù) void NVIC_Co

20、nfiguration(void); / 定 中斷管理初始化函數(shù) void Delay(vu32 nCount); / 定 延 函數(shù)e) Main 中的初始化函數(shù) 用:RCC_Configuration(); / 初始化函數(shù) 用NVIC_Configuration(); /中斷初始化函數(shù) 用4最新 料推薦GPIO_Configuration(); /管腳初始化函數(shù) 用f) Lib 注意事 :屬于Lib 的 Debug 函數(shù)的 用, 放在main 函數(shù)最開始,不要改 其位置。g) RCC 注意事 :Flash 化 理可以不做, 但是兩句也不 也不用改參數(shù) 根據(jù)需要開啟 可以 省 能 率需要根據(jù)

21、情況 置參數(shù)h) NVIC 注意事 注意理解占先 先 和響 先 的分 的概念i) GPIO 注意事 注意以后的 程中收集不同管腳 用 的 率和模式的 置。作 高低 平的 I/O ,所需 置: RCC 初始化里面打開 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA);GPIO里面管腳 定:IO 出( 50MHz , Out_PP );IO 入( 50MHz ,IPU );j) GPIO 用GPIO_WriteBit(GPIOB, GPIO_Pin_2, Bit_RESET);/重置GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitA

22、ction)0x01);/寫入 1GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x00);/寫入 0GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) ;/ 入 IOk) 簡單 Delay 函數(shù)void Delay(vu32 nCount)/ 延 函數(shù) for(; nCount != 0; nCount-); 步 :RCC 初始化函數(shù)里添加:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB ,

23、 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ù):void Delay(vu32 nCount)

24、/ 延 函數(shù) for (; nCount != 0; nCount-); / 循 數(shù)延 完成之后再在main.c 的 while 里面寫一段:GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x01);/寫入 1Delay ( 0xffff ) ;GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x00);/寫入 0Delay ( 0xffff ) ;就可以看到 接在PB2 腳上的 LED 了, 片機就跑起來了。STM32 筆 之八:來跟PC 打個招呼,基本串口通 a) 目的:在基 成功的基 上, 串口的 方法 行

25、 踐。硬件代 利完成之后, 日后 需要用到的 printf 重定 行 ,固定在自己的 函數(shù)中。b) 初始化函數(shù)定 :5最新 料推薦void USART_Configuration(void); /定義串口初始化函數(shù)c) 初始化函數(shù)調用:void UART_Configuration(void); /串口初始化函數(shù)調用初始化代碼:void USART_Configuration(void) /串口初始化函數(shù)/串口參數(shù)初始化USART_InitTypeDef USART_InitStructure; /串口設置恢復默認參數(shù)/初始化參數(shù)設置USART_InitStructure.USART_BaudRate = 9600;

溫馨提示

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

最新文檔

評論

0/150

提交評論