STM8S的TIM1 PWM设置(寄存器版本)
来源:互联网 发布:mac方正字体免费下载 编辑:程序博客网 时间:2024/05/20 06:39
1. 概述
脉冲宽度调制(PWM)模式可以产生一个由TIM1_ARR寄存器确定频率、由TIM1_CCRi寄存器确定占空比的信号。
2. 芯片资料
参考STM8S datasheet如下资料:
在TIM1_CCMRi寄存器中的OCiM位写入’110’(PWM模式1)或’111’(PWM模式2),能够独立地设置每个OCi输出通道产生一路PWM。必须设置IM1_CCMRi寄存器的OCiPE位使能相应的预装载寄存器,也可以设置TIM1_CR1寄存器的ARPE位使能自动重装载的预装载寄存器(在向上计数模式或中央对称模式中)。
由于仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存器,因此在计数器开始计数之前,必须通过设置TIM1_EGR寄存器的UG位来初始化所有的寄存器。
OCi的极性可以通过软件在TIM1_CCERi寄存器中的CCiP位设置,它可以设置为高电平有效或低电平有效。 OCi的输出使能通过(TIM1_CCERi和TIM1_BKR寄存器中)CCiE、 MOE、 OISi和OSSR位和OSSI位的组合来控制。详见TIM1_CCERi寄存器的描述。
在PWM模式(模式1或模式2)下, TIM1_CNT和TIM1_CCRi始终在进行比较, (依据计数器的计数方向)以确定是否符合TIM1_CCRi≤TIM1_CNT或者TIM1_CNT≤TIM1_CCRi。
根据TIM1_CR1寄存器中CMS位域的状态,定时器能够产生边沿对齐的PWM信号或中央对齐的PWM信号。
参考上图可以确定需要设置的寄存器。
3. 应用
在项目中需要使用TIM1_CH3N
作为PWM输出IO,所以暂以这个通道为例,设置PWM输出。
#define BLACKLIGHT_PWM_FRQ 640void Blacklight_Init(void){ CLK->PCKENR1 |= 0x80; //TIM1->EGR=0x01;//重新初始化TIM1 //TIM1->EGR|=0x20;//重新初始化TIM1 //初始化自动重装载寄存器,确定PWM 频率(16M的TIM1 CLK) TIM1->ARRH = (u8)(BLACKLIGHT_PWM_FRQ >> 8); TIM1->ARRL = (u8)(BLACKLIGHT_PWM_FRQ & 0xff); //初始化比较寄存器,决定PWM 方波的占空比 , 暂时设置50%的占空比。 TIM1->CCR3H = (u8)((BLACKLIGHT_PWM_FRQ/2) >> 8); TIM1->CCR3L = (u8)((BLACKLIGHT_PWM_FRQ/2) & 0xff); //初始化比较模式寄存器 TIM1->CCMR3 = 0x68; //初始化使能寄存器 TIM1->CCER2 = 0x04; //初始化刹车寄存器 TIM1->BKR |= 0x80; // 启动计数 TIM1->CR1 |= 0x01; }
注意: STM8S在烧录前,需要将PB2(TIM1_CH3N)
的功能重新映射,通过STVP修改OPTION BYTE
页中的AFR5
项来完成。
- STM8S的TIM1 PWM设置(寄存器版本)
- STM8S---TIM2产生PWM与TIM1定时器周期中断的时钟问题
- STM8S学习03——寄存器版本的一些程序
- s3c2440的pwm输出寄存器设置分析
- STM8S TIM1时钟分频
- STM8S TIM1库函数应用
- STM32 TIM1的PWM没有输出
- stm32 基于TIM1定时器的PWM输出
- DM8168 PWM驱动(寄存器设置)
- STM8S的按键PWM调光灯历程
- STM8S TIM1/TIM2 初始化函数
- STM8S---定时器产生PWM(TIM2)
- STM8S PWM应用 用于设置红外38KHZ 载波
- STM8 tim1 ch1 PWM输出
- STM32 PWM输出总结 TIM1
- STM32F407 关于TIM1输出PWM
- STM8S的can波特率设置
- STM8S和STM32的IWDG(Independent watchdog)设置
- yii内简单的session操作
- Struts2请求处理流程及源码分析
- PL/SQL如何保存定制界面
- 学hibernate的地方
- 反向代理理解
- STM8S的TIM1 PWM设置(寄存器版本)
- java设计模式之策略模式
- Windows核心编程笔记(十八) SEH结构化异常 一
- 1分钟教你实现iOS国际化
- IO流_字节流复制文本文件案例3
- Hibernate三种状态的区分,以及save,update,saveOrUpd
- 动态存储区、静态存储区、堆和栈的区别
- 初探Lambda表达式-Java多核编程【0】从外部迭代到内部迭代
- Windows下安装redis服务、搭建redis主从复制