STM8S的TIM1 PWM设置(寄存器版本)

2023-12-17 09:32

本文主要是介绍STM8S的TIM1 PWM设置(寄存器版本),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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      640
void 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设置(寄存器版本)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/503884

相关文章

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

SpringBoot项目引入token设置方式

《SpringBoot项目引入token设置方式》本文详细介绍了JWT(JSONWebToken)的基本概念、结构、应用场景以及工作原理,通过动手实践,展示了如何在SpringBoot项目中实现JWT... 目录一. 先了解熟悉JWT(jsON Web Token)1. JSON Web Token是什么鬼