历史上的今天
返回首页

历史上的今天

今天是:2025年01月11日(星期六)

2021年01月11日 | stm32之路:三 约好那一刻

2021-01-11 来源:eefocus

        万事开头难,前两天,我们已经建好了工程,写了点亮LED的程序,是不是感觉stm32也没想象中那么难?接下来,go on!


        开发板上的LED在闪烁着,间隔是多长时间呢?能不能让它像钟表一样,一秒闪一下呢?答案是肯定的。今天我的目标,就是教它“读”秒~


        还是上一个函数,功能都有了,就是缺个精确的延时。说到“精确的延时”,大家首先想到的一定是定时器。对!就是它。翻开stm32的参考资料(Cortex-M3技术参考手册、Cortex-M3权威指南、STM32F10xxx数据手册,这些都可以),有个SysTick,就用它吧。一般人们把它叫做“系统节拍时钟”,或者叫“滴答定时器”,因为它可以可靠的提供一个精确的时钟。本质上说,SysTick是个24位的计数器,计数完成,就中断了,然后清零,重载,又计数。下边还是通过程序来看,这个家伙到底怎么用的。

 

void Systick_Configuration(void)

{

       SysTick_CounterCmd(SysTick_Counter_Disable);            //SysTick计数失能;

       SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//SysTick时钟为HCLK8分频;

       SysTick_CounterCmd(SysTick_Counter_Clear);        //清除SysTick计数器;

       SysTick_SetReload(9000*1000);                              //设置SysTick重载值;

}

 

        根据上次的程序,可以轻易的推测void Systick_Configuration(void)是SysTick的配置函数,而且,要在工程lib文件中添加stm32f10x_systick.c。里面的设置和我们以前用定时器很相似,先失能(屏蔽中断),在清除计数器(清除中断标志位),然后设置计数值。(这么说我都觉得有些牵强···)计数值怎么算呢?这要根据时钟源了。前面的RCC_Configuration()函数设置HCLK为72MHz,上面的函数中,SysTick时钟源是HCLK8分频,也就是f=9MHz,那么,T=1/9M,1s=T*N,所以重载值N=9000000。还要注意一下,SysTick是Cortex-M3的“内设”,不需要用RCC来开启时钟。


        这个只是初始化配置,用的时候有是怎样呢?

void Delay_Second(void)

{

       SysTick_CounterCmd(SysTick_Counter_Enable);      //SysTick使能;

       while(SysTick_GetFlagStatus(SysTick_FLAG_COUNT)== 0); //等待SysTick计数至0;

       SysTick_CounterCmd(SysTick_Counter_Disable);     //SysTick计数失能;

       SysTick_CounterCmd(SysTick_Counter_Clear); //清除SysTick计数器;

}

          延时1s的函数,和定时器相似,很容易懂吧?不同的是,重装值上面已经设置过了。至于那句“等待SysTick计数至0”,去看参考资料吧,说的很明白的。(下载的资料要多看,数据手册才是最好的参考资料。)


          把这两个函数加在上次的程序中,主函数中先调用下配置函数,然后把以前延时函数换掉,编译,下载。恩,拿个秒表看下,约定的时间,对吗?


推荐阅读

史海拾趣

EA Elektro-Automatik公司的发展小趣事

1974年,电子工程师Helmut Nolden先生在德国创立了EA Elektro-Automatik公司。初期,公司主要生产小型固定式和可调式电源,以满足工业、实验室和业余爱好者的需求。这些产品凭借稳定的性能和合理的价格,在市场上逐渐获得了认可。随着技术团队能力的逐渐提高和持续创新,EA Elektro-Automatik开始扩大产品线,满足更多客户的特定需求。

DDP Engineered LED Solutions公司的发展小趣事

随着技术的不断成熟和市场的不断扩大,DDP Engineered LED Solutions公司开始注重市场拓展和品牌建设。公司积极参加国内外各类展会和论坛,展示公司的产品和技术实力,与业界同行交流学习。同时,公司还加大品牌宣传力度,通过广告、宣传册等多种渠道提升品牌知名度和美誉度。这些努力不仅让DDP的产品走进了更多客户的视野,也为公司的长远发展奠定了坚实的基础。

ANSHAN [Anshan Suly Electronics]公司的发展小趣事

随着产品质量的不断提升和市场需求的不断扩大,ANSHAN公司开始积极拓展国内外市场。公司通过与国内外知名企业建立合作关系,参加国际电子产品展览会等方式,不断提升品牌知名度和影响力。同时,公司还注重售后服务体系建设,为客户提供全方位、高效的服务支持。这些举措有效提升了公司的市场竞争力,使ANSHAN成为电子行业中备受瞩目的品牌。

