现在学了定时模式 又开始生产网络垃圾了

主要看你拿哪个定时器 高级定时器和通用计算频率的公式不一样(看手册 )

高级定时器

(fCK_CNT)等于fCK_PSC/( PSCR[15:0]+1)

通用定时器

fCK_CNT等于fCK_PSC/2(PSC[3:0])

根据时钟树 STM8S一般不外接晶振 使用内部HSI RS16Mhz 经过预分频器默认8分频 只剩下2Mhz

如需要超频可以修改 时钟分频寄存器(CLK_CKDIVR) 改变预分频系数

配置好时钟部分 就可以计算计数器的频率了

例:系统时钟不超频默认2Mhz PSCR分频因子可以配置为1 时钟2分频

fck_CNT = 2Mhz/2^1 = 1Mhz 这样计数器频率就成了1Mhz 周期为1us

如需定时1秒 ARR就可以设置为1000次 这样一个溢出周期就变成1ms 然后在中断中再用一个变量计数1000次就实现了1s定时

  /* 基本定时模式 */
//  TIM2_PSCR = 0X01;//设置分频因子为1 系统默认时钟为2Mhz,PSC_CNT = PSC_CK/2^PSCE次方 //  TIM2_CNTRH = 0X00;
//  TIM2_CNTRH = 0X00;//计数器清零//  TIM2_CR1 |= (1<<2 | 1<<0); //控制寄存器1//  TIM2_IER |= (1<<0);//中断使能寄存器 使能中断//  TIM2_ARRH = 0X03;
//  TIM2_ARRL = 0XE8;//计数器F为1MHZ F = 1/T  T = 1/F 一个周期为1us 设置ARR为1000 就是一毫秒出现一次更新中断

TIM2_CR1 使能计数器 (具体看手册)

IER为使能更新中断

#pragma vector = 15__interrupt void TIM2_IRQHandle(void)
{if(TIM2_SR1_UIF == 1){TIM2_SR1_UIF = 0;conunt++;if(conunt == 1000){conunt=0;LED1 = ~LED1;}}
}

TIM2_SR1_UIF为中断更新溢出标志位 由硬件置1 软件清零

输出比较 (输出PWM波)

为了兼容有些所需频率较高的场景 一般会重新设置预分频器 (CLK_CKDIVR) 改为16Mhz(图一可见详细)

PSCR预分频器设置为1分频 计数器时钟为16Mhz

然后设置输出比较模式 一下均使用通用定时器TIM2 CH1单通道输出

配置输出模式 选择PWM1模式  也就是说计数器CNT的值<CCR时为有效电平 >时为无效电平 (向上计数时)这一位由TIMx_CCMRa来配置 (a的取值为1~3) 还得使能输出比较预装载OC1PE

接下来配置有效电平 由TIMx_CCERb来配置(b的取值为1~2)CCIP(位1) 模式为高电平0有效

使能输出CC1E 为1才能输出

接下来是pwm的核心,频率以及占空比的设置:

/* Set the Autoreload value */
    TIM2_ARRH = 0x00;
    TIM2_ARRL = 0x8a;

/*TIM2 Frequency=16M/138=115k*/
    TIM2_CCR1H  = 0x00;    //设置PWM输出占空比为40%
    TIM2_CCR1L  = 0X37;

下面说一下计算的方法:
由时钟的配置可知 时钟为16M,自动重装载的值为0x008a=138;
所以 f=16M/138=115k;
占空比计算:0x0037=55;占空比=55/138=40%

最后使能一下计数器 TIMx_CR1 第0位

//  CLK_CKDIVR= 0x00; //内部16M时钟不分频
//  TIM2_PSCR = 0x01; //定时器2预分频系数为1
//  TIM2_CR1 = 0x01; //内部计数器使能;
//  TIM2_ARRH = 0x00;//0140,320分频,16M/320=50K,实测49.75K
//  TIM2_ARRL = 0x8a;//自动装载寄存器低位;实测013e正好为50.0K
//  /*PWM通道1设置*/
//  TIM2_CCER1 |= 0x01; //开启OC1信号输出脚
//  TIM2_CCMR1 = 0x60; //PWM1模式
//  TIM2_CCR1H = 0x00; //占空比高位
//  TIM2_CCR1L = 0x37; //占空比低位
//  TIM2_CCMR1 |= 0x08; //输出比较1预装载使能
//  /*PWM通道2设置*/
//  TIM2_CCER1 |= 0x10; //开启OC2信号输出脚
//  TIM2_CCMR2 = 0x60; //PWM1模式
//  TIM2_CCR2H = 0x00; //占空比高位
//  TIM2_CCR2L = 0x37; //占空比低位
//  TIM2_CCMR2 |= 0x08; //输出比较2预装载使能
//  /*PWM通道3设置*/
//  TIM2_CCER2 |= 0x01; //开启OC3信号输出脚
//  TIM2_CCMR3 = 0x60; //PWM1模式
//  TIM2_CCR3H = 0x00; //占空比高位
//  TIM2_CCR3L = 0x37; //占空比低位
//  TIM2_CCMR3 |= 0x08; //输出比较3预装载使能
//  TIM2_CR1 |= 0x01;

