首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

stm32 TIM定时器[操作寄存器+库函数](6)

stm32 TIM定时器[操作寄存器+库函数](6)

main.c
001#include "stm32f10x.h"

002

003vu16 CCR1_Val = 40000;

004vu16 CCR2_Val = 20000;

005vu16 CCR3_Val = 10000;

006vu16 CCR4_Val = 5000;              

007

008void RCC_Configuration(void);

009void GPIO_Configuration(void);

010void NVIC_Configuration(void);

011void TIM_Configuration(void);

012

013int main(void)

014{

015   

016    RCC_Configuration();

017    GPIO_Configuration();

018    NVIC_Configuration();

019    TIM_Configuration();

020    while(1);

021}

022

023void TIM_Configuration(void)

024{

025    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

026    TIM_OCInitTypeDef TIM_OCInitStructure;

027    TIM_TimeBaseStructure.TIM_Period = 65535;

028    TIM_TimeBaseStructure.TIM_Prescaler = 7199;

029    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

030    TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

031

032    //TIM_PrescalerConfig(TIM2,7199,TIM_PSCReloadMode_Immediate);

033

034    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;

035    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

036    TIM_OCInitStructure.TIM_Pulse = CCR1_Val;

037    TIM_OC1Init(TIM2,&TIM_OCInitStructure);

038    TIM_OCInitStructure.TIM_Pulse = CCR2_Val;

039    TIM_OC2Init(TIM2,&TIM_OCInitStructure);

040    TIM_OCInitStructure.TIM_Pulse = CCR3_Val;

041    TIM_OC3Init(TIM2,&TIM_OCInitStructure);

042    TIM_OCInitStructure.TIM_Pulse = CCR4_Val;

043    TIM_OC4Init(TIM2,&TIM_OCInitStructure);

044     

045    TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Disable);

046    TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Disable);

047    TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Disable);

048    TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Disable);

049

050    TIM_ITConfig(TIM2,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE);

051     

052    TIM_Cmd(TIM2,ENABLE);

053

054}

055

056void NVIC_Configuration(void)

057{

058    NVIC_InitTypeDef NVIC_InitStructure;

059

060    #ifdef  VECT_TAB_RAM

061        NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);

062    #else

063        NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);

064    #endif

065

066    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

067    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

068    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

069    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

070    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

071    NVIC_Init(&NVIC_InitStructure);

072

073}

074

075   

076void GPIO_Configuration(void)

077{

078    GPIO_InitTypeDef GPIO_InitStructure;

079

080    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

081    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

082    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

083    GPIO_Init(GPIOA , &GPIO_InitStructure);

084}

085

086

087void RCC_Configuration(void)

088{

089    /* 定义枚举类型变量 HSEStartUpStatus */

090    ErrorStatus HSEStartUpStatus;

091

092    /* 复位系统时钟设置*/

093    RCC_DeInit();

094    /* 开启HSE*/

095    RCC_HSEConfig(RCC_HSE_ON);

096    /* 等待HSE起振并稳定*/

097    HSEStartUpStatus = RCC_WaitForHSEStartUp();

098    /* 判断HSE起是否振成功,是则进入if()内部 */

099    if(HSEStartUpStatus == SUCCESS)

100    {

101        /* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */

102        RCC_HCLKConfig(RCC_SYSCLK_Div1);

103        /* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */

104        RCC_PCLK2Config(RCC_HCLK_Div1);

105        /* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */

106        RCC_PCLK1Config(RCC_HCLK_Div2);

107        /* 设置FLASH延时周期数为2 */

108        FLASH_SetLatency(FLASH_Latency_2);

109        /* 使能FLASH预取缓存 */

110        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

111        /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */

112        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

113        /* 使能PLL */

114        RCC_PLLCmd(ENABLE);

115        /* 等待PLL输出稳定 */

116        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

117        /* 选择SYSCLK时钟源为PLL */

118        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

119        /* 等待PLL成为SYSCLK时钟源 */

120        while(RCC_GetSYSCLKSource() != 0x08);

121    }

122    /* 打开APB2总线上的GPIOA时钟*/

123    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);

124

125    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);

126     

127}
继承事业,薪火相传
返回列表