STM8S105系列单片机的PWM输出配置
2017-08-25 13:24
489 查看
STM8S105xx的定时器资源:
(1)2个16位通用定时器(TIM2、TIM3),带有2+3个CAPCOM通道(IC、OC或PWM);
(2)高级控制定时器(TIM1):16位,4个CAPCOM通道(捕获/比较通道),3个互补输出,死区插入和灵活的同步;
(3)带有8位预分频器的8位基本定时器(TIM4);
(4)自动唤醒定时器;
(5)2个看门狗定时器:窗口看门狗和独立看门狗。
使用高级控制定时器和普通通用定时器的PWM输出功能在初始化配置上有差异,下面做简单分析:
TIM1——16位高级控制定时器
带有16位预分频的16位递增、递减和双向自动重装载计数器
TIM2、TIM3——16位通用定时器
16位向上计数和自动装载计数器
15位预分频器,分频系数可调整为1~32768之间的2次幂数值
TIM4——8位基本定时器
8位自动装载可调整的预分频器,比例可选为1~128之间的2次幂
配置TIM1_CH1的PWM输出功能:
void Time1_Init()
{
CLK->CKDIVR=0x00;
/*
* 这里设置TIM2的计数频率为 16M/1600=10000Hz
*/
TIM1_TimeBaseInit(1599,TIM1_COUNTERMODE_UP,2000,0); //分频1600,向上计数,TIM1_ARR=1000,重复计数器为0
/*OC1初始化:PWM1模式
输出使能
互补输出不使能
CCR1=1000,占空比为50%
输出有效极性为高
互补输出有效极性为高(无作用)
空闲时输出高
空闲时互补输出高(无作用)
*/
TIM1_OC1Init(TIM1_OCMODE_PWM1,
TIM1_OUTPUTSTATE_ENABLE,
TIM1_OUTPUTNSTATE_DISABLE,
1000,
TIM1_OCPOLARITY_HIGH,
TIM1_OCNPOLARITY_HIGH,
TIM1_OCIDLESTATE_SET,
TIM1_OCNIDLESTATE_SET);
TIM1_OC1PreloadConfig(ENABLE);
TIM1_CtrlPWMOutputs(ENABLE); //PWM输出使能
TIM1_Cmd(ENABLE); //定时器开始计数
}
配置TIM2_CH1的PWM输出功能:
void TIMER2_PWMInit(unsigned short timebase,unsigned short t)
{
TIM2_DeInit();
/*
* TIM2 Frequency = TIM2 counter clock/(ARR + 1)
* 这里设置TIM2的计数频率为 16M/32/(timebase+1)=1K
*/
TIM2_TimeBaseInit(TIM2_PRESCALER_32, timebase);
/*
* PWM1 Mode configuration: Channel1
* TIM2 Channel1 duty cycle = [TIM2_CCR1/(TIM2_ARR + 1)] * 100 = 50%
* TIM2 Channel2 duty cycle = [TIM2_CCR2/(TIM2_ARR + 1)] * 100 = 50%
*/
/* 测试通道1 */
TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, t, TIM2_OCPOLARITY_HIGH);
TIM2_OC1PreloadConfig(ENABLE);
TIM2_Cmd(ENABLE);
}
(1)2个16位通用定时器(TIM2、TIM3),带有2+3个CAPCOM通道(IC、OC或PWM);
(2)高级控制定时器(TIM1):16位,4个CAPCOM通道(捕获/比较通道),3个互补输出,死区插入和灵活的同步;
(3)带有8位预分频器的8位基本定时器(TIM4);
(4)自动唤醒定时器;
(5)2个看门狗定时器:窗口看门狗和独立看门狗。
使用高级控制定时器和普通通用定时器的PWM输出功能在初始化配置上有差异,下面做简单分析:
TIM1——16位高级控制定时器
带有16位预分频的16位递增、递减和双向自动重装载计数器
TIM2、TIM3——16位通用定时器
16位向上计数和自动装载计数器
15位预分频器,分频系数可调整为1~32768之间的2次幂数值
TIM4——8位基本定时器
8位自动装载可调整的预分频器,比例可选为1~128之间的2次幂
配置TIM1_CH1的PWM输出功能:
void Time1_Init()
{
CLK->CKDIVR=0x00;
/*
* 这里设置TIM2的计数频率为 16M/1600=10000Hz
*/
TIM1_TimeBaseInit(1599,TIM1_COUNTERMODE_UP,2000,0); //分频1600,向上计数,TIM1_ARR=1000,重复计数器为0
/*OC1初始化:PWM1模式
输出使能
互补输出不使能
CCR1=1000,占空比为50%
输出有效极性为高
互补输出有效极性为高(无作用)
空闲时输出高
空闲时互补输出高(无作用)
*/
TIM1_OC1Init(TIM1_OCMODE_PWM1,
TIM1_OUTPUTSTATE_ENABLE,
TIM1_OUTPUTNSTATE_DISABLE,
1000,
TIM1_OCPOLARITY_HIGH,
TIM1_OCNPOLARITY_HIGH,
TIM1_OCIDLESTATE_SET,
TIM1_OCNIDLESTATE_SET);
TIM1_OC1PreloadConfig(ENABLE);
TIM1_CtrlPWMOutputs(ENABLE); //PWM输出使能
TIM1_Cmd(ENABLE); //定时器开始计数
}
配置TIM2_CH1的PWM输出功能:
void TIMER2_PWMInit(unsigned short timebase,unsigned short t)
{
TIM2_DeInit();
/*
* TIM2 Frequency = TIM2 counter clock/(ARR + 1)
* 这里设置TIM2的计数频率为 16M/32/(timebase+1)=1K
*/
TIM2_TimeBaseInit(TIM2_PRESCALER_32, timebase);
/*
* PWM1 Mode configuration: Channel1
* TIM2 Channel1 duty cycle = [TIM2_CCR1/(TIM2_ARR + 1)] * 100 = 50%
* TIM2 Channel2 duty cycle = [TIM2_CCR2/(TIM2_ARR + 1)] * 100 = 50%
*/
/* 测试通道1 */
TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, t, TIM2_OCPOLARITY_HIGH);
TIM2_OC1PreloadConfig(ENABLE);
TIM2_Cmd(ENABLE);
}
相关文章推荐
- 通过IO口控制STC15F2K60S2系列单片机输出pwm
- 瑞萨单片机教程(2013) -R8C系列 输入输出端口配置
- STM8S105系列单片机管脚复用配置(选项字节的配置)
- STM8L151系列单片机PWM配置时注意事项
- 51单片机按键控制输出pwm的占空比
- STM8L15x系列单片机独立看门狗配置
- STC15系列单片机-PWM模块
- 郑州-杰瑞鼠 / STM32定时器的PWM输出配置(标准库)
- Spring Boot系列教程六:日志输出配置log4j2
- 输出使能详解STM32的PWM输出——寄存器配置六步曲!
- STM32自学系列——2.定时器TIM和PWM的输出
- C51单片机中断,寄存器,定时器,PWM原理,配置及使用
- 5、SONIX单片机TC0、TC1的pwm输出
- 基于stm32单片机的可调节pwm输出
- Nginx系列(十七.)nginx压缩输出配置
- 怎么用STM32配置产生PWM(一个定时器用输出比较方式产生不同频率的PWM)
- Spring Boot系列教程六:日志输出配置log4j2
- STM32单片机学习(6) PWM输出实验
- C51单片机中断,寄存器,定时器,PWM原理,配置及使用
- logback:输出日志到文件(滚动)&& Spring Boot干货系列:(七)默认日志logback配置解析(转载)