#代码样例

有关引脚复用参考这位大哥博客 (一开始没注意这回事一度自我怀疑)

(49条消息) STM8S103之IO复用__懵懂的博客-CSDN博客_stm8引脚复用

STM8S定时器学习总结相关推荐

  1. python定时器 循环_python从写定时器学习Thread

    python从写定时器学习Thread python 如何写一个定时器,循环定时做某一操作呢? Timer 对象 from threading import Timer def hello(): pr ...

  2. 高精度定时器学习(通过官方手册学习)

    高精度定时器学习 功能描述 一般说明 HRTIM引脚和内部信号 时钟 Timer A..E timing units 翻转事件 功能描述 一般说明 HRTIM可以划分为几个模块: •主定时器 •计时单 ...

  3. buck电路 dac stm32_STM32定时器学习---基本定时器

    STM32F1系列的产品,除了互联网产品外,工作8个,3种定时器,其中一种就是基本定时器.那么STM32单片机的基本定时器如何操作以及编程呢? 下面我们就来详细的了解一下 STM32F1系列的产品,除 ...

  4. STM32F429HAL库定时器学习笔记

    这些基础的东西看视频很费时间而且有过基础的在学习只是库不太清楚,希望我总结的库使用的一些使用能节约一点大家的时间. void TIM3_Init(u16 arr,u16 psc) {       TI ...

  5. ESP32 (Timer)-定时器学习(7)

    提示:本博客作为学习笔记,有错误的地方希望指正 文章目录 一.ESP32定时器介绍 1.1.概述 1.2.使用esp_timer api 1.3.回调函数 1.4.esp_timer在浅睡眠期间 1. ...

  6. stm8s 定时器1 延时_STM8S_库函数_定时器自动装载TIM1

    大家好,我是单片机爱好者-MCU起航.这里说下使用库函数方式控制STM8S103F3P6片上的定时器1,也就是TIM1,这是个高级定时器. 首先,咱们看一下STM8S103F3P6上有几个定时器,打开 ...

  7. STM8S定时器操作

    转载:https://www.cnblogs.com/zhenghaoyu/p/10704702.html 综述 STM8S提供三种类型的 TIM 定时器:高级控制型(TIM1).通用型(TIM2/T ...

  8. STM32定时器学习---基本定时器

    STM32F1系列的产品,除了互联型产品外,工位8个定时器  TIM6.TIM7:基本定时器  TIM2/3/4/5:通用定时器  TIM1.TIM8:高级定时器 三种定时器的区别:  基本定时器:  ...

  9. STM32学习及应用笔记一:SysTick定时器学习及应用

     这几年一直使用STM32的MCU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过.最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下. 1.SysTick ...

最新文章

  1. android上传文件php,PHP编写安卓文件上传接口
  2. 介绍几款好用的Web开发管理工具
  3. 1、Hive原理及查询优化
  4. 市面上有哪几种门_实木门、原木门、模压门,各有门道不怕坑!
  5. POJ 1236 Network of Schools(强连通 Tarjan+缩点)
  6. markdown字体颜色_Markdown转微信公众号格式
  7. Tomcat Session Clustering
  8. 我的精神家园——陈皓(@左耳朵耗子)专访
  9. excel 去掉公式保留数值的方法
  10. 成功真正需要什么:情商德商及体商 别高估智商
  11. “微肥”还是“歪fai”
  12. Struts2 内部是如何工作的
  13. 解读Tensor张量的维数
  14. 【应用推荐】如何选择适合自己的笔记应用?附热门笔记应用上手总结
  15. 计算机及应用可以评职称么,可以跨专业评职称吗?
  16. iframe框架内嵌vue项目:Blocked a frame with origin http://xxxx from accessing a cross-origin iframe.解决办法
  17. 经纬度坐标转换到平面坐标
  18. 201310湛湛蓝天下的香山
  19. HDFS心跳机制--判断DN失联部分的源码解析
  20. Maven工程Missing artifact 解决方法

热门文章

  1. 德邦快递怎么根据单号批量查询物流信息
  2. python人脸口罩识别训练模型_【每天进步一点点】基于ModelArts,跑通口罩检测案例(Python版本)——模型训练与转化部分...
  3. JS 获取标签属性值的方法
  4. 无家可归的人和他的黑莓
  5. win10关闭升级win11
  6. Python爬虫实战(一):翻页爬取数据存入SqlServer
  7. word中图片为嵌入式格式时显示不全_word嵌入图片显示不全怎么办-word嵌入图片显示不全的解决方法 - 河东软件园...
  8. 余压控制系统如何选用压力传感器
  9. 利用BP网络实现非线性函数映射(基于matlab工具箱)
  10. 防火墙NAT映射-端口回流-从零开始学RouterOS系列06