历史上的今天

今天是:2024年09月15日(星期日)

2021年09月15日 | STM8S003F3 使用定时器来计算方波周期的方法

发布者:知识的海洋 来源: eefocus关键字:STM8S003F3  定时器来 手机看文章 扫描二维码
随时随地手机看文章

我们的需求是stm8做从机,然后使用一根线接收方波,来实现不同的功能,比如亮红灯,亮黄灯,打开蜂鸣器等等等等。


那么问题来了,之前我尝试着通过一次发送多少个方波来实现不同的功能,但是到最后我发现这个方法行不通。后来我想了一下可以通过主机发过来的方波频率来实现不同的功能,即知道每次发过来的方波的周期。


那么如何计算方波周期呢?这里感谢我的同事给了我思路,可以实现这个功能。


首先是要做gpio的外部中断,这里以gpio PD4在主函数里进行设置,当有下降沿的时候就会进入中断处理函数:


GPIO_Init(GPIOD,GPIO_PIN_4, GPIO_MODE_IN_FL_IT );//接收方波初始化

EXTI_DeInit();

EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD , EXTI_SENSITIVITY_FALL_ONLY);

定时器timer2在主函数的配置如下:


//内部时钟为16M,因此这个设置时以10ms进入一次中断

TIM2_DeInit();  

TIM2_TimeBaseInit(TIM2_PRESCALER_16, 9999);       

TIM2_PrescalerConfig(TIM2_PRESCALER_16, TIM2_PSCRELOADMODE_UPDATE);  

TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);  

TIM2_SetCounter(0x0000);  

TIM2_Cmd(ENABLE);  

TIM2_ClearFlag(TIM2_FLAG_UPDATE);

 

TIM2_ITConfig( TIM2_IT_UPDATE, ENABLE);

TIM2_Cmd(ENABLE); 

在gpio的外部中断函数里,这样设置:


INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)

{

  /* In order to detect unexpected events during development,

     it is recommended to set a breakpoint on the following instruction.

  */

  //GPIO_WriteReverse(GPIOD,GPIO_PIN_3);  

  flag ^= 0x01;

  if(flag == 0)

  test_time = 0;

  else{

tmp_count = test_time;

  }

}

在timer2的外部中断处理函数里,这样设置:


 INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)

 {

  /* In order to detect unexpected events during development,

     it is recommended to set a breakpoint on the following instruction.

  */

     

     TIM2_ClearFlag( TIM2_FLAG_UPDATE);//记得要清除标志位,否则会出问题

test_time++;

   

 }

这样一来当flag为0的时候就会清零,为1的时候就会将数据传出去,也就是等于知道一个周期的时间。


存在问题:这样的写法虽然可以解决问题,但是在程序刚开始的时候还是会出现问题,因为可能定时器先走了,主函数比定时器慢,一开始可能会丢,不过后面就很稳定了。

关键字:STM8S003F3  定时器来 引用地址:STM8S003F3 使用定时器来计算方波周期的方法

上一篇:STM8S003F3 内部时钟初始化以及定时器做延时的使用
下一篇:STM8学习笔记---Modbus通信协议简单移植

推荐阅读

   苹果新发布的iPhone XS、iPhone XS Max昨日下午开启预售。苹果官网的信息显示,截至下午5点,iPhone XS Max各款配置在北京5家零售店均显示“不可预约”或无法点击,iPhone XS的预约情况则显示,该机型512GB配置的首日订购率先约满,64GB以及256GB两种配置,截至5点仍可进行9月21日发货预约。根据苹果官网的预售规则,9月13日发布的iPhone XS...
单片机源程序如下:#define MAIN_Fosc 24000000L //定义主时钟#include "STC15Fxxxx.H"#include "T_SineTable.h"#define PWM_DeadZone 12 /* 死区时钟数, 6 ~ 24之间 *//************* 功能说明 *********...
摘要双向功率转换器是可再生能源和电动汽车充电器中的关键部件。碳化硅开关能够实现先前技术无法达到的效率水平。太阳能和风能等可再生能源的存储越来越重要,而电池则是一种实用的储能解决方案。在电动汽车(EV)市场的驱动下,电池可用于从公用事业到家庭等任何规模场景应用,成本也在不断下降 。此外,虽然基于碳的 矿物燃料仍在继续使用,但 电池电...

史海拾趣

问答坊 | AI 解惑

RTX操作系统的应用例子

RTX操作系统的应用例子RTX操作系统的应用例子RTX操作系统的应用例子…

查看全部问答∨

制作51和CPLD通用下载线

本帖最后由 paulhyde 于 2014-9-15 09:13 编辑 感兴趣的可以看看  …

查看全部问答∨

基于DDS任意波形发生器的实现与设计

元月份做的实验,供大家参考 转PDF的时候,没转好,见谅 …

查看全部问答∨

linux+arm

想学习linux+arm的知识: 那位高手能告诉下:在linux下建立arm开发环境的具体步骤,以及需要那些相关的资料和工具,还有怎样设置?我需要一个非常详细的设置步骤. 谢谢~~~~…

查看全部问答∨

进来帮帮我!!关于应用程序与USB驱动程序通信!!

我最近在写一个与驱动程序通讯的应用程序,比如在菜单下有“读”的控件,那么如何实现与驱动程序中的READ协调,也就是说我,我按菜单下的“读”时,驱动程序中就执行“读”的函数??…

查看全部问答∨

help 求助!!新手如何学习嵌入式

我现在想学习嵌入式开发,不知道该从何处着手,请大家指点迷津 我的C语言和汇编都有一定基础。 现在该学习那些方面,希望大家推荐一些好的书籍, 谢谢大家了…

查看全部问答∨

一个可供借鉴的便宜的成品

我在网上关注很长时间了,最后从价格上NET-008最实用。大家不妨借鉴一下他的长处。下面是他的介绍: 这是一款在我们的net-008的产品基础上扩展而成的智能家居控制系统,系统成本不足1000,和市面上动不动就成千上万的智能家居系统比起来可算是 ...…

查看全部问答∨

2440的SDRAM到底要不要做等长线啊

来自EEWORLD合作群:63762526我看很多板子都做了蛇形走线 …

查看全部问答∨

可以同时在一个USB实现虚拟串口和移动硬盘吗

我使用STM32 CPU,在一个USB端口上可以分别实现虚拟串口和移动硬盘的功能。 请问可以合并2个功能到一起吗,即插上USB线之后,主机同时发现一个虚拟串口和一个移动硬盘。   谢谢!…

查看全部问答∨

求助:端点0处理函数

                                 在STM32的USB例程里面,应该如何增加用户自己定义的端点0 的处理函数啊?貌似只看到有EP1_OUT_Callback端点1的。。 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved