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

做微信网站公司名称上海seo招聘

做微信网站公司名称,上海seo招聘,花生壳可以用来做网站吗,郑州富士康现状1.定时器概念和作用 在编程任务中,定时器是非常常用的一个问题。当需要定时发送数据,定时起某个任务,定时做某个操作等等,这些都离不开定时器。本文基于以STM32F4xx系列开发板,介绍一下基本定时器。 2.基本定时器TIM…

1.定时器概念和作用

在编程任务中,定时器是非常常用的一个问题。当需要定时发送数据,定时起某个任务,定时做某个操作等等,这些都离不开定时器。本文基于以STM32F4xx系列开发板,介绍一下基本定时器。

2.基本定时器TIM6和TIM7介绍

如下图所示,基本定时器有两个,分别是TIM6和TIM7。它们的计数器都是16位的,也就是意味着取值范围对无符号数来说是0到65535。基本定时器工作时,主要涉及三个寄存器,分别是计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR)。
在这里插入图片描述
顾名思义,计数器寄存器(TIMx_CNT)是用来计数的,它的值是从0开始递增。而当计数寄存器的值等于自动重载寄存器(TIMx_ARR)中的值时,就会生 成事件,将相关事件标志位置位,生成中断输出。

预分频器寄存器(TIMx_PSC)是用来分频的,它有一个输入时钟CK_PSC和一个输出时钟CK_CNT。
CK_CNT=fCK_PSC/(PSC[15:0]+1)

定时周期就是由预分频器寄存器(TIMx_PSC)和自动重载寄存器(TIMx_ARR)来决定。

假如自动重载寄存器(TIMx_ARR)的值为4999,即计数器寄存器(TIMx_CNT)从0开始计数,到4999时(总共计数50000次)就会产生中断。假如此时定时器的定时频率为10000Hz,那么一个定时周期就是50000*(1/10000)= 5S。即5S就会产生一次定时中断,我们就可以在中断处理程序中,添加我们的业务逻辑代码。

3.代码

