芯片:stm8s103F3P6

软件环境:IAR for stm8 2.20.3

功能简述:使用定时器1(PD4-Tim1_ch3)输出100Hz 50%占空比的PWM波形;

定时器1(PC6-Tim1_ch1/2)检测输入PWM 波形频率和占空比;

在工程环境无问题情况下,在主函数中直接添加代码:

GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);     //初始化引脚为 输出推拉,低电平,10MHzTIM2_DeInit();                                               //定时器2寄存器恢复到默认状态 TIM2_TimeBaseInit(TIM2_PRESCALER_16, 10000);                 //16分频, 1MHZ 10000 = 10ms F= 100hzTIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 5000, TIM2_OCPOLARITY_HIGH); //占空比50%TIM2_Cmd(ENABLE);                                            //使能定时器2

参考链接:https://blog.csdn.net/qq_18842031/article/details/74531738

PWM输出是没问题的,但是其输入捕获问题是只能检测到频率,不能检测到占空比;

若需要同时检测频率和占空比,还需要使用定时器1的通道1和2,

代码如下:

    GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT);   //输入浮动,没有外部中断  TIM1_DeInit();                                         //tim1 定时器寄存器全部复位  TIM1_TimeBaseInit(0x0f, TIM1_COUNTERMODE_UP, 50000-1, 0);//  50ms  最小捕获50hz      设置时间分频  向上计数    捕捉50Hz及 以上的周期和占空比TIM1_PWMIConfig(TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x00); //选择TI1输入上升沿触发 选择TI2输入下降沿触发 输入捕捉预定标器  无滤波TIM1_SelectInputTrigger(TIM1_TS_TI1FP1);   //滤波后输入TI1TIM1_SelectSlaveMode(TIM1_SLAVEMODE_RESET);//复位输入TIM1_ClearFlag(TIM1_FLAG_CC1);                         //指定要清除的标志TIM1_ClearFlag(TIM1_FLAG_CC2);                         //指定要清除的标志TIM1_ITConfig( TIM1_IT_CC1, ENABLE);                  //去掉是查询方式,否则是中断方式TIM1_ITConfig( TIM1_IT_CC2, ENABLE);                  //去掉是查询方式,否则是中断方式TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE);                   //使能输入捕获通道1TIM1_CCxCmd(TIM1_CHANNEL_2, ENABLE);                   //使能输入捕获通道2TIM1_Cmd(ENABLE);                                      //使能定时器

但是仅仅这样写是不行的,因为PC6的定时器功能,需要使能复用功能才可以使用,不然的话,配置是无效的。

网上大佬还是很多的,详细配置方式见链接:https://blog.csdn.net/qq_18842031/article/details/77104097

最后需要稍微计算下就可以得到频率和占空比了:

INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler, 12)
{ uint16_t num = 0;static uint16_t num1;static uint32_t num2;uint8_t data[11]={0};uint8_t len = 0;if(TIM1_GetITStatus(TIM1_IT_CC1) != RESET) //如果CH1边沿触发  {  num1 = TIM1_GetCapture1();  TIM1_ClearITPendingBit(TIM1_IT_CC1);    //清除标志位  }  else if(TIM1_GetITStatus(TIM1_IT_CC2) != RESET) //如果CH2边沿触发  {  num2 = TIM1_GetCapture2();             //TIM1_ClearITPendingBit(TIM1_IT_CC2);    //清除标志位  duty = ((num2 * 100) / num1); //计算占空比fre = 1000000/( num1);        //计算频率}}

stm8s103-PWM输出与输入捕获相关推荐

  1. 【蓝桥杯嵌入式】【STM32】10_InputCaputer之输入捕获

    文章目录 前言 1.输入捕获原理 1.1.设置输入捕获滤波器 1.2.设置输入捕获的极性 1.3.设置输入捕获的映射通道 1.4.设置输入捕获分频器 1.5.捕获到有效信号可开启中断 1.6.捕获实现 ...

  2. cc2530定时器和捕获比较_STM32定时器PWM和输入捕获事件

    这几天在调试STM32407的定时器扩展功能,顺便研究了下利用定时器完成PWM波比较输出以及输入捕获事件, 捕获输入波形的高电平时间,具体代码如下,供参考学习,如有问题,请留言随时沟通!main函数部 ...

  3. K60的FTM的PWM、输入捕获、正交解码

    FTM是一个神奇的模块,他能输出PWM,能输入捕获,能输出比较还能正交解码.英文全称是FlexTimer Module,你可以理解为高级定时器模块.易用定时器模块等等.不仅仅在Kinetis 32位处 ...

  4. 8、【STM32】定时器(TIM)——中断、PWM、输入捕获实验(一文精通定时器)

    目录 前言 理论学习 一.定时器中断 1.1.时基单元包括: 1.2.通用定时器功能 1.3.计数器模式 1.3 相关寄存器 二.定时器PWM输出 2.1.PWM输入模式 2.2.定时器PWM输出 2 ...

  5. K60的FTM的PWM、输入捕获、正交解码(未理解完)

    FTM模块默认对应引脚有3个FTM模块 FTM是一个神奇的模块,他能输出PWM,能输入捕获,能输出比较还能正交解码.英文全称是FlexTimer Module,你可以理解为高级定时器模块.易用定时器模 ...

  6. STM32学习笔记(四)TIM定时器运用之输入捕获

    一.输入捕获 1.1输入捕获简介 简称IC(Input Capture),输入捕获可用于测量信号波形(例如PWM波形)的频率.占空比.脉冲间隔.电平持续时间等参数,也可以触发捕获中断. 输入捕获的过程 ...

  7. STM32F4系列HAL库配置定时器实验——输入捕获

    STM32F4系列HAL库配置定时器实验--输入捕获 输入捕获简单讲解 输入捕获模式可以用来测量脉冲宽度或者测量频率.我们以测量周期和频率为例,用一个简图来说明输入捕获的原理 假定定时器工作在向上计数 ...

  8. STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)

    目录 定时器 8个定时器 定时器功能 定时器中断 常用通用定时器的寄存器 定时器中断实验目的: 定时器库函数及步骤 实验程序讲解 PWM 简介 STM32 PWM工作过程 PWM模式1 与 PWM模式 ...

  9. stm32 PWM输入捕获

    普通的输入捕获,可使用定时器的四个通道,一路捕获占用一个捕获寄存器. PWM输入,只能使用两个通道,通道1和通道2. 一路PWM输入占用两个捕获寄存器,一个捕获周期,一个捕获占空比. 这里,用通用定时 ...

  10. STM32-定时器输入捕获实验(捕获PWM方波的频率和占空比)

    STM32-定时器输入捕获实验(捕获PWM方波的频率和占空比) 一.输入捕获模式 在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中.当 ...

最新文章

  1. layui select 与 vue 的结合使用
  2. Windows 2008 R2 X64 安装WebsitePanel(WSP虚拟主机管理面板)
  3. DM368开发 -- 常用指令演示
  4. php 中 t怎么打开,怎么在PHP项目中实现一个explort() 功能
  5. memcache 知识点
  6. linux php源码安装mysql_linux源码安装mysql5.7
  7. 双android手机同步工具,android手机同步数据PC(SyncDroid)
  8. 【linux学习笔记五】帮助命令
  9. 为Google Reader守夜。。。
  10. Proteus十字路口交通灯
  11. html古诗竖版,古诗词竖版图片
  12. python九宫格矩阵排数
  13. 17.10.21B组题解
  14. 如何实现开票申请及其审核功能
  15. KITTI 相关信息汇总
  16. 安装 FME Desktop 2020 教程(内置补丁可以有效激活软件)
  17. 怎样做竞品分析?竞品分析的意义?
  18. Javascript中的every()与some()的区别和应用
  19. 重修Java内功——书到用时方恨少
  20. uC/OS-II 中文手册

热门文章

  1. mysql自增函数_mysql实现自增函数
  2. Kubernetes 持续集成 SpringCloud
  3. excel最常用的八个函数
  4. 服务器车牌识别系统,车牌识别系统数据库连接问世
  5. html中if判断鼠标,怎样在网页里面检测鼠标
  6. python读取math_python调用通达信公式,python读取通达信公式结果
  7. python爬虫:用scrapy框架爬取链家网房价信息并存入mongodb
  8. 【易语言界面开发系列教程之 (EX_UI使用系列教程--第10讲(EXui右键菜单演示案例))】
  9. SpreadJS 15.0.5 SpreadJS Excel在线设计
  10. MySQL下载安装与配置详细教程