STM8中的定时器1 是一个高级定时器,为什么说它是个高级定时器呢?因为它的功能比较多,其中就有一个是输出PWM的功能。我们可以直接掉用STM8官方的库函数来实现它的功能。

以上就是STM8定时器1的功能。我们这里只说 第三点 产生输出波形中的PWM功能。

和PWM相关的两个寄存器:

一个是TIM1_ARR负责PWM的频率,TIM1_CRRi负责输出PWM的占空比

定时器1的输出通道一共7个,通过STM8S005的管脚图上可以看到有CH1/CH2/CH3/CH4/CH1N/CH2N/CH3,也就是说PWM可以从芯片的7个管脚输出。

使用IAR软件,直接调用STM官方库定时器1PWM函数可以实现功能

#define CCR1_Val  ((uint16_t)2047)
#define CCR2_Val  ((uint16_t)1535)
#define CCR3_Val  ((uint16_t)1023)
#define CCR4_Val  ((uint16_t)511)

static void TIM1_Config(void);

void main(void)
{
  /* TIM1 configuration -----------------------------------------*/
  TIM1_Config();
  while (1)
  {
  
   
  
  } 
}

static void TIM1_Config(void)
{

TIM1_DeInit();

TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 1040, 0);  TIM1_OC2Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, CCR4_Val,TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET,  TIM1_OCNIDLESTATE_RESET);

TIM1_Cmd(ENABLE);
 TIM1_CtrlPWMOutputs(ENABLE);

}

编译后下载到STM8S005里面

上面是定时器1的配置。

首先是定时器1的初始化函数

TIM1_DeInit();

我们打开看下它写的什么内容

void TIM1_DeInit(void)
{
  TIM1->CR1  = TIM1_CR1_RESET_VALUE;// 
  TIM1->CR2  = TIM1_CR2_RESET_VALUE;
  TIM1->SMCR = TIM1_SMCR_RESET_VALUE;
  TIM1->ETR  = TIM1_ETR_RESET_VALUE;
  TIM1->IER  = TIM1_IER_RESET_VALUE;
  TIM1->SR2  = TIM1_SR2_RESET_VALUE;
  /* Disable channels */
  TIM1->CCER1 = TIM1_CCER1_RESET_VALUE;
  TIM1->CCER2 = TIM1_CCER2_RESET_VALUE;
  /* Configure channels as inputs: it is necessary if lock level is equal to 2 or 3 */
  TIM1->CCMR1 = 0x01;
  TIM1->CCMR2 = 0x01;
  TIM1->CCMR3 = 0x01;
  TIM1->CCMR4 = 0x01;
  /* Then reset channel registers: it also works if lock level is equal to 2 or 3 */
  TIM1->CCER1 = TIM1_CCER1_RESET_VALUE;
  TIM1->CCER2 = TIM1_CCER2_RESET_VALUE;
  TIM1->CCMR1 = TIM1_CCMR1_RESET_VALUE;
  TIM1->CCMR2 = TIM1_CCMR2_RESET_VALUE;
  TIM1->CCMR3 = TIM1_CCMR3_RESET_VALUE;
  TIM1->CCMR4 = TIM1_CCMR4_RESET_VALUE;
  TIM1->CNTRH = TIM1_CNTRH_RESET_VALUE;
  TIM1->CNTRL = TIM1_CNTRL_RESET_VALUE;
  TIM1->PSCRH = TIM1_PSCRH_RESET_VALUE;
  TIM1->PSCRL = TIM1_PSCRL_RESET_VALUE;
  TIM1->ARRH  = TIM1_ARRH_RESET_VALUE;
  TIM1->ARRL  = TIM1_ARRL_RESET_VALUE;
  TIM1->CCR1H = TIM1_CCR1H_RESET_VALUE;
  TIM1->CCR1L = TIM1_CCR1L_RESET_VALUE;
  TIM1->CCR2H = TIM1_CCR2H_RESET_VALUE;
  TIM1->CCR2L = TIM1_CCR2L_RESET_VALUE;
  TIM1->CCR3H = TIM1_CCR3H_RESET_VALUE;
  TIM1->CCR3L = TIM1_CCR3L_RESET_VALUE;
  TIM1->CCR4H = TIM1_CCR4H_RESET_VALUE;
  TIM1->CCR4L = TIM1_CCR4L_RESET_VALUE;
  TIM1->OISR  = TIM1_OISR_RESET_VALUE;
  TIM1->EGR   = 0x01; /* TIM1_EGR_UG */
  TIM1->DTR   = TIM1_DTR_RESET_VALUE;
  TIM1->BKR   = TIM1_BKR_RESET_VALUE;
  TIM1->RCR   = TIM1_RCR_RESET_VALUE;
  TIM1->SR1   = TIM1_SR1_RESET_VALUE;
}

