STM8S103定时器1,定时器2多路PWM波输出

发布者:神秘行者最新更新时间:2020-01-28 来源: eefocus关键字:STM8S103  定时器1  定时器2  PWM波输出 手机看文章 扫描二维码
随时随地手机看文章

一、时钟配置


1、STM8S的4种时钟源可用做主时钟:

● 1-24MHz高速外部晶体振荡器(HSE)

● 最大24MHz高速外部时钟信号(HSE user-ext)

● 16MHz高速内部RC振荡器(HSI)

● 128KHz低速内部RC(LSI)

STM8默认时钟源为16MHz高速内部RC振荡器(HSI)

对 CLK_CKDIVR设置可以设置时钟为HSI的分频


如 CLK_CKDIVR|= (uint8_t)0x00;/*设置时钟为内部16M高速时钟*/


2分频为 CLK_CKDIVR=0x08;4分频为 CLK_CKDIVR=0x10;8分频为 CLK_CKDIVR=0x18;


二、定时器1设置


1、定时器1CH3输出PWM


代码如:


     CLK_PCKENR1 |= 0x80;//开启定时器1外设时钟 

     TIM1_EGR = 0x01;   //重新初始化TIM1 

 

    TIM1_CR1 = 0x00;   //B7(0)可以直接写入 B65(00)边缘对齐模式B4(0)向上计数B3(0)计数器不停止发生更新事件

    TIM1_RCR = 0x00;  

    

      //设定预分频为,16分频 16M

    TIM1_PSCRH =0x00;  //PWM的时钟 影响周期

    TIM1_PSCRL =0x08;  //PWM的时钟 影响周期

    

    TIM1_ARRH = 0x01;     //设定重装载值

    TIM1_ARRL = 0x40;  //PWM的周期 

    

    TIM1_CCER2 = 0x03; //开启CH3,高电平有效   

    TIM1_CCMR3 = 0x68; //PWM模式1,CC1配置入输出

    TIM1_CCR3H = 0x00;

    TIM1_CCR3L = 0x40;  // 占空比值

   // TIM1_DTR = 0x50;        // Deadtime generator

    TIM1_BKR |= 0x80;       //刹车

    TIM1_CR1 |= 0x01; //使能TIM1计数器


2、定时器1CH1输出PWM


代码如:


   TIM1_EGR = 0x01;   //重新初始化TIM1 

    //TIM1_CR1 = 0x00;   //B7(0)可以直接写入 B65(00)边缘对齐模式B4(0)向上计数B3(0)计数器不停止发生更新事件

   // TIM1_RCR = 0x00;  

      //设定预分频为,16分频 16M

    TIM1_PSCRH =0x00;  //PWM的时钟 影响周期

    TIM1_PSCRL =0x00;  //PWM的时钟 影响周期

    

    TIM1_ARRH = 0x00;     //设定重装载值

    TIM1_ARRL = 0x64;  //PWM的周期 100,f=20K,CLK=20*10=2M

 

    //CH1

    TIM1_CCER1 = 0x01; //CC2ER1开启CH1  

    TIM1_CCMR1 = 0x68; //PWM模式1,CC1配置入输出

    TIM1_CCR1H = 0x00;

    TIM1_CCR1L = 0x40;  // 占空比值

    

     TIM1_OISR &= ~0x03;

   // TIM1_DTR = 0x50;        // Deadtime generator

    TIM1_BKR |= 0x80;       //刹车

    TIM1_CR1 |= 0x01; //使能TIM1计数器


CH1要产生PWM,GPIO要配为推挽输出模式


    PC_DDR|=0xff;//输出

    PC_CR1|=0xff;//推挽

    PC_CR2|=0xf0;//速度


其次,C6引脚要复用为定时器1的CH1通道

先DEBUG AND RUNINIG,之后会出现ST-LINK选项,点击后配置option bytes,按图配置,Alternate即为1.

3、定时器1CH1与CH3输出互补的PWM