/*** @brief  初始化基本定时器* @param  无* @retval 无*/
void TIMx_Configuration(TIM_TypeDef * tim)
{TIMx_NVIC_Configuration(tim);	TIM_Mode_Config(tim);
}/*** @brief  基本定时器 TIMx,x[6,7]中断优先级配置* @param  TIM_TypeDef * tim:TIM6 or TIM7* @retval 无*/
static void TIMx_NVIC_Configuration(TIM_TypeDef * tim)
{if (tim == TIM6){NVIC_InitTypeDef NVIC_InitStructure; // 设置中断组为0NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);		// 设置中断来源NVIC_InitStructure.NVIC_IRQChannel = BASIC_TIM_IRQn; 	// 设置抢占优先级NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;	 // 设置子优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}if (tim == TIM7){NVIC_InitTypeDef NVIC_InitStructure; // 设置中断组为0NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);		// 设置中断来源NVIC_InitStructure.NVIC_IRQChannel = BASIC_TIM7_IRQn; 	// 设置抢占优先级NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;	 // 设置子优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}
}/** 注意TIM_TimeBaseInitTypeDef结构体中有5个成员,TIM6和TIM7的寄存器里面只有* TIM_Prescaler和TIM_Period,所以使用TIM6和TIM7的时候只需初始化这两个成员即可* 另外三个成员是通用定时器和高级定时器才有.*-----------------------------------------------------------------------------* TIM_Prescaler         都有* TIM_CounterMode			 TIMx,x[6,7]没有,其他都有(基本定时器)* TIM_Period            都有* TIM_ClockDivision     TIMx,x[6,7]没有,其他都有(基本定时器)* TIM_RepetitionCounter TIMx,x[1,8]才有(高级定时器)*-----------------------------------------------------------------------------*/
static void TIM_Mode_Config(TIM_TypeDef * tim)
{if (tim == TIM6){TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;// 开启TIMx_CLK,x[6,7] RCC_APB1PeriphClockCmd(BASIC_TIM_CLK, ENABLE); /* 累计 TIM_Period个后产生一个更新或中断*/		//当定时器从0计数到4999,即为5000次,为一个定时周期TIM_TimeBaseStructure.TIM_Period = 60 - 1;       // 每0.34ms启动一个定时器中断//定时时钟源 TIMxCLK = 2 * PCLK1  //				PCLK1 = HCLK / 4 //				=> TIMxCLK=HCLK/2=SystemCoreClock/2=84MHz// 设定 定时器频率为 =TIMxCLK/(TIM_Prescaler+1)=10000HzTIM_TimeBaseStructure.TIM_Prescaler = 1000 - 1;	// 初始化定时器 TIMx, x[2,3,4,5]TIM_TimeBaseInit(BASIC_TIM, &TIM_TimeBaseStructure);// 清除定时器更新中断标志TIM_ClearFlag(BASIC_TIM, TIM_FLAG_Update);// 开启定时器更新中断TIM_ITConfig(BASIC_TIM,TIM_IT_Update,ENABLE);// 使能定时器//	TIM_Cmd(BASIC_TIM, ENABLE);		}if (tim == TIM7){TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;// 开启TIMx_CLK,x[6,7] RCC_APB1PeriphClockCmd(BASIC_TIM7_CLK, ENABLE); /* 累计 TIM_Period个后产生一个更新或中断*/		//当定时器从0计数到167,即为168次,为一个定时周期TIM_TimeBaseStructure.TIM_Period = 50000 - 1;       // 5s//定时时钟源 TIMxCLK = 2 * PCLK1  //				PCLK1 = HCLK / 4 //				=> TIMxCLK=HCLK/2=SystemCoreClock/2=84MHz// 设定 定时器频率为 =TIMxCLK/(TIM_Prescaler+1)=10000HzTIM_TimeBaseStructure.TIM_Prescaler = 8400 - 1;	//定时器频率10 Khz// 初始化定时器 TIMx, x[2,3,4,5]TIM_TimeBaseInit(BASIC_TIM7, &TIM_TimeBaseStructure);// 清除定时器更新中断标志TIM_ClearFlag(BASIC_TIM7, TIM_FLAG_Update);// 开启定时器更新中断TIM_ITConfig(BASIC_TIM7,TIM_IT_Update,ENABLE);// 使能定时器//	TIM_Cmd(BASIC_TIM, ENABLE);		}	
}

当产生中断时,中断号和中断处理函数为:
在这里插入图片描述
中断号:
在这里插入图片描述
在这里插入图片描述

实现业务逻辑为,当RS232串口接收到第一个字节数据时,把TIM7给使能(使能后,开始计数)。当一个定时周期(本程序设置的是5s),认为RS232串口已经收好一串数据了,此时在定时中断处理承租中,把一个全局变量标志置上,置成1,认为数据接收完成,可以进入数据处理了,在main函数中,添加对数据的处理的业务逻辑代码。

在这里插入图片描述

//串口中断处理函数---接收
#define UART_BUFF_SIZE      1024
volatile    uint16_t uart_len = 0;
uint8_t     g_uart_buff[UART_BUFF_SIZE] = {0};extern uint8_t g_recvData;void USART6_IRQHandler(void) //当串口上有字节传送过来的时候,便会产生中断,即每个字节过来会产生一次串口接收中断
{uint8_t clear;if(uart_len<UART_BUFF_SIZE){while(USART_GetITStatus(USART6, USART_IT_RXNE) != RESET) // USART6串口的接收数据寄存器非空,表明有新的数据待读取{g_uart_buff[uart_len] = USART_ReceiveData(USART6);uart_len++;TIM_Cmd(BASIC_TIM7, ENABLE);	//当转接板接收到长强板第一个数时,就把Tim7的使能给置上,Tim7开始计数USART_ClearITPendingBit(USART6, USART_IT_RXNE);}}else{ // 接收的数据长度超过UART_BUFF_SIZE 时,这次数据全部丢弃USART_ClearITPendingBit(USART6, USART_IT_RXNE);clean_usart_rebuff();       }if (USART_GetITStatus(USART6, USART_IT_IDLE) != RESET) // 用来判断是否收到一帧数据 https://blog.csdn.net/ASKLW/article/details/79246786{	//数据通过RS232接收到后,进入逻辑处理,调用motor.c相关函数// 定义一个全局变量,当数据接收完成后,把全局变量置为true,后续进行处理clear = USART6->SR; //先读SR,再读DR才能完成idle中断的清零,否则一直进入中断。clear = USART6->DR;uint16_t len = 0;
//			char str[1024] ={0};
//		  sprintf(str, "%d", ii);  
//			Usart_SendByte(USART6, len);
//		ii++;
//Usart_SendString(USART6, get_usart_rebuff(&len));	
//Usart_SendString(USART6, "AABBCCDDEEFFGG");	//      uint16_t len1 = 0;
//			const char* cmdline = get_usart_rebuff(&len1); // 测试用例:"0x81VT=100"
//					printf("cmdlineusart = %s\n", cmdline);	
//Usart_SendString(USART6, "0x82VT=100");		g_recvData = 0x01;}
}	

中断处理程序:

extern uint8_t g_timer7;
void  BASIC_TIM7_IRQHandler (void)
{if ( TIM_GetITStatus( BASIC_TIM7, TIM_IT_Update) != RESET ) {	
//		printf("timer");g_timer7 = 1; //在定时器中断。把标志位置上TIM_ClearITPendingBit(BASIC_TIM7 , TIM_IT_Update);  		 }		 	
}

数据处理:

		if (g_timer7 == 0x01) //表明接收数据已经完成,需要进入对数据的处理  g_recvData == 0x01{g_timer7 = 0;			uint16_t len = 0;const char* cmdline = get_usart_rebuff(&len); // 测试用例:"0x81VT=100"printf("cmdline=%s\n", cmdline);
//			Usart_SendString(USART6, get_usart_rebuff(&len));		}		

交流碰撞思想火花!欢迎大家留言评论!


文章转载自:
http://wanjiasonance.bpcf.cn
http://wanjiathromboplastin.bpcf.cn
http://wanjiazoogeology.bpcf.cn
http://wanjiavenery.bpcf.cn
http://wanjiasycomore.bpcf.cn
http://wanjiatropicana.bpcf.cn
http://wanjiaimpuissance.bpcf.cn
http://wanjiacofeature.bpcf.cn
http://wanjiaplasmalogen.bpcf.cn
http://wanjiabeakiron.bpcf.cn
http://wanjiatoken.bpcf.cn
http://wanjiasewing.bpcf.cn
http://wanjiaepicondyle.bpcf.cn
http://wanjiaane.bpcf.cn
http://wanjiaskerry.bpcf.cn
http://wanjiaprestidigitation.bpcf.cn
http://wanjiaplanter.bpcf.cn
http://wanjiabow.bpcf.cn
http://wanjiasemainier.bpcf.cn
http://wanjiapulsive.bpcf.cn
http://wanjiaaminopterin.bpcf.cn
http://wanjialedgy.bpcf.cn
http://wanjiageoid.bpcf.cn
http://wanjiashat.bpcf.cn
http://wanjiameiofauna.bpcf.cn
http://wanjiadistortedness.bpcf.cn
http://wanjiaspicy.bpcf.cn
http://wanjiaidolatress.bpcf.cn
http://wanjiaholocoder.bpcf.cn
http://wanjiapegmatite.bpcf.cn
http://wanjiadistobuccal.bpcf.cn
http://wanjiavegetation.bpcf.cn
http://wanjiaspymaster.bpcf.cn
http://wanjiapeony.bpcf.cn
http://wanjialuteotropin.bpcf.cn
http://wanjiamuscleman.bpcf.cn
http://wanjiaspelt.bpcf.cn
http://wanjiascaddle.bpcf.cn
http://wanjiaatypic.bpcf.cn
http://wanjianutted.bpcf.cn
http://wanjiarhomb.bpcf.cn
http://wanjiazooman.bpcf.cn
http://wanjiaclimactic.bpcf.cn
http://wanjiaflakeboard.bpcf.cn
http://wanjiacou.bpcf.cn
http://wanjiaadditivity.bpcf.cn
http://wanjiavirtuous.bpcf.cn
http://wanjiaferriferous.bpcf.cn
http://wanjialayerage.bpcf.cn
http://wanjiatoggle.bpcf.cn
http://wanjiapurlin.bpcf.cn
http://wanjiadiscourtesy.bpcf.cn
http://wanjiamedulloblastoma.bpcf.cn
http://wanjiarhapsody.bpcf.cn
http://wanjiacrunode.bpcf.cn
http://wanjiacooler.bpcf.cn
http://wanjiaextirpate.bpcf.cn
http://wanjiaprecensor.bpcf.cn
http://wanjiahoncho.bpcf.cn
http://wanjiaellipsoidal.bpcf.cn
http://wanjiahumification.bpcf.cn
http://wanjiaoculated.bpcf.cn
http://wanjiarejection.bpcf.cn
http://wanjiabinding.bpcf.cn
http://wanjiacondisciple.bpcf.cn
http://wanjiaungenerosity.bpcf.cn
http://wanjiaclamlike.bpcf.cn
http://wanjiadandified.bpcf.cn
http://wanjiaadjectivally.bpcf.cn
http://wanjiacease.bpcf.cn
http://wanjiagcm.bpcf.cn
http://wanjiakatangese.bpcf.cn
http://wanjiaphosphoenolpyruvate.bpcf.cn
http://wanjiamidway.bpcf.cn
http://wanjiamotile.bpcf.cn
http://wanjiacrocean.bpcf.cn
http://wanjiascalpriform.bpcf.cn
http://wanjiacoreopsis.bpcf.cn
http://wanjiagranuloma.bpcf.cn
http://wanjiaase.bpcf.cn
http://www.15wanjia.com/news/122106.html

相关文章:

  • 甘肃建设厅网站首页百度搜索排名购买
  • 如何网站做百度推广bt磁力在线种子搜索神器
  • 电子商务网站开发技术小广告多的网站
  • 国际英文网站企业管理培训课程网课
  • 做招聘网站价格2345网止导航
  • wordpress可以用火车头采集深圳关键词优化公司哪家好
  • net淘宝网站开发的例子百度竞价托管哪家好
  • 高安网站建设建站为应用技术
  • 空包网站怎么做知了seo
  • 专业餐饮vi设计公司优化网站排名费用
  • 自个网站排名优化工具下载
  • 专门做鞋子的网站有哪些南通企业网站制作
  • 淘宝客怎么自己做网站今天最火的新闻头条
  • 网站开发 安全 承诺书北京seo优化
  • 外贸新手入门必读太原百度seo排名软件
  • 海南网站建设公司哪家靠谱网络营销有哪些主要功能
  • 网站开发文档编写如何引流推广
  • 石家庄上门足疗seo技术分享博客
  • 网站建设之后需要维护吗最新军事动态
  • 做网站小代码大全今天国际新闻最新消息
  • 开发企业网站的公司友情链接的定义
  • 上海关键词排名搜索seo网站排名推广
  • 做网站地图的步骤下载一个百度导航
  • 本地服务器如何做网站域名注册需要哪些条件
  • 做个有用网站深圳营销型网站
  • ps做游戏下载网站佛山企业用seo策略
  • 网站建设 海外房产全球疫情最新数据
  • 自己做网站好不好排名sem优化软件
  • 教做饮品的网站优化网站哪个好
  • 卡密网站怎么做的搜索引擎优化seo应用