STM8S005 TIM1定时器PWM应用相关推荐

  1. STM32定时器间的同步 主TIM1产生PWM 从TIM4精确控制TIM1 PWM脉冲数量

    STM32 定时器间的同步 主TIM1产生PWM 从TIM4精确控制TIM1 PWM脉冲数量 文章目录 STM32 定时器间的同步 主TIM1产生PWM 从TIM4精确控制TIM1 PWM脉冲数量 编 ...

  2. 高级定时器TIM1输出PWM波

    高级定时器(TIM1和TIM8)相较于通用定时器,它的函数配置更多,一个都不能少,否则输出不了PWM波,所以在此写下通用定时器和高级定时器PWM波配置的区别,以记录问题. 通用定时器TIM3通道1配置 ...

  3. STM32标准库函数之 TIM1定时器产生PWM波

    /* 函数功能:定时器1通道1 4产生PWM波 函数参数:无 函数返回值:无 函数描述:无 */ void Dingshiqi1_PWM_Init(void) {TIM_TimeBaseInitTyp ...

  4. 【WB32库开发】第10章 TIM1高级定时器——PWM互补输出

    在上一章的输出多路PWM的基础上,本章主要讲述如何配置WB32上的高级定时器TIM1完成PWM互补输出. 对PWM互补输出的概括放到10.3节中,请大家先跟随10.1节了解PWM互补输出如何配置,再结 ...

  5. STM32-通用定时器-PWM输出

    1  通用定时器PWM概述 1.1 STM32定时器输出通道引脚 这里以TIM3为例来讲解.STM32的通用定时器分为TIM2.TIM3.TIM4.TIM5,而每个定时器都有独立的4个通道可以用来作为 ...

  6. stm32+定时器PWM波+电机驱动+直流电机

    利用stm32单片机控制直流电机. 硬件部分:stm32f103c8t6.TB6612电机驱动模块.直流减速电机 首先搞明白原理.例如一个12v的直流电机,在其两端接上12v的电压,电机会满额转动,转 ...

  7. STM32F429第二十篇之高级定时器——PWM(OSSI,OSSR)

    文章目录 前言 高级定时器 PWM模式 互补通道与刹车 重要寄存器 前言 从本文开始,介绍F429的高级时钟特性.本文主要介绍高级时钟的PWM功能的应用.关于PWM,本文重点介绍实现带有断路功能的双通 ...

  8. STM32F103C8 TIM1 CHN PWM输出代码

    STM32F103高级定时器TIM1输出PWM波程序 /** 配置PB13输出,即全使能TIM1_CH1N通道,禁用TIM1_CH1通道,禁用更新中断* 其它参数看着修改*/ void Timer1I ...

  9. c语言tim1-smcr是什么意思,【整理】STM8使用TIM1测量PWM波 | 勤奋的小青蛙

    一基本TIM1测量PWM波形原理 根据上图所示测量PWM的基本思想如下: 每个上升沿开始计数,监测到下降沿时记录下当前值为高电平时间,再检测到一个下降沿记录下当前值为周期,同时清零计数器开始测量下个周 ...

最新文章

  1. mysql 去掉日期.0_简单介绍MySQL数据库中日期中包含零值的问题
  2. Swift3.0语言教程使用编码创建和初始化字符串
  3. 打包成单独的HTML文件,【WEBPACK】分离css单独打包
  4. 学生计算机屏幕坏了怎么办,如果计算机显示器的屏幕坏了怎么办?
  5. C#中用HttpWebRequest/HttpWebResponse来发送/接收数据
  6. python中lt方法_Python的富比较方法__lt__、__gt__之间的关联关系分析
  7. CentOS---网络配置详解
  8. vue系列(1)安装vue
  9. VS2013 工具包修复记录
  10. mini usb 接口定义 5针usb接口定义图
  11. 基于simulink的模糊PID控制器设计与实现
  12. 安卓渗透测试工具——drozer安装使用教程
  13. 三种循环语句的详解和使用(for,while,do-while)
  14. 计算机结构体系:系统CPI计算例题(1.5)
  15. YALMIP建模+CPLEX求解,让优化问题更简单
  16. Intellij中格式化mapper.xml整齐
  17. Excel手机号如何查询实名认证?
  18. web 移动端开发基础
  19. 嵌入式硬件构件与底层驱动构件基本规范
  20. 第一话:今日播种,来日长成一棵Linux参天大树

热门文章

  1. deap遗传算法 tirads代码解读
  2. 普洱茶为什么是357克,普洱茶357克的由来
  3. 百分点10周年乔迁新址 数据智能服务更上一层楼
  4. ZooKeeper之zoo.cfg配置
  5. Pytorch线性模型初体验
  6. MagicDraw UML英文企业版12.5的中文字符显示问题
  7. WebSocket 托盘服务 NotifyIcon 通知栏 Windows Forms
  8. 【已解决】Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Mav
  9. DirectShow介绍和使用
  10. 尚硅谷大数据技术Spark教程-笔记02【SparkCore(核心编程,map、mapPartitions、mapPartitionsWithIndex、flatMap、glom、groupBy)】