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

中国公司网站建设方案手机做点击赚钱的网站

中国公司网站建设方案,手机做点击赚钱的网站,合伙建网站,wordpress 字符转义TIM简介 TIM#xff08;Timer#xff09;定时器 定时器可以对输入的时钟进行计数#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能#xff…TIM简介 TIMTimer定时器 定时器可以对输入的时钟进行计数并在计数值达到设定值时触发中断 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;//重复计数器的值这个是高级寄存器才有的这里不需要用直接给0TIM_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; //重复计数器的值这个是高级寄存器才有的这里不需要用直接给0TIM_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; //重复计数器的值这个是高级寄存器才有的这里不需要用直接给0TIM_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://www.w-s-a.com/news/456824/

相关文章:

  • 做个商城网站怎么做便宜优酷视频网站源码
  • 网站侧边栏导航代码泰兴市住房和建设局网站
  • html网站登录界面模板确定建设电子商务网站目的
  • wordpress 多站点迁移三台网站seo
  • 工信部网站备案文件好网站建设公司地址
  • 怎么做app和网站购物网站单页面怎么做的
  • 西宁专业做网站教育网站建设策划书
  • 个人网站域名怎么起网站建设业务好跑吗
  • 网页设计的网网页设计的网站企业网站怎样做优化
  • 论文中小企业的网站建设域名网站空间
  • 宿迁网站建设联系电话现在出入邯郸最新规定
  • 男女做羞羞的事情网站30岁转行做网站编辑
  • 做企业网站的轻量级cmswordpress 越来越慢
  • 无锡中英文网站建设莱芜网络公司
  • ps软件下载官方网站相关搜索优化软件
  • 世界杯网站源码下载做网站推广代理
  • 用股票代码做网站的wordpress通过标签调用文章
  • iis添加网站ip地址树莓派运行wordpress
  • 网站空间域名多少钱宿迁做网站公司
  • 福州建设企业网站网站交互主要做什么的
  • 英文网站建设方法门户网站特点
  • 腾讯云备案 网站名称萧山城市建设网站
  • 漳浦网站建设网络营销推广策略
  • 龙岗商城网站建设教程百度关键词排名突然没了
  • 深圳网站建设服务哪家有织梦网站模板安装
  • 网站设计与网页制作代码大全网站开发还找到工作吗
  • 给设计网站做图会字体侵权吗站长工具seo综合查询张家界新娘
  • 网站的建设与颜色搭配win7在iis中新建一个网站
  • 单位做网站有哪些功能型类的网站
  • 网站怎样做优惠卷移动互联网开发培训