历史上的今天
返回首页

历史上的今天

今天是:2024年10月10日(星期四)

正在发生

2020年10月10日 | STM32定时器溢出模式计时设置

2020-10-10 来源:eefocus

环境:


主机:WIN7


开发环境:MDK4.23


MCU:STM32F103CBT6


源代码1:


说明:定时器采用TIM2,时钟源为内部8M晶振,向上溢出模式.此定时器用在延时函数,最小可以延时1us,故没有采用中断形式定时.


初始化代码:



RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

//重新将Timer设置为缺省值

TIM_DeInit(TIM2);

//采用内部时钟给TIM2提供时钟源

TIM_InternalClockConfig(TIM2);

 

timInitStruct.TIM_ClockDivision = TIM_CKD_DIV2;    //定时器基准频率8MHz

timInitStruct.TIM_Prescaler = 8 - 1;            //计数频率为1us跳转1次

timInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数

timInitStruct.TIM_RepetitionCounter = 0;

timInitStruct.TIM_Period = 0; //这个值实际上就是TIMX->ARR,延时开始时重新设定即可

 

TIM_TimeBaseInit(TIM2, &timInitStruct);

TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //计数溢出时触发中断

TIM_Cmd(TIM2, ENABLE); //开启计数器



延时函数代码:


//延时1us

//最大65536us

void _delay_us(uint16_t t)

{

TIM_SetCounter(TIM2,0);

TIM_SetAutoreload(TIM2,t - 1);

//等待时间到

while (TIM_GetITStatus(TIM2,TIM_FLAG_Update) == 0);

//停止计数

TIM_SetAutoreload(TIM2,0);

//清中断标志

TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);

}

 

//延迟1ms

//最大65ms

void _delay_ms(uint8_t t)

{

if (t > 65)

{

t = 65;

}

_delay_us(t * 1000);

}


源代码2:


说明:定时器采用TIM3,时钟源为内部8M晶振,向上溢出模式.此定时器用在长时间计时,最小计时间隔为100us,故采用中断形式定时.


初始化代码:



//中断NVIC设置:允许中断,设置优先级

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;    //更新事件

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   //抢占优先级0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;          //响应优先级1

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             //允许中断

NVIC_Init(&NVIC_InitStructure);                             //写入设置

 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

//重新将Timer设置为缺省值

TIM_DeInit(TIM3);

//采用内部时钟给TIM3提供时钟源

TIM_InternalClockConfig(TIM3);

 

timInitStruct.TIM_ClockDivision = TIM_CKD_DIV2;    //定时器基准频率8MHz

timInitStruct.TIM_Prescaler = 800 - 1;            //计数频率为100us跳转1次

timInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数

timInitStruct.TIM_RepetitionCounter = 0;

timInitStruct.TIM_Period = 0; //这个值实际上就是TIMX->ARR,延时开始时重新设定即可

 

TIM_TimeBaseInit(TIM3, &timInitStruct);

//清溢出中断标志

TIM_ClearFlag(TIM3, TIM_FLAG_Update);

//禁止ARR预装载缓冲器

TIM_ARRPreloadConfig(TIM3, DISABLE);

//开启中断

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);

TIM_Cmd(TIM3, ENABLE); //开启计数器


中断函数代码:


//TIM3中断

void TIM3_IRQHandler(void)

{

if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)

    {

TIM3->ARR = 0;

        //清中断溢出标志

  TIM_ClearITPendingBit(TIM3,TIM_FLAG_Update);

//发送信号

Sig_Table.stop_require = 1;

    }

}


推荐阅读

史海拾趣

Avasem公司的发展小趣事

Avasem公司深知人才是企业发展的核心驱动力。因此,公司一直致力于构建良好的人才培养机制和企业文化。Avasem公司注重员工的个人成长和职业发展,提供丰富的培训和学习机会,鼓励员工不断学习和创新。同时,公司还倡导开放、包容和协作的企业文化,为员工创造一个积极、健康的工作环境。这种以人为本的管理理念不仅吸引了大量优秀人才加入公司,还激发了员工的创新精神和团队凝聚力,为公司的持续发展提供了有力保障。

ECLIPTEK公司的发展小趣事

ECLIPTEK公司自创立之初就专注于高精度电子元件的研发与生产。面对激烈的市场竞争,公司不断投入研发资源,推出了一系列具有创新性的产品,如高精度时间同步模块和低功耗传感器。这些产品凭借其卓越的性能和可靠性,迅速在市场上赢得了良好的口碑,使ECLIPTEK成为电子元件行业的佼佼者。

超音(CY)公司的发展小趣事

随着科技的不断进步,超音意识到技术创新对于公司发展的重要性。因此,公司加大了研发投入,积极引进高端人才,不断推出具有创新性和竞争力的产品。其中,超音的一款高端音响产品凭借其卓越的音质和精美的外观设计,在市场上获得了广泛的好评。此外,超音还积极与其他科技公司合作,共同研发新产品,不断拓宽产品线。