CUI公司的发展小趣事

随着电子行业的发展,CUI技术逐渐融入到整个电子产业链的各个环节中。一些企业通过整合上下游资源,形成了从CUI材料研发、生产到电子产品制造的完整产业链。这种产业链整合不仅提高了企业的运营效率,还降低了生产成本,为企业赢得了更多的市场份额。

FIDELIX公司的发展小趣事

近年来,随着全球半导体市场的不断变化和终端产品需求的多样化,FIDELIX积极调整市场策略,加大产品创新力度。公司不断推出具有高性能、低功耗、高可靠性的存储芯片产品,以满足不同客户群体的需求。同时,FIDELIX还积极开拓新市场,拓展产品线,努力提升品牌影响力和市场竞争力。

以上五个故事均基于FIDELIX公司在电子行业里的发展情况模拟编写,旨在展示其发展历程中的关键节点和重要事件。每个故事都尽量保持客观性和事实性描述,不涉及任何主观评价或褒贬。

BCD Semi(Diodes)公司的发展小趣事

为了进一步扩大市场份额,BCD Semi(Diodes)公司积极寻求与国际知名企业的合作。通过与国际合作伙伴的共同努力,公司成功打入了多个海外市场,并在全球范围内建立了稳定的销售渠道。同时,公司还与国际同行开展技术交流与合作,共同推动模拟半导体技术的发展。

问答坊 | AI 解惑

购买监听手机的法律与经济风险不得不防

今天在网上看到这样一个帖子:本人在天成电子监控有限公司购买一部监听手机,说好先付一半的价钱,750元,全额1500元。我给他们公司汇完了钱不给发货,威胁我再把另一半给他再给我发货,如果不给汇款剩下的750元之前预交的750元就不给退了!!说话 ...…

查看全部问答>

Pretous中LPC2138 P1口接1602液晶 仿真无法显示!!

本人在搭个Proteus中的虚拟仿真平台,用到LM1602时,无法正常显示发送的数据,相同的代码本人在LPC2106的P0口中曾成功过,因为外接部件多所以选用了LPC2138的P1,单步调试时写操作数都是正确的但是数据写入到IOSET1中就是无法显示;本人最怕在仿真 ...…

查看全部问答>

层被琐后Blt返回DDERR_SURFACEBUSY是由谁返回的?

请问执行Blt时有没有锁?如果有,加在哪里?跟到HalBlt里面没有加锁。层被琐时执行Blt操作直接返回DDERR_SURFACEBUSY,没有进HalBlt操作,错误码是由谁返回的?Blt和BltFast跟到底层都是执行的HalBlt,他们对硬件的依赖代码是否封在directDraw里面?…

查看全部问答>

谁有win ce平台上基于SIP的voip客户端程序+源码?!

我的win ce是5.0的,EVC是4.0的,谁有能在evc4.0上的基于SIP的VOIP程序阿!! 很急很急! 有的人请尽快联系我。谢谢大家了! 邮箱yaoty@bit.edu.cn yaoty001@sohu.com …

查看全部问答>

stm32中断抢占问题

一个是外部中断,一个是时钟中断。 设置如下,     //PC7     nvic_init.NVIC_IRQChannel                   = EXTI9_5_IRQChannel;     nvic ...…

查看全部问答>

eZ430-RF2500试用心得(六)—传感实验进行时 犹需掌握寄存器

       经过前一段时间研究,算是把TI的片内温度测量例程基本搞懂了。眼看着所剩时间已经不多,虽然还是感觉没到开发自己的程序的时候,但也不得不硬着头皮尝试着来添加自己的应用了。所以,昨天早上起床后,我 ...…

查看全部问答>

msp430好用

还用arm吗 [ 本帖最后由 shzps 于 2012-5-17 17:57 编辑 ]…

查看全部问答>

TI实习生面试二三事

TI实习生招聘计划在全国展开。上周,我有幸参加了TI在武汉举行的实习生及应届生的招聘会。虽结果不得而知,但却让我感触颇深,愿慢慢道来,与大家一同分享TI面试二三事。      3月8号晚,我早早的赶到华科,参加了TI的宣讲会。 ...…

查看全部问答>

用arm做过can数据传输的朋友请帮忙看看

我用传感器采集数据,通过A/D转换后用CAN发送处理后的数据我采集到的数据转换后是一个0.00到999的数据范围,我提取出来各个位的数值,用一个字符数组来传递,还是看程序吧,有点说不清楚的感觉 one=(int)(d*100);    b=one/100;  ...…

查看全部问答>