历史上的今天
今天是: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”,去看参考资料吧,说的很明白的。(下载的资料要多看,数据手册才是最好的参考资料。)
把这两个函数加在上次的程序中,主函数中先调用下配置函数,然后把以前延时函数换掉,编译,下载。恩,拿个秒表看下,约定的时间,对吗?
史海拾趣
|
今天在网上看到这样一个帖子:本人在天成电子监控有限公司购买一部监听手机,说好先付一半的价钱,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 … 查看全部问答> |
|
一个是外部中断,一个是时钟中断。 设置如下, //PC7 nvic_init.NVIC_IRQChannel = EXTI9_5_IRQChannel; nvic ...… 查看全部问答> |
|
eZ430-RF2500试用心得(六)—传感实验进行时 犹需掌握寄存器 经过前一段时间研究,算是把TI的片内温度测量例程基本搞懂了。眼看着所剩时间已经不多,虽然还是感觉没到开发自己的程序的时候,但也不得不硬着头皮尝试着来添加自己的应用了。所以,昨天早上起床后,我 ...… 查看全部问答> |
|
TI实习生招聘计划在全国展开。上周,我有幸参加了TI在武汉举行的实习生及应届生的招聘会。虽结果不得而知,但却让我感触颇深,愿慢慢道来,与大家一同分享TI面试二三事。 3月8号晚,我早早的赶到华科,参加了TI的宣讲会。 ...… 查看全部问答> |
|
我用传感器采集数据,通过A/D转换后用CAN发送处理后的数据我采集到的数据转换后是一个0.00到999的数据范围,我提取出来各个位的数值,用一个字符数组来传递,还是看程序吧,有点说不清楚的感觉 one=(int)(d*100); b=one/100; ...… 查看全部问答> |




