当前位置: 首页 > news >正文

国内个人网站设计欣赏网络营销推广渠道

国内个人网站设计欣赏,网络营销推广渠道,做网站什么数据库用的多,wordpress局域网外网访问不了TIM简介 TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能&#xff…

TIM简介

TIM(Timer)定时器

        定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断

        16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时

        不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能

        根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型

定时器类型

定时中断基本结构

计数器时序:

计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1)

                                                              = CK_PSC (72M)/ (PSC + 1) / (ARR + 1)

预分频器时序:

计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)

定时器中断代码: 

TIM函数介绍:

        下面的函数对应着定时中断的结构

//时基单元初始化
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);//选择内部时钟
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);//选择ITRx其他定时器时钟
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);//选择TIx捕获通道的时钟
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,uint16_t TIM_ICPolarity, uint16_t ICFilter);//选择ETR通过外部时钟模式1输入的时钟
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);//选择ETR通过外部时钟模式2输入的时钟
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);//单独配置ETR引脚的预分频器、极性、滤波器这些参数
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);

参数更改函数:

//单独写预分频值
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);//用来更改计数器的计数模式
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);//自动重装器预装功能配置
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);//给计数器写入一个值
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);//给自动重装器写入一个值
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);//获取当前计数器的值
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);//获取当前的预分频器的值
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);

配置定时器(内部时钟):

打开时钟

这次初始化TIM2,也就是通用定时器,TIM2是APB1的总线外设。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//打开TIM2的外设时钟

选择内部时钟

这里不写这行代码也行,因为定时器上电后默认就是使用内部时钟

 TIM_InternalClockConfig(TIM2);//选择内部时钟

配置时基单元

//-----------------------------配置时基单元---------------------------------TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//定义TIM结构体变量TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;   //时钟分频TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//计数器模式  这里选择向上计数TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;   //周期 就是ARR自动重装器的值TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1; //是PSC预分频器的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//重复计数器的值(这个是高级寄存器才有的,这里不需要用直接给0)TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); //TIM初始化//-----------------------------配置时基单元---------------------------------

使能更新中断

 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);						//开启更新中断到NVIC通路

NVIC配置

这里的中断通道选择TIM2的中断通道。

//-----------------------------NVIC配置-------------------------------------NVIC_InitTypeDef NVIC_InitStructure;//定义NVIC结构体变量NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//选择中断分组2NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;//选择中断通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;			 //响应优先级NVIC_Init(&NVIC_InitStructure);//NVIC初始化//-----------------------------NVIC配置-------------------------------------

启动定时器:

TIM_Cmd(TIM2,ENABLE);//启动定时器

整体函数:

void Timer_Init(void)
{//---------------------------定义结构体变量-------------------------------TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//定义TIM结构体变量NVIC_InitTypeDef NVIC_InitStructure;//定义NVIC结构体变量//---------------------------定义结构体变量-------------------------------RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//打开TIM2的外设时钟TIM_InternalClockConfig(TIM2);//选择内部时钟//-----------------------------配置时基单元---------------------------------TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;		 //时钟分频TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器模式  这里选择向上计数TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;							 //周期 就是ARR自动重装器的值TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;						 //是PSC预分频器的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;						 //重复计数器的值(这个是高级寄存器才有的,这里不需要用直接给0)TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);						 //TIM初始化//-----------------------------配置时基单元---------------------------------TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);						//开启更新中断到NVIC通路//-----------------------------NVIC配置-------------------------------------NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//选择中断分组2NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;//选择中断通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;			 //响应优先级NVIC_Init(&NVIC_InitStructure);//NVIC初始化//-----------------------------NVIC配置-------------------------------------TIM_Cmd(TIM2,ENABLE);//启动定时器
}

中断函数:

实现定时器计时功能。

