<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32學(xué)習筆記——測試閃燈程序

STM32學(xué)習筆記——測試閃燈程序

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

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

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

#include"stm32f10x_lib.h"

GPIO_InitTypeDefGPIO_InitStructure;//定義GPIO配置的結構體變量包括GPIO引腳,引腳速度,引腳模式

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

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

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

voidDelay(vu32nCount);

intmain(void)

{

#ifdefDEBUG

debug();

#endif

RCC_Configuration();//系統時(shí)鐘配置函數

NVIC_Configuration();//NVIC配置函數

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

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

//APB2是的I/O腳可達18MHz的反轉速度

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

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

//可以達到72MHz)

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

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

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

//IO端口寄存器必須以32位字的方式訪(fǎng)問(wèn),不允許以半字或者字節的方式訪(fǎng)問(wèn)

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

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

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

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

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

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);//用定義的結構體初始化PA口

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

while(1)

{

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

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

Delay(0x8FFFFF);//延時(shí)

GPIO_Write(GPIOB,(u16)~GPIO_ReadOutputData(GPIOB));//寫(xiě)一個(gè)字數據到PB口把GPIOB的值取反

Delay(0x8FFFFF);//延時(shí)

}

}

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

voidRCC_Configuration(void)

{

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

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

//打開(kāi)外部高速晶振

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

//RCC_HSE_Bypass:HSE晶振被外部時(shí)鐘旁路

//等待外部高速時(shí)鐘準備好

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

//HSEStartUpStatus,SUCCESS:HSE晶振穩定且就緒,ERROR:HSE晶振未就緒

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

{

//開(kāi)啟FLASH的預取功能

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能或失能預取指緩存,FLASH_PrefetchBuffer_Enable:預取指緩存使能

//FLASH_PrefetchBuffer_Disable:預取指緩存失能

//FLASH延遲2個(gè)周期

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

//FLASH_Latency_1:1延時(shí)周期,FLASH_Latency_2:2延時(shí)周期

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

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

//分頻

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

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

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

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

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

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

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

//HSE時(shí)鐘頻率除以2

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

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

//使能PLL時(shí)鐘

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

//等待PLL時(shí)鐘就緒

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)//檢查指定的RCC標志位設置與否,輸入參數為待檢查的RCC標志位

//其取值情況詳見(jiàn)《STM32的函數說(shuō)明(中文)》P211.返回值為RCC_FLAG的新?tīng)顟B(tài),SET或RESET

{

}

//配置系統時(shí)鐘=PLL時(shí)鐘

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//設置系統時(shí)鐘SYSCLK,輸入參數用于指定用作系統時(shí)鐘的時(shí)鐘源

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

//選擇PLL作為系統時(shí)鐘

//檢查PLL時(shí)鐘是否作為系統時(shí)鐘

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

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

{

}

}

}

//嵌套向量中斷控制器配置函數

voidNVIC_Configuration(void)

{

#ifdefVECT_TAB_RAM

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

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

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

#else

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);

#endif

}

voidDelay(vu32nCount)

{

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

}

#ifdefDEBUG

//assert_failed編寫(xiě)于文件main.c或其他用戶(hù)C文件中

voidassert_failed(u8*file,u32line)

{

while(1)

{

}

}

#endif



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>