在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32學習筆記——測試閃燈程序

            STM32學習筆記——測試閃燈程序

            作者: 時間:2016-11-28 來源:網(wǎng)絡 收藏
            //所使用的是STM32F103C8共有48個管腳,共有兩組GPIO,為GPIOA和GPIOB,每組有從0到15共16個引腳

            //注意對STM32F103C8的操作和對庫函數(shù)的使用,在使用時,要時刻參考《STM32F10xxx使用手冊》和《STM32的函數(shù)說明》這兩個文檔

            本文引用地址:http://www.biyoush.com/article/201611/322894.htm

            #include"stm32f10x_lib.h"

            GPIO_InitTypeDefGPIO_InitStructure;//定義GPIO配置的結(jié)構(gòu)體變量包括GPIO引腳,引腳速度,引腳模式

            ErrorStatusHSEStartUpStatus;//枚舉類型,錯誤狀態(tài)變量定義存儲外部高速時鐘HSE狀態(tài)

            voidRCC_Configuration(void);//RCC配置函數(shù)RCC:復位和時鐘控制

            voidNVIC_Configuration(void);//NVIC配置函數(shù)NVIC:嵌套向量中斷控制器

            voidDelay(vu32nCount);

            intmain(void)

            {

            #ifdefDEBUG

            debug();

            #endif

            RCC_Configuration();//系統(tǒng)時鐘配置函數(shù)

            NVIC_Configuration();//NVIC配置函數(shù)

            //使能APB2總線外設時鐘APB1,APB2兩條連接總線的外設。具有多個預分頻器用于配置AHB的頻率,高速APB(APB2)和低速APB(APB1)

            //區(qū)域。AHB和高速APB的最高頻率為72MHz,低速APB的最高頻率為36MHz

            //APB2是的I/O腳可達18MHz的反轉(zhuǎn)速度

            //AHB到APB(1,2)橋,該橋用來連接所有的APB設備

            //兩個AHB/APB橋在AHB和兩個APB總線之間提供完全同步地方連接。APB1被限制在36MHz,APB2工作在全速狀態(tài)(根據(jù)設備的不同

            //可以達到72MHz)

            //有些外設連接到APB1上,有些外設連接到APB2上,具體的情況參看使用手冊。

            //所以在外設使用前,要先調(diào)用函數(shù)使能相應總線的時鐘

            //通用輸入/輸出GPIO備用輸入/輸出AFIO

            //IO端口寄存器必須以32位字的方式訪問,不允許以半字或者字節(jié)的方式訪問

            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//使能相應的外設的時鐘

            //這里使能GPIOA,GPIOB和備用IO(AFIO)的時鐘

            //GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);//關(guān)閉調(diào)試端口重新映射使用仿真器調(diào)試時,不能用此語

            //下面是GPIO的設置,注意方法

            //配置相應的IO。注意配置IO功能時,使用的是GPIO配置的結(jié)構(gòu)體。前面已經(jīng)定義了GPIO的結(jié)構(gòu)體變量

            GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;//選擇所有腳#defineGPIO_Pin_All((u16)0xFFFF)

            GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//配置成推挽式輸出

            GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//輸出模式下I/O輸出速度50MHZ

            GPIO_Init(GPIOA,&GPIO_InitStructure);//用定義的結(jié)構(gòu)體初始化PA口

            GPIO_Init(GPIOB,&GPIO_InitStructure);//用定義的結(jié)構(gòu)體初始化PB口

            while(1)

            {

            GPIO_Write(GPIOB,(u16)~GPIO_ReadOutputData(GPIOB));//寫一個字數(shù)據(jù)到PB口寫入的數(shù)據(jù)是當前GPIOB讀取的值然后取反

            //就相當于把GPIOB的值取反

            Delay(0x8FFFFF);//延時

            GPIO_Write(GPIOB,(u16)~GPIO_ReadOutputData(GPIOB));//寫一個字數(shù)據(jù)到PB口把GPIOB的值取反

            Delay(0x8FFFFF);//延時

            }

            }

            //復位和時鐘設置函數(shù)注意配置的方法

            voidRCC_Configuration(void)

            {

            //復位RCC外部設備寄存器到默認值

            RCC_DeInit();//將外設RCC寄存器重設為缺省值

            //打開外部高速晶振

            RCC_HSEConfig(RCC_HSE_ON);//設置外部高速晶振HSERCC_HSE_ON:打開HSE晶振,RCC_HSE_OFF:關(guān)閉HSE晶振

            //RCC_HSE_Bypass:HSE晶振被外部時鐘旁路

            //等待外部高速時鐘準備好

            HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待HSE起振,返回錯誤狀態(tài)。前面已經(jīng)定義了ErrorStatus枚舉類型的變量

            //HSEStartUpStatus,SUCCESS:HSE晶振穩(wěn)定且就緒,ERROR:HSE晶振未就緒

            if(HSEStartUpStatus==SUCCESS)//外部高速時鐘已經(jīng)準備好

            {

            //開啟FLASH的預取功能

            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能或失能預取指緩存,F(xiàn)LASH_PrefetchBuffer_Enable:預取指緩存使能

            //FLASH_PrefetchBuffer_Disable:預取指緩存失能

            //FLASH延遲2個周期

            FLASH_SetLatency(FLASH_Latency_2);//設置FLASH存儲器代碼延時時鐘周期數(shù),可以設置FLASH_Latency_0:0延時周期,

            //FLASH_Latency_1:1延時周期,F(xiàn)LASH_Latency_2:2延時周期

            //配置AHB(HCLK)時鐘=SYSCLK

            RCC_HCLKConfig(RCC_SYSCLK_Div1);//設置AHB時鐘是系統(tǒng)時鐘SYSCLK的多少分頻,這里設為1分頻,還可以指定2,4,8,16,64,128,256,512

            //分頻

            //配置APB2(PCLK2)鐘=AHB時鐘

            RCC_PCLK2Config(RCC_HCLK_Div1);//設置高速AHB時鐘APB2是AHB的多少分頻,這里設為1分頻,還可以指定為2,4,8,16分頻

            //配置APB1(PCLK1)鐘=AHB1/2時鐘

            RCC_PCLK1Config(RCC_HCLK_Div2);//設置低速AHB時鐘APB1是AHB的多少分頻,這里設為2分頻,還可以指定為1,2,4,8,16分頻

            //配置PLL時鐘==外部高速晶體時鐘*9PLLCLK=8MHz*9=72MHz

            RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//設置PLL時鐘及倍頻系數(shù)第一個參數(shù)設置PLL的輸入時鐘源

            //可以有RCC_PLLSource_HSI_Div2:HSI時鐘頻率除以2,RCC_PLLSource_HSE_Div1:HSE時鐘頻率,RCC_PLLSource_HSE_Div2:

            //HSE時鐘頻率除以2

            //第二個參數(shù)設置PLL的倍頻系數(shù),可以是2~16倍頻,這里設為9倍頻

            //警告:必須正確設置軟件,使PLL輸出時鐘頻率不超過72MHz

            //使能PLL時鐘

            RCC_PLLCmd(ENABLE);//使能或失能PLL,參數(shù)可以取ENABLE或DISABLE,如果PLL被用于系統(tǒng)時鐘,那么它不能被失能

            //等待PLL時鐘就緒

            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)//檢查指定的RCC標志位設置與否,輸入?yún)?shù)為待檢查的RCC標志位

            //其取值情況詳見《STM32的函數(shù)說明(中文)》P211.返回值為RCC_FLAG的新狀態(tài),SET或RESET

            {

            }

            //配置系統(tǒng)時鐘=PLL時鐘

            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//設置系統(tǒng)時鐘SYSCLK,輸入?yún)?shù)用于指定用作系統(tǒng)時鐘的時鐘源

            //可以為:RCC_SYSCLKSource_HSI:選擇HSI作為系統(tǒng)時鐘,RCC_SYSCLKSource_HSE:選擇HSE作為系統(tǒng)時鐘,RCC_SYSCLKSource_PLLCLK

            //選擇PLL作為系統(tǒng)時鐘

            //檢查PLL時鐘是否作為系統(tǒng)時鐘

            while(RCC_GetSYSCLKSource()!=0x08)//函數(shù)RCC_GetSYSCLKSource()返回用作系統(tǒng)時鐘的時鐘源。

            //返回值可以是:0x00:HSI作為系統(tǒng)時鐘,0x04:HSE作為系統(tǒng)時鐘,0x08:PLL作為系統(tǒng)時鐘

            {

            }

            }

            }

            //嵌套向量中斷控制器配置函數(shù)

            voidNVIC_Configuration(void)

            {

            #ifdefVECT_TAB_RAM

            NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);//設置向量表的位置和偏移,第一個參數(shù)指定向量表的位置在RAM還是在

            //程序存儲器flash中,取值可以是NVIC_VectTab_RAM:向量表位于RAM,NVIC_VectTab_FLASH:向量表位于FLASH。第二個參數(shù)為

            //向量表基地址的偏移量,對于FLASH,該參數(shù)值必須高于0x08000100,對于RAM,必須高于0x100.它同時必須是256(64*4)的整數(shù)倍

            #else

            NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);

            #endif

            }

            voidDelay(vu32nCount)

            {

            for(;nCount!=0;nCount--);

            }

            #ifdefDEBUG

            //assert_failed編寫于文件main.c或其他用戶C文件中

            voidassert_failed(u8*file,u32line)

            {

            while(1)

            {

            }

            }

            #endif



            關(guān)鍵詞: STM32學習筆記測試閃

            評論


            技術(shù)專區(qū)

            關(guān)閉