代码如:


  CLK_PCKENR1|= 0x80;//开启定时器1外设时钟

   TIM1_EGR = 0x01;   //重新初始化TIM1 

   TIM1_CR1 = 0x00;   //B7(0)可以直接写入 B65(00)边缘对齐模式B4(0)向上计数B3(0)计数器不停止发生更新事件

  TIM1_RCR = 0x00;  

  //PWM1,预装载

  TIM1_CCMR1=0x68;

 //

  TIM1_PSCRH =0x00;  //PWM的时钟 影响周期

  TIM1_PSCRL =0x00;  //PWM的时钟 影响周期

  TIM1_ARRH = 0x07;     //设定重装载值

  TIM1_ARRL = 0xD0;  //PWM的周期 07D0=2000,CLK=2M,f=1Kh


  TIM1_CCER1=0x05; //CH1互补输出,高电平有效 

  TIM1_CCR1H = 0x03;

  TIM1_CCR1L = 0x00;  // 占空比值


  TIM1_CR1 |= 0x01; //使能TIM1计数器

  TIM1_DTR = 0x50;        // Deadtime generator

  

  TIM1_BKR |= 0x80;       //刹车


注意CH3的C3引脚也要复用为CH1的CH1N通道。


关键字:STM8S103  定时器1  定时器2  PWM波输出 引用地址:STM8S103定时器1,定时器2多路PWM波输出

上一篇:STM8S103F3P6锁死问题及解锁
下一篇:STM8S103F3P STVD+COSMIC开发环境搭建

推荐阅读最新更新时间:2024-11-07 12:25

