如何制作一个报名微信小程序,霞浦县网站seo优化排名,备案期间网站可以做竞价吗,成都做微信小程序的公司目录
背景
程序
第一步、使能PCLK1外设时钟编辑
第二步、时基单元配置
第三步、配置NVIC#xff08;设置定时中断优先级#xff09;编辑
第四步、使能溢出中断
第五步、使能定时器
第六步、填写中断处理函数#xff08;ISR#xff09; 背景
在单片机开发当中设置定时中断优先级编辑
第四步、使能溢出中断
第五步、使能定时器
第六步、填写中断处理函数ISR 背景
在单片机开发当中我们可以经常看到定周期函数。这些定周期函数都是通过定时器最基本定时中断功能。如果学习前面的PWM。会更快的了解相关概念。 时基单元 可编程通用定时器的主要部分是一个 16 位计数器和与其相关的自动装载寄存器。这个计数器可 以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。 计数器、自动装载寄存器和预分频器寄存器可以由软件读写在计数器运行时仍可以读写。 时基单元包含 ● 计数器寄存器 (TIMx_CNT) ● 预分频器寄存器 (TIMx_PSC) ● 自动装载寄存器 (TIMx_ARR) 自动装载寄存器是预先装载的写或读自动重装载寄存器将访问预装载寄存器。根据在 TIMx_CR1 寄存器中的自动装载预装载使能位 (ARPE) 的设置预装载寄存器的内容被立即或在 每次的更新事件 UEV 时传送到影子寄存器。当计数器达到溢出条件 ( 向下计数时的下溢条件 ) 并当 TIMx_CR1 寄存器中的 UDIS 位等于 ’0’ 时产生更新事件。更新事件也可以由软件产生。随后会 详细描述每一种配置下更新事件的产生。 程序 //定时器时间计算公式Tout ((重装载值1)*(预分频系数1))/时钟频率;
//例如1秒定时重装载值9999预分频系数7199void TIM3_Init(u16 arr,u16 psc){ //TIM3 初始化 arr重装载值 psc预分频系数TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能TIM3TIM_TimeBaseInitStrue.TIM_Periodarr; //设置自动重装载值TIM_TimeBaseInitStrue.TIM_Prescalerpsc; //预分频系数TIM_TimeBaseInitStrue.TIM_CounterModeTIM_CounterMode_Up; //计数器向上溢出TIM_TimeBaseInitStrue.TIM_ClockDivisionTIM_CKD_DIV1; //时钟的分频因子起到了一点点的延时作用一般设为TIM_CKD_DIV1TIM_TimeBaseInit(TIM3,TIM_TimeBaseInitStrue); //TIM3初始化设置TIM3_NVIC_Init (); //开启TIM3中断向量TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);//使能TIM3中断 TIM_Cmd(TIM3,ENABLE); //使能TIM3
}void TIM3_NVIC_Init (void){ //开启TIM3中断向量NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 0x3; //设置抢占和子优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority 0x3;NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE;NVIC_Init(NVIC_InitStructure);
} 第一步、使能PCLK1外设时钟
第二步、时基单元配置 输入到计数器的时钟为 72 000 000 /(7199 1) 1 000HZ
计数器溢出时长生Update中断频率 10000HZ /(99991) 1HZ
为何1有在PWM中介绍。 第三步、配置NVIC设置定时中断优先级 第四步、使能溢出中断
计数器溢出的中断就是update中断 第五步、使能定时器 第六步、填写中断处理函数ISR
void TIM3_IRQHandler(void){ //TIM3中断处理函数if (TIM_GetITStatus(TIM3, TIM_IT_Update) ! RESET){ //判断是否是TIM3中断TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//此处写入用户自己的处理程序GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //取反LED1}
}