您的位置 首页 测评

STM32学习记载7:定时器中止

配置流程:1:系统时钟初始化,包括系统时钟和要开放的IO口或者功能的时钟配置。2:IO口初始化,包括引脚,速率,输入输出模式等。3:NVIC…

装备流程:

1:体系时钟初始化,包含体系时钟和要敞开的IO口或许功用的时钟装备。
2:IO口初始化,包含引脚,速率,输入输出形式等。
3:NVIC 中止向量装备 ,中止向量基地址和优先级的装备。
4:TIM3初始化:包含主动重装值,分频值,计数模式,使能TIM中止,使能TIM3外设
5:中止处理函数:留意铲除TIMx的中止待处理位
留意:
1:RCC初始化要使能或许失能 APB1 外设时钟。
2:中止处理函数:留意铲除TIMx的中止待处理位TIMx_SR寄存器
3:关于时钟:初始化RCC时运用SystemInit()函数时默许的是AHB不分频,即HCLK等于SYSHCLK,APB2不分频,APB1为HCLK 2分频而守时器3时钟使能在RCC_APB1ENR寄存器中界说,因而TIM3时钟为36M

在宏界说中设置为72MHz时:在system_stm32f10x.c中有以下界说:
static void SetSysClockTo72(void)
{
__IO uint32_t StartUpCounter = 0, HSEStatus = 0;

/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration —————————*/
/* Enable HSE */
RCC->CR |= ((uint32_t)RCC_CR_HSEON);

/* Wait till HSE is ready and if Time out is reached exit */
do
{
HSEStatus = RCC->CR & RCC_CR_HSERDY;
StartUpCounter++;
} while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));

if ((RCC->CR & RCC_CR_HSERDY) != RESET)
{
HSEStatus = (uint32_t)0x01;
}
else
{
HSEStatus = (uint32_t)0x00;
}

if (HSEStatus == (uint32_t)0x01)
{
/* Enable Prefetch Buffer */
FLASH->ACR |= FLASH_ACR_PRFTBE;

/* Flash 2 wait state */
FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;

/* HCLK = SYSCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;///*!< SYSCLK not divided */HCLK = SYSCLK /* PCLK2 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;// /*!< HCLK not divided */APB2为HCLK不分频 /* PCLK1 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;///*!< HCLK divided by 2 */APB1为HCLK 2分频
原程序为:
#include”stm32f10x.h”
#include”stm32f10x_tim.h”

#define LED0_OFF GPIO_SetBits(GPIOA,GPIO_Pin_8)// LED0关
#define LED0_ON GPIO_ResetBits(GPIOA,GPIO_Pin_8)//LED0开

u16 i=0;

//初始化IO端口
void IO_Configuart(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//界说 GPIO_InitStructure为 GPIO_InitTypeDef结构体类型
//LED0
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//引脚挑选
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化

}

//复位和体系时钟操控
void RCC_Configuare(void)
{
SystemInit();//频率设定有system_stm32f10x.c文件中的宏界说 敞开某个宏 当调用SystemInit()时即可设置好频率
RCC_ClockSecuritySystemCmd(ENABLE);//使能或许失能时钟安全体系

//使能GPIOA,GPIOD端口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//使能或许失能 APB1 外设时钟
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//答应总线CLOCK,在运用GPIO之前有必要答应相应的端口时钟
/* 也能够写为RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE); 愈加简练*/
}

//NVIC设置 体系中止办理
void NVIC_Configuare(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);//设定中止向量表基址0x08000000
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);// 先占优先级0位 从优先级4位

//使能TIM3中止
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;//TIM3中止
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x0F; //先占优先级0位,从优先级4位
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x0F; //
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
//初始化TIM3 1ms 守时
void TIM3_Configuare(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
//TOUT=ARR*(PSC+1)/Tclk ARR=10 PSC=3599 Tclk=36M TOUT=0.001s=1ms
TIM_TimeBaseStructure.TIM_Period = 10; //设置鄙人一个更新事情装入活动的主动重装载寄存器周期的值 计数到10为1ms
TIM_TimeBaseStructure.TIM_Prescaler =(7200-1); //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟切割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数形式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //依据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时刻基数单位

TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_Trigger,ENABLE); //使能或许失能指定的 TIM 中止
TIM_Cmd(TIM3, ENABLE); //使能TIMx外设

}

int main (void)
{

RCC_Configuare();
IO_Configuart();
NVIC_Configuare();
TIM3_Configuare();
LED0_OFF;
while(1)
{

}

}

//TIM3中止处理函数
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET) //查看指定的 TIM 中止产生与否
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //铲除TIMx的中止待处理位:TIM 中止源
i++;
if(i==1000)
{
LED0_ON;

}
if(i==2000)
{
LED0_OFF;

i=0;
}
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/272510.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部