定时器定时1ms子程序
定时器定时1ms子程序: void Timer0IntRoute( void ) interrupt 1 { TL0 = -1000; //由于TL0只有8bits,所以将(-1000)低8位赋给TL0 TH0 = (-1000) 8; //取(-1000)的高8位赋给TH0,重新定时1ms ; } void Timer0Init( void ) { TMOD=(TMOD & 0xf0) | 0x01; //初始化,定时器T0,工作方式1 //定时1ms TH0 = (-1000) 8; TL0 = -1000; TR0 = 1; //允许T0开始计数 ET0 = 1; //允许T0计数溢出
[单片机]
STM32F103C8T6 实现舵机与电机的控制 2定时器输出不同频率的PWM
智能小家居------舵机开门,电机做风扇 or 拉窗帘、呼吸灯做提示,小OLED屏幕显示当前状态。 直接上代码 背景:我觉得我看了那么多教程了,然而只会玩单个东西,串起来就不太懂。 本项目的代码部分实现用到了2个时钟,TIM2 和 TIM3。 经历的问题:原本我是想只用一个时钟,不同通道来实现PWM的输出,但是我发现 我如果把TIM_TimeBaseInitStructure.TIM_Period = ARR ; //ARR 自动重装器的值 ARR = 20000 -1 时,只能驱动舵机,不能驱动电机。 ARR = 100 -1 时,只能驱动电机,不能驱动舵机。 后来发现: SG90舵机接收的PWM信号频率为50HZ,T=
[单片机]
STM32F103C8T6 实现舵机与电机的控制 <font color='red'>2</font>个<font color='red'>定时器</font><font color='red'>输出</font>不同频率的<font color='red'>PWM</font>
AVR定时器1的普通模式设置
如何设置定时器1的寄存器呢?我们仅要简单的随着以下流程 1.对T/C1 控制寄存器B TCCR1B,设置分频或者无分频。TCCR1B|=BIT(2); 2.对TCNT1H 和TCNT1L 赋初值。 3.对T/C1 中断屏蔽寄存器TIMSK,使能定时器1 溢出中断。TIMSK|=0x04; 4.对全局中断使能使能。SREG|=BIT(7); 5.之后再编写相关的中断函数即可。 那么现在出现了一系列的问题?分频有什么用?又如何对TCNT1 赋初值?照以下的公式计算:要赋给TCNT1 的初值= ( 65536 - ( ( 晶振频率/分频) * 定时时间) ) 搞了半天,就是分频置初值,使能中断、开总断。与51极相似! 定时器
[单片机]
STM32CubeIDE下配置STM32F103输出带死区的互补PWM
STM32F103的TIM1和TIM8是高级定时器,可以产生嵌入死区时间的互补PWM波,使用STM32CubeIDE完成相关配置,可以直接生成代码,输出带死区的PWM波。 根据项目需要,单片机需输出频率为36kHz,占空比50%,死区时间500ns的互补PWM波,下面使用STM32CubeIDE完成相关配置。 1、选择时钟源,这里选择外部石英晶体作为HSE时钟源 2、配置系统时钟为72MHz,高级定时器TIM1和TIM8时钟由APB2提供,这里APB2等于系统时钟72MHz 3、这里使用TIM1来产生互补PWM波,TIM1复用功能如下表所示: 我们使用单片机的PA7和PA8引脚作为PWM互补输出的两个通道,在S
[单片机]
STM32CubeIDE下配置STM32F103<font color='red'>输出</font>带死区的互补<font color='red'>PWM</font><font color='red'>波</font>
1. avr定时器/计数器0 --TC0 --CTC模式输出PWM
CTC:比较匹配时清零计数器模式,。当计数器TCNT0的数值等于比较寄存器OCR0时计数器TCNT0自动清零。OCR0定义了计数器的最大(TOP)值,这个模式使得用户可以很容易地控制比较匹配输出的频率。T/C0的比较输出脚为OC0(PB3),PB口的第三脚,在此模式下可以在OC0上输出PWM控制外部设备。 例如:在OC0脚上输出20HZ的方波信号,方波的周期时间为T=1/20HZ=0.05秒=50ms,半个周期为25ms,系统采用8MHZ晶振,1024分频,时钟计数频率为8000000/1024=7812.5HZ,每个时钟脉冲时间为1/7812.5=0.128ms, 定时25ms的计数值为25ms/0.128ms=195,将195
[单片机]
STM8定时器1的四种触发同步说明
这里说明下,我这边的最小系统版的芯片型号是105K系列的,定时器部分没有TIM5TIM6,只有TIM4,所以不讲解TIM1与TIM5/6的同步,想要了解这部分可以看官方手册。 TIM1的计数器使用三种模式与外部的触发信号同步:标准触发模式、复位触发模式和门控触发模式。 标准触发模式: 说白了就是使用外部信号触发内部计数器启动,然而如何配置呢,看手册: 下面根据官方给出的步骤配置寄存器: void Tim1_trigger_standard_mode_Init(void){//tim1标准触发模式初始化 PC_DDR_DDR2 =0;//输入 //PD_CR1_C14 =0;//浮空输入 PC_CR1_
[单片机]
STM8<font color='red'>定时器</font><font color='red'>1</font>的四种触发同步说明
8051单片机串口波特率和定时器1的初值计算
在模式0和模式2下,串口波特率固定,模式0为Fosc/12。模式2为Fosc/32或Fosc/64,具体由PCON寄存器的SMOD位决定。 在模式1和模式3下,波特率是一个可变值,波特率可以由定时器1产生(8052可以由定时2产生),那么波特率到底为多少呢?波特率由定时器1的溢出率来决定: Baud Rate = (2SMOD/32)*(Timer 1 Overflow Rate) 注意:2SMOD这里的SMOD是指数,SMOD为波特率双倍波特率位,该位在PCON寄存器中。 当使用timer 1作为波特率产生器时,通常需要将timer 1配置成8位自动重装的工作模式下,同时还要禁止timer 1中断,那么timer 1的溢出率是怎
[单片机]
STM8S103之ADC
如何快速了解ADC,查看Reference manual中ADC registers章节,初步了解到ADC ADC buffer register和ADC data register Analog Watchdog + Analog Watchdog High Voltage threshold+ EOC,完成采样后可以触发中断 Continuous conversion和single conversion,Scan Mode External event触发? 错误状态Overrun Flag ADC schmitt trigger 左右对齐方式 ADC时钟 然后进行通关,理解ADC这8个方面的知识
[单片机]
<font color='red'>STM8S103</font>之ADC
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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