格科微电子(GALAXYCORE)公司的发展小趣事

为了进一步提升品牌影响力,超音开始积极拓展国际市场。公司参加了多个国际展会,与国际知名音频设备厂商建立了合作关系。同时,超音还加强了与国际市场的沟通和交流,了解不同地区的消费者需求,针对性地推出符合当地市场需求的产品。这些努力使得超音在国际市场上的知名度不断提升,产品销量也稳步增长。

American Power Design Inc公司的发展小趣事

随着国内市场的饱和,APDI决定实施国际化战略,以拓展海外市场。公司首先在欧洲设立了研发中心,与当地高校和研究机构合作,共同开发适应欧洲市场的电子产品。随后,APDI又在亚洲建立了生产基地,利用当地的低成本优势和高效的供应链管理,进一步降低了产品成本,提高了市场竞争力。

AnalogicTech公司的发展小趣事

随着技术的不断进步,AnalogicTech始终保持对创新的追求。公司研发团队不断攻克技术难关,推出了一系列具有高性能、高稳定性的产品。其中,公司的LED背光驱动器系列在市场中取得了显著的成功,为公司的快速发展奠定了坚实的基础。

问答坊 | AI 解惑

深入理解Linux虚拟内存管理(未排版之中文版部分章节)

深入理解Linux虚拟内存管理(未排版之中文版部分章节)内容简介 VM 的行为影响着 Linux 内核的每个子系统,并动态地改变整体性能。但直至目前,理解VM 的惟一途径便是:逐行学习文档极少的源代码。而现在有了更简单快捷的可选方案。本书史无前例 ...…

查看全部问答>

AD603

本帖最后由 paulhyde 于 2014-9-15 09:27 编辑 我们在做全国大赛C题用的是AD603可是一直会发生自激现象,可是一级20dB是很好的现象,可是两级连起来也就达到25DB左右以后就开始产生自激!放大倍数一直上不去是为什么呢?  …

查看全部问答>

【藏书阁】单片机现场可编程外围芯片PSD 的原理及应用

目录: 上篇 PSD3XX、4XX、5XX结构原理和性能  第1章 PSD3XX系列现场可编程微控制器外围芯片  第2章 PSD3XXL系列和PSD33XXC1系列简介  第3章 PSD4XX系列现场可编程微控制器外围芯片  第4章 PSD5XX系列现场可编程微控制器外围芯片 ...…

查看全部问答>

关于NK烧到FLASH中运行的问题

问题是这样的,原来将NK.BIN烧到FLASH的首地址中 0x60000000 (FLASH的物理地址)可以正常启动镜像. 现在需要把NK往后一段,以保证不把原来烧在FLASH里EBOOT覆盖掉,比如0x60080000 现在我修改了CONFIG.BIB,下载后通过超级终端看到了确实是烧在了0x6008 ...…

查看全部问答>

关于电源输出电源响应

想请教下,如果我采用电源的恒压模式,进行一个感性负载的测试,想请教下看什么参数可以知道这个电源的电流响应能达到我的需求。…

查看全部问答>

TI DSP DaVinci 系列又出新款高端 DM8168 DM8148

两款高性能视频处理器1)x3 1080p 60fps or 2) x12 720p 30fps or3) 其他组合Gigabit Ethernet, PCI Express, SATA2, DDR2, DDR3, USB 2.0, MMC/SD, HDMI and DVI貌似很强大。继续更新中…

查看全部问答>

28035中,在使用IQmath中的三角函数弹出错误?

28035中,在使用IQmath中的三角函数弹出错误?我使用了其中的一个sin函数,编译时弹出如下窗口,…

查看全部问答>

ARM芯片用什么工具能读出里面的二进制内容

ARM芯片用什么工具能读出里面的二进制内容啊!,注意不是还原源文件,只是读出二进制文件然后烧到另外的ARM芯片去,有朋友说jtag 或 jlink可以读出来,手上没有这两样东西,所以没测试过,不知道那为朋友有做过这个测试的,望告知,谢谢  …

查看全部问答>

STM32 DMA输出到GPIO问题

请教各位:    (1)STM32 内存8Bit的数据,可以通过DMA发送到GPIOB的高4位(8Bit数据仅输出高4位)吗?如何设置?    (2)DMA发送数据到GPIOB,刷新率要达到4M,能否实现?…

查看全部问答>

PCB设计时如何选择元件的封装?

最近在做毕业设计,我需要把板子做出来,原理图画好了,但是不知道里面的元件的封装怎么选择,软件系统里有个集成的封装库,但是不知道这个封装库的尺寸什么的跟市场上的元件是不是合适,还有就是有的封装库里面同一个元件有好几种封装,比如电阻就 ...…

查看全部问答>