日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]實驗的STM32型號:STM32F103C8T6 48引腳涉及到的知識:RCC,GPIO,TIMER,PWM 設(shè)置*RCC需打開外部時鐘*GPIO查表得知 PA3 默認(rèn)復(fù)用引腳 TIM2_CH4*TIMER使用默認(rèn)的TIM2_CH4*PWM的控制使用了動態(tài)的占空比來達(dá)到呼吸效果

實驗的STM32型號:

STM32F103C8T6 48引腳

涉及到的知識:

RCC,GPIO,TIMER,PWM 設(shè)置

*RCC需打開外部時鐘

*GPIO查表得知 PA3 默認(rèn)復(fù)用引腳 TIM2_CH4

*TIMER使用默認(rèn)的TIM2_CH4

*PWM的控制使用了動態(tài)的占空比來達(dá)到呼吸效果

下面給出代碼:


#include"stm32f10x.h"

voidRCC_cfg(void);

voidGPIO_cfg(void);

voidTIMER_cfg(void);

voidPWM_cfg(void);

intled_fx=1;

intled_dt=0;

voiddelay_ms(u16time)

{

u16i=0;

while(time--)

{

i=12000;

while(i--);

}

}

intmain(void)

{

RCC_cfg();

GPIO_cfg();

TIMER_cfg();

PWM_cfg();

//使能TIM2計時器,開始輸出PWM

TIM_Cmd(TIM2,ENABLE);

while(1)

{

delay_ms(5);

if(led_fx==1)

{

led_dt++;

}

else

{

led_dt--;

}

if(led_dt>500)led_fx=0;

if(led_dt==0)led_fx=1;

TIM_SetCompare4(TIM2,led_dt);

}

}

voidRCC_cfg(void)

{

//定義錯誤狀態(tài)變量

ErrorStatusHSEStartUpStatus;

//將RCC寄存器重新設(shè)置為默認(rèn)值

RCC_DeInit();

//打開外部高速時鐘晶振

RCC_HSEConfig(RCC_HSE_ON);

//等待外部高速時鐘晶振工作

HSEStartUpStatus=RCC_WaitForHSEStartUp();

if(HSEStartUpStatus==SUCCESS)

{

//設(shè)置AHB時鐘(HCLK)為系統(tǒng)時鐘

RCC_HCLKConfig(RCC_SYSCLK_Div1);

//設(shè)置高速AHB時鐘(APB2)為HCLK時鐘

RCC_PCLK2Config(RCC_HCLK_Div1);

//設(shè)置低速AHB時鐘(APB1)為HCLK的2分頻

RCC_PCLK1Config(RCC_HCLK_Div2);

//設(shè)置FLASH代碼延時

FLASH_SetLatency(FLASH_Latency_2);

//使能預(yù)取指緩存

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

//設(shè)置PLL時鐘,為HSE的9倍頻8MHz*9=72MHz

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

//使能PLL

RCC_PLLCmd(ENABLE);

//等待PLL準(zhǔn)備就緒

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);

//設(shè)置PLL為系統(tǒng)時鐘源

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

//判斷PLL是否是系統(tǒng)時鐘

while(RCC_GetSYSCLKSource()!=0x08);

}

//開啟TIM2的時鐘

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

//開啟GPIOB的時鐘和復(fù)用功能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);

}

voidGPIO_cfg(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

//GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE);//映射引腳,默認(rèn)PA3->TIM2_CH4因此不用映射

//選擇引腳3

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;

//輸出頻率最大50MHz

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

//復(fù)用推挽輸出

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

//PA

GPIO_Init(GPIOA,&GPIO_InitStructure);

}

voidTIMER_cfg(void)

{

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

//重新將Timer設(shè)置為缺省值

TIM_DeInit(TIM2);

//采用內(nèi)部時鐘給TIM2提供時鐘源

TIM_InternalClockConfig(TIM2);

//預(yù)分頻系數(shù)為0

TIM_TimeBaseStructure.TIM_Prescaler=0;

//設(shè)置計數(shù)溢出大小

TIM_TimeBaseStructure.TIM_Period=500;

//設(shè)置計數(shù)器模式為向上計數(shù)模式(+1)

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

//設(shè)置時鐘分割

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;

//將配置應(yīng)用到TIM2中

TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

}

voidPWM_cfg(void)

{

TIM_OCInitTypeDefTimOCInitStructure;

//設(shè)置缺省

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