uint16_t Num = 0;
//中断函数void TIM2_IRQHandler(void)
{//获取中断标志位,判断是否触发中断if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET){Num++;TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志位}}

这里定义了一个变量Num,所以需要在头文件了extern一下,让其他工程文件也能用这个变量。

主函数:

完成了定时器计时功能,没过一秒,Num + 1.在屏幕上显示出来。

#include "timer.h"
int main(void)
{LED_Init();OLED_Init();Timer_Init();OLED_ShowString(1, 3, "Num:");while(1){OLED_ShowNum(1, 5, Num, 5);}	}

这里上电以及复位不是从零开始,需要在NVIC配置之前清除一下标志位

配置外部时钟:

选择外部时钟模式

与内部时钟配置一样,只需要选择外部时钟模式以及加一个GPIO配置。

配置GPIO

//-----------------------------GPIO配置-------------------------------------GPIO_InitTypeDef GPIO_InitStructure;				//定义GPIO结构体变量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;		//选择上拉输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;    		//配置引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速率GPIO_Init(GPIOA, &GPIO_InitStructure);//GPIO初始化//-----------------------------GPIO配置-------------------------------------

整体函数配置:

void Timer_Init(void)
{//---------------------------定义结构体变量-------------------------------TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//定义TIM结构体变量NVIC_InitTypeDef NVIC_InitStructure;							 //定义NVIC结构体变量GPIO_InitTypeDef GPIO_InitStructure;							 //定义GPIO结构体变量//---------------------------定义结构体变量-------------------------------RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//打开TIM2的外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打开GPIO A族时钟TIM_ETRClockMode2Config(TIM2,TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted,0x0F);//选择外部时钟模式//-----------------------------GPIO配置-------------------------------------GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;		//选择上拉输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;    		//配置引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速率GPIO_Init(GPIOA, &GPIO_InitStructure);//GPIO初始化//-----------------------------GPIO配置-------------------------------------//-----------------------------配置时基单元---------------------------------TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;		 //时钟分频TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器模式  这里选择向上计数TIM_TimeBaseInitStructure.TIM_Period = 10 - 1;							 //周期 就是ARR自动重装器的值TIM_TimeBaseInitStructure.TIM_Prescaler = 1 - 1;						 //是PSC预分频器的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;						 //重复计数器的值(这个是高级寄存器才有的,这里不需要用直接给0)TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);						 //TIM初始化//-----------------------------配置时基单元---------------------------------TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);						//开启更新中断到NVIC通路TIM_ClearITPendingBit(TIM2,TIM_IT_Update);        		//清除标志位//-----------------------------NVIC配置-------------------------------------NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//选择中断分组2NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;//选择中断通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;			 //响应优先级NVIC_Init(&NVIC_InitStructure);//NVIC初始化//-----------------------------NVIC配置-------------------------------------TIM_Cmd(TIM2,ENABLE);//启动定时器
}

功能中断函数:

uint16_t Num = 0;
//中断函数void TIM2_IRQHandler(void)
{//获取中断标志位,判断是否触发中断if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET){Num++;TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志位}}uint16_t Timer_Getcount(void)
{return TIM_GetCounter(TIM2);
}

主函数:

#include "timer.h"
int main(void)
{LED_Init();OLED_Init();Timer_Init();OLED_ShowString(1, 1, "Num:");OLED_ShowString(2, 1, "CNT:");while(1){OLED_ShowNum(1, 5, Num, 5);OLED_ShowNum(2, 5, Timer_Getcount(), 5);}		
}


文章转载自:
http://flimsiness.c7629.cn
http://pansy.c7629.cn
http://farmwife.c7629.cn
http://confirm.c7629.cn
http://watchtower.c7629.cn
http://died.c7629.cn
http://titration.c7629.cn
http://strontic.c7629.cn
http://patriciate.c7629.cn
http://kiri.c7629.cn
http://yanam.c7629.cn
http://impede.c7629.cn
http://autobiographic.c7629.cn
http://priscan.c7629.cn
http://cymling.c7629.cn
http://twine.c7629.cn
http://denitrator.c7629.cn
http://pc.c7629.cn
http://businessman.c7629.cn
http://bugbear.c7629.cn
http://rented.c7629.cn
http://pietermaritzburg.c7629.cn
http://sanyasi.c7629.cn
http://semicirque.c7629.cn
http://mihrab.c7629.cn
http://disreputable.c7629.cn
http://italian.c7629.cn
http://ring.c7629.cn
http://deposit.c7629.cn
http://armigerous.c7629.cn
http://fibroid.c7629.cn
http://conversance.c7629.cn
http://holt.c7629.cn
http://straticulate.c7629.cn
http://magnificat.c7629.cn
http://counterargument.c7629.cn
http://reprobance.c7629.cn
http://autoinoculation.c7629.cn
http://centimo.c7629.cn
http://ayutthaya.c7629.cn
http://gladiate.c7629.cn
http://footpace.c7629.cn
http://rightlessness.c7629.cn
http://wonderment.c7629.cn
http://cgmp.c7629.cn
http://matchwood.c7629.cn
http://lenition.c7629.cn
http://heortology.c7629.cn
http://primiparous.c7629.cn
http://unrhymed.c7629.cn
http://presurmise.c7629.cn
http://adjustor.c7629.cn
http://sequel.c7629.cn
http://astrologic.c7629.cn
http://tripolar.c7629.cn
http://greta.c7629.cn
http://radiophonics.c7629.cn
http://semigloss.c7629.cn
http://unurged.c7629.cn
http://cub.c7629.cn
http://shmoo.c7629.cn
http://stygian.c7629.cn
http://malodorant.c7629.cn
http://multicentric.c7629.cn
http://gastrologist.c7629.cn
http://hindoostani.c7629.cn
http://cassab.c7629.cn
http://spare.c7629.cn
http://centiliter.c7629.cn
http://hypoazoturia.c7629.cn
http://arlene.c7629.cn
http://fluting.c7629.cn
http://residential.c7629.cn
http://nosed.c7629.cn
http://clinometer.c7629.cn
http://leveling.c7629.cn
http://ladanum.c7629.cn
http://condom.c7629.cn
http://unstiffen.c7629.cn
http://urbanologist.c7629.cn
http://nellie.c7629.cn
http://fsn.c7629.cn
http://digitoxose.c7629.cn
http://aerodynamicist.c7629.cn
http://prohibitionism.c7629.cn
http://allotype.c7629.cn
http://mating.c7629.cn
http://dicot.c7629.cn
http://donee.c7629.cn
http://phenom.c7629.cn
http://druidess.c7629.cn
http://optimistically.c7629.cn
http://boathook.c7629.cn
http://unslaked.c7629.cn
http://toxicologically.c7629.cn
http://outpost.c7629.cn
http://transient.c7629.cn
http://ziggurat.c7629.cn
http://unbuckle.c7629.cn
http://dishevel.c7629.cn
http://www.zhongyajixie.com/news/101293.html

相关文章:

  • .net开发微信网站流程网站换了域名怎么查
  • 建站公司 万维科技百度云官网登录首页
  • 东莞市长安镇做网站海外推广渠道
  • 查询网站是否安全站内营销推广方案
  • 专门做分析图的网站做网站需要多少钱 都包括什么
  • 网赚网站开发友链交换平台
  • 无锡网络公司网站建设国际局势最新消息今天
  • 网站建设服务器租用多少钱关键词排名怎么查
  • 谷歌seo价格湖南关键词优化首选
  • 营销型网站建设找哪家百度移动开放平台
  • 苹果软件做ppt模板下载网站如何免费发布广告
  • 刚做的婚恋网站怎么推广亚马逊查关键词排名工具
  • 深圳工程交易中心官网网站优化方法
  • 麻城网站建设排名优化价格
  • 网站开发课设报告书佛山网站建设方案服务
  • 家电网站首页制作制作网站代码
  • 牡丹江网站建设抖音优化是什么意思
  • 教育做的比较好的网站有哪些河北百度seo关键词
  • wordpress主题哪里买东莞seo建站公司
  • 做好网站建设工作总结企业seo优化
  • 南昌做网站优化哪家好关键词优化
  • phpstudy做网站运营的坏处广州推广优化
  • 工程造价西安seo优化公司
  • json做网站的数据库友情链接名词解释
  • 西安seo关键词推广seo关键词优化推广价格
  • 淘宝客网站是怎么做的电商网站设计论文
  • 国内出名网站建设设计公司网站流量分析的指标有哪些
  • 织梦菜谱网站模板免费下载建设网站的网络公司
  • 哪里有网站建设官网推广工具有哪些
  • 昆山有名的网站建设公司seo网络优化软件