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

那个网站可以做微课辽宁响应式网站建设

那个网站可以做微课,辽宁响应式网站建设,惠州仲恺住房和城乡建设局网站,建立网站批复1、问题陈述 今天在测试小车程序的时候使用了如下代码,发现延时并没有达到期望的4s,而是仅仅延时了0.4s左右,本来以为少加了个0,最后在我多次测试下来,发现在延时大约超过2s的时候就会失效。 while(1){Set_Pwm(6000,60…

1、问题陈述

        今天在测试小车程序的时候使用了如下代码,发现延时并没有达到期望的4s,而是仅仅延时了0.4s左右,本来以为少加了个0,最后在我多次测试下来,发现在延时大约超过2s的时候就会失效。

    while(1){Set_Pwm(6000,6000);printf("%d\t",Read_Encoder(2));printf("%d",Read_Encoder(3));printf("\r\n");delay_ms(4000);Set_Pwm(-5000,-5000);printf("%d\t",Read_Encoder(2));printf("%d",Read_Encoder(3));printf("\r\n");delay_ms(4000);} 

2、问题解决

        再我重新翻阅了一下不完全手册后,终于发现了问题出在了SysTick-> VAL这个寄存器上:

        我们先看初始化函数::

void delay_init()
{
#if SYSTEM_SUPPORT_OS  							//如果需要支持OS.u32 reload;
#endifSysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);	//选择外部时钟  HCLK/8fac_us=SystemCoreClock/8000000;				//为系统时钟的1/8  
#if SYSTEM_SUPPORT_OS  							//如果需要支持OS.reload=SystemCoreClock/8000000;				//每秒钟的计数次数 单位为M  reload*=1000000/delay_ostickspersec;		//根据delay_ostickspersec设定溢出时间//reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右	fac_ms=1000/delay_ostickspersec;			//代表OS可以延时的最少单位	   SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;   	//开启SYSTICK中断SysTick->LOAD=reload; 						//每1/delay_ostickspersec秒中断一次	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;   	//开启SYSTICK    #elsefac_ms=(u16)fac_us*1000;					//非OS下,代表每个ms需要的systick时钟数   
#endif
}	

        我们主要看fac_us和fac_ms ,他们分别表示延时1us、1ms需要多少个SysTick 时钟周期。通过跳转可知,SystemCoreClock为72Mhz,SystemCoreClock/8 代表经过1s需要多少个时钟周期,再除以1000000则表示经过1us需要多少个时钟周期。通过计算可知fac_us=9,fac_ms=9000。

        我们再看us的延时函数:

void delay_us(u32 nus)
{		u32 temp;	    	 SysTick->LOAD=nus*fac_us; 					//时间加载	  		 SysTick->VAL=0x00;        					//清空计数器SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;	//开始倒数	  do{temp=SysTick->CTRL;}while((temp&0x01)&&!(temp&(1<<16)));		//等待时间到达   SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;	//关闭计数器SysTick->VAL =0X00;      					 //清空计数器	 
}

        SysTick是MDK自定义的一个寄存器。SysTick->CTRL主要是开关计数器,SysTick-> LOAD类似于重装载寄存器,在倒数到0后进行重装载,SysTick-> VAL是计数器,进行倒数。

        这个函数先计算出需要倒数的时间nus*fac_us,存到LOAD中,然后清空当前寄存器 VAL 的内容,再开启倒数功能。等到倒数结束,最后关闭 SysTick,清空 VAL 的值。

        但是但是!!!重点的来了,LOAD,VAL是个24位寄存器。也就是最大值为2^24=16777216.也就是说:需要倒数的时间:nus*fac_us必须小于2^24,则nus=2^24/9=1864135.1111111.换算成ms大概就是1800秒

        所以开头我延时4000ms的效果其实就是4000-(1800*2)=400ms,约0.4s左右。

http://www.sczhlp.com/news/92195/

相关文章:

  • 广州网站建设懂你所需wordpress 文章和评论的距离
  • 网站做cdn网络营销公司简介
  • 网站上传权限问题网页版传奇排行榜
  • 北京开网站建设公司怎么介绍自己的学校
  • 大连手机自适应网站制作价格关于中秋节网页设计实训报告
  • 网站流量分布北京优化网站外包公司
  • 58同城佛山网站建设wordpress seo神器
  • 网站建设系统哪家便宜些3322做网站
  • 环保网站 怎么做科技为了上大学上交可控核聚变免费阅读
  • 做爰全过程免费的视频99网站网站wap版
  • 手机网站建设的代码湖北省建设工程造价管理站网站
  • 网站源码风险如何查询网站的外链
  • 洛阳航迪科技网站建设公司怎么样沈阳网站开发程序员工资
  • 网站开发流程 ppt设计logo网站免
  • 汕头企业模板建站品牌建设对策
  • 网站建设的财务分析专业网络推广公司
  • 如何让网站被百度收录域名申请免费注册
  • 湘潭建设公司网站关键词网站排名查询
  • 推荐网站网页北京市运动会网站建设
  • 网站开发技术题目外贸建站需要花多少钱
  • 网站的站点建设前端开发语言的特点是
  • 成都市医院网站建设建网站平台哪家好
  • 做净化行业需要知道的网站济南网站的建设
  • php学校网站系统海外代发货平台
  • 网站开发语言比较免费推广平台微信号
  • 企业开源网站系统做二手市场类型的网站名字
  • 口碑好的高密网站建设福田网站建设新闻
  • 一站式网站建设哪家专业晋城建设路网站
  • 做视频网站 版权怎么解决网站分析培训班
  • 住房和城乡建设部政务服务门户网站vi设计主要做什么