我采用得是STM32F10RC 参考得是STM32普中科技的给出得例子:https://www.bilibili.com/video/av30149282/?p=45(这里给出网址)
本次实验的目的,通过定时器的作用来进行LED灯的控制
1、定时器结构框图的介绍
2、通用定时器
a、16位的自动重载寄存器 (0-65535) 通过psc(预分频器)
b、好几个定时器的资源是完全独立的,故而可以并行使用
c、TIMx(TIM2-TIM5)通过寄存器
d、通用定时器的结构框图
e、一共有三个寄存器 16 位寄存器
psc预分频器 自动重载计数器(实际上起作用的是影子寄存器,自动重载寄存器会直接更新影子存器) 计数器
f、输入捕获
输入信号的脉宽的测量,同时也可以进行pwm的信号的测量
3、通用定时器的配置步骤
void time_init()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //ÉùÃ÷Ò»¸ö½á¹¹Ìå±äÁ¿£¬ÓÃÀ´³õʼ»¯¶¨Ê±Æ÷
NVIC_InitTypeDef NVIC_InitStructure;
/* ¿ªÆô¶¨Ê±Æ÷3ʱÖÓ */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//Çå³ýTIMxµÄÖжϴý´¦Àíλ:TIM ÖжÏÔ´
TIM_TimeBaseInitStructure.TIM_Period = 2000;//ÉèÖÃ×Ô¶¯ÖØ×°ÔؼĴæÆ÷ÖÜÆÚµÄÖµ
TIM_TimeBaseInitStructure.TIM_Prescaler = 35999;//ÉèÖÃÓÃÀ´×÷ΪTIMxʱÖÓƵÂÊÔ¤·ÖƵֵ£¬100Khz¼ÆÊýƵÂÊ
TIM_TimeBaseInitStructure.TIM_ClockDivision = 0; //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIMÏòÉϼÆÊýģʽ
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
TIM_Cmd(TIM3,ENABLE); //ʹÄÜ»òÕßʧÄÜTIMxÍâÉè
/* ÉèÖÃÖжϲÎÊý£¬²¢´ò¿ªÖÐ¶Ï */
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE ); //ʹÄÜ»òÕßʧÄÜÖ¸¶¨µÄTIMÖжÏ
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //·ÀÖ¹Ò»´ò¿ªÖжϾͳöÏÖÖжϱêÖ¾ÖÃλµÄÇé¿ö£¬ËùÒÔÌáÇ°Çå³þµôÖжϱê־λ
/* ÉèÖÃNVIC²ÎÊý */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //´ò¿ªTIM3_IRQnµÄÈ«¾ÖÖжÏ
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //ÇÀÕ¼ÓÅÏȼ¶Îª0
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //ÏìÓ¦ÓÅÏȼ¶Îª1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ʹÄÜ
NVIC_Init(&NVIC_InitStructure);
}