在什么网站做推广做网站人员工资
在什么网站做推广,做网站人员工资,做绒毛鉴定网站,如何韩国视频网站模板下载 迅雷下载地址理论知识 定时器定时中断
接线图 定时器工作配置步骤 定时中断和内外时钟源选择 定时器中需要使用的函数 程序实现效果#xff1a; void TIM_DeInit(TIM_TypeDef* TIMx); **// 恢复定时器的缺省配置**void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef*TIM… 理论知识 定时器定时中断
接线图 定时器工作配置步骤 定时中断和内外时钟源选择 定时器中需要使用的函数 程序实现效果 void TIM_DeInit(TIM_TypeDef* TIMx); **// 恢复定时器的缺省配置**void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct); // 时基单元初始化配置时基单元------第一个参数表示的是选择某个定时器第二个结构体包含配置时基单元的一些参数**void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);**// 给结构体变量赋一个默认的值**void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState); **// 使能计数器第一个参数表示选择计数器第二个参数表示新的状态也就是使能还是失能**void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState); **// 使能中断输出信号中断输出控制参数第一个为选择定时器第二个选择要配置哪一个中断输出第三个新的状态表示使能还是失能**以下的6个函数分别对应时基单元的时钟选择部分可以选择RCC内部时钟ETR外部时钟TRX其它定时器TIX捕获通道void TIM_InternalClockConfig(TIM_TypeDef* TIMx); **// 选择内部时钟**
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); **// 选择其它定时器的时钟第一个参数表示要配置的定时器第二个参数为选择要接入那个其它的定时器**
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,uint16_t TIM_ICPolarity, uint16_t ICFilter);**// 选择TIX捕获通道的时钟选择需要配置的定时器第二个参数选择TIX具体需要配置的引脚最后的两个参数表示的是输入的级性和滤波器**
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);**//选择ETR通过外部模式1输入的函数第一个参数表示外部触发预蜂鸣器级性和滤**波器void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);// 选择ETR通过外部时钟模式2输入的时钟第一个参数和上面的一个函数是一样的
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);// 这个函数是用于单独配置ETR引脚的预分频器极性滤波器这些参数void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);//void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);uint16_t TIM_GetCounter(TIM_TypeDef* TIMx); // 获取当前计数器的值
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx); //获取当前预分频器的值// 以下的4个函数是用来获取标志位和清除标志位的函数FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);
定时器配置 #include stm32f10x.h // Device header/*定时器中断的初始化代码
*/
void Timer_Init(void)
{// 开启时钟这里TIM2是通用寄存器RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);// 选择时基单元的时钟,选择内部时钟的模式,定时器默认使用的是内部单元的时钟TIM_InternalClockConfig(TIM2);// 配置时基单元初始化结构体TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;// 将结构体成员都引用出来放置在这个位置TIM_TimeBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1; // 配置参数是否分屏TIM_TimeBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up; // 选择计数的模式选择向上计数TIM_TimeBaseInitStructure.TIM_Period 10000 -1; // 表示ARR自动重装器的值这两个参数的取值都要在0-65535之间TIM_TimeBaseInitStructure.TIM_Prescaler 7200-1; // PSC预分频器的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter 0; // 重复计数器的值// 初始化结构体并将结构体的地址放置在init函数中TIM_TimeBaseInit(TIM2, TIM_TimeBaseInitStructure);// TIM_ClearFlag(TIM2,TIM_FLAG_Update);手动清除更新中断标志位避免刚初始化玩就进中断标志位的问题TIM_ClearFlag(TIM2,TIM_FLAG_Update);// 选择中断模式为更新中断配置使能开启更新中断到nvic的通路TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);// 配置nvic,配置nvic优先级分组选择分组2的方式NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//初始化nvic的结构体 NVIC_InitTypeDef NVIC_InitStruct;// 配置nvic结构体模式NVIC_InitStruct.NVIC_IRQChannel TIM2_IRQn; // 表示中断通道表示定时器2在nvic中的通道NVIC_InitStruct.NVIC_IRQChannelCmd ENABLE; // 编写为使能ENABLENVIC_InitStruct.NVIC_IRQChannelPreemptionPriority 2; // 抢占式优先级NVIC_InitStruct.NVIC_IRQChannelSubPriority 1 ; // 响应式优先级NVIC_Init(NVIC_InitStruct);// 启动定时器TIM_Cmd(TIM2, ENABLE);}
/*// 编写定时器2的初始化函数
void TIM2_IRQHandler(void){// 当定时器产生更新中断时这个函数会被执行TIM_GetITStatusif(TIM_GetITStatus(TIM2,TIM_IT_Update) SET){ // 判断中断标志位如果中断的标志位等于SET就执行用户代码// 清除中断标志位TIM_ClearITPendingBit(TIM2,TIM_IT_Update);}}
*/
定时器头文件 主函数文件 #include stm32f10x.h // Device header
#include Delay.h
#include OLED.h
#include Timer.huint16_t Num;int main(void)
{// 初始化oledOLED_Init();// 初始化定时器Timer_Init();// 使用OLED显示字符串OLED_ShowString(1,1,Num:);while (1){OLED_ShowNum(1, 5, Num, 5);OLED_ShowNum(2, 5, TIM_GetCounter(TIM2), 5);}
}
void TIM2_IRQHandler(void)
{if (TIM_GetITStatus(TIM2, TIM_IT_Update) SET){Num;TIM_ClearITPendingBit(TIM2, TIM_IT_Update);}
}接线图2 第二个程序效果展示
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/86510.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!