历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2020年01月30日 | 【STM8L】STM8L之timer2产生PWM

2020-01-30 来源:eefocus

一、简介


本文介绍STM8L系列如何使用timer2产生38K频率的PWM。


其中,本文使用的是timer2的第1通道(PB0)。


二、实验平台


编译软件:IAR for STM8 1.42.2


硬件平台:stm8l101f3p6开发板


仿真器:ST-LINK


库函数版本:STM8L_STMTouch_Lib_V1.1.0


三、版权声明


四、实验步骤


1、工程中添加自己写的定时器2的驱动


1)写一个驱动GUA_Timer2_PWM.c (存放在工程的USER文件夹中)


//******************************************************************************                          

//name:             GUA_Timer2_PWM.c             

//introduce:        定时器2的PWM驱动      

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.01    

//******************************************************************************  

#include "stm8l10x.h"

#include "GUA_Timer2_PWM.h"

 

/*********************宏定义************************/

#ifndef U8  

typedef unsigned char U8;  

#endif  

 

#ifndef U16  

typedef unsigned short U16;  

#endif  

 

#ifndef U32  

typedef unsigned long U32;  

#endif  

 

//红外引脚宏

#define GUA_TIMER2_PWM_PORT             GPIOB

#define GUA_TIMER2_PWM_PIN              GPIO_Pin_0

#define GUA_TIMER2_PWM_MODE             GPIO_Mode_Out_PP_High_Fast

 

//红外开关宏

#define GUA_TIMER2_PWM_ON               SET     //高电平开

#define GUA_TIMER2_PWM_OFF              RESET   //低电平关

//******************************************************************************        

//name:             GUA_Timer2_PWM_Status        

//introduce:        定时器2的PWM开关    

//parameter:        nGUA_Timer2_PWM_Status: GUA_TIMER2_PWM_STATUS_ON or GUA_TIMER2_PWM_STATUS_OFF      

//return:           none      

//author:           甜甜的大香瓜             

//email:            897503845@qq.com                

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.01                      

//******************************************************************************  

void GUA_Timer2_PWM_Status(U8 nGUA_Timer2_PWM_Status)

{

  //打开PWM

  if(nGUA_Timer2_PWM_Status == GUA_TIMER2_PWM_STATUS_ON)

  {

    TIM2_CtrlPWMOutputs(ENABLE);

    //GPIO_WriteBit(GUA_TIMER2_PWM_OFF, GUA_TIMER2_PWM_PIN, GUA_TIMER2_PWM_ON);       

  }

  //关闭PWM

  else

  {

    TIM2_CtrlPWMOutputs(DISABLE); 

    GPIO_WriteBit(GUA_TIMER2_PWM_PORT, GUA_TIMER2_PWM_PIN, GUA_TIMER2_PWM_OFF);    

  }

}

 

//******************************************************************************        

//name:             GUA_Timer2_PWM_SetDutyCycle        

//introduce:        定时器2的PWM设置占空比    

//parameter:        nGUA_Timer2_PWM_DutyCycle: 0~100为0%~100%      

//return:           none      

//author:           甜甜的大香瓜             

//email:            897503845@qq.com                

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.01                        

//******************************************************************************  

void GUA_Timer2_PWM_SetDutyCycle(U8 nGUA_Timer2_PWM_DutyCycle)

{

  TIM2_SetCompare1(GUA_TIMER2_PWM_FREQUENCY_VALUE*nGUA_Timer2_PWM_DutyCycle/100); 

}

 

//******************************************************************************        

//name:             GUA_Timer2_PWM_Init        

//introduce:        定时器2的PWM初始化     

//parameter:        none       

//return:           none      

//author:           甜甜的大香瓜             

//email:            897503845@qq.com                

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.01                       

//******************************************************************************  

void GUA_Timer2_PWM_Init(void)

{

  //PB0通道IO配置为输出

  GPIO_Init(GUA_TIMER2_PWM_PORT, GUA_TIMER2_PWM_PIN, GUA_TIMER2_PWM_MODE); 

  

  //时钟配置

  CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE);  

 

  //配置

  TIM2_DeInit();                                                                                                //复位

  TIM2_TimeBaseInit(TIM2_Prescaler_1, TIM2_CounterMode_Up, GUA_TIMER2_PWM_FREQUENCY_VALUE);                     //每26us定时重新计数一次,38K      

  TIM2_OC1Init(TIM2_OCMode_PWM2, TIM2_OutputState_Enable, 0, TIM2_OCPolarity_High, TIM2_OCIdleState_Reset);     //先空闲后运行的模式、输出使能、占空比初始化为0、运行时为高、死区时为低

  TIM2_Cmd(ENABLE);                                                                                             //使能定时器2

 

  //关闭PWM

  GUA_Timer2_PWM_Status(GUA_TIMER2_PWM_STATUS_OFF);

}

这里总计数值为26us,占空比暂时初始化为0%。

注意,关闭PWM时需要把IO口置低,否则红外射线会一直发出会导致功耗高。


2)写一个驱动头文件GUA_Timer2_PWM.h(存放在工程的USER文件夹中)


//******************************************************************************                          

//name:             GUA_Timer2_PWM.h          

//introduce:        定时器2的PWM驱动的头文件      

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.01   

//****************************************************************************** 

#ifndef _GUA_TIMER2_PWM_H_

#define _GUA_TIMER2_PWM_H_

 

/*********************宏定义************************/  

//PWM的开关宏

#define GUA_TIMER2_PWM_STATUS_ON                0       //PWM打开

#define GUA_TIMER2_PWM_STATUS_OFF               1       //PWM关闭

 

//PWM的频率值

#define GUA_TIMER2_PWM_FREQUENCY_VALUE          16*26   //26us为一个周期

/*********************外部函数声明************************/ 

void GUA_Timer2_PWM_Status(unsigned char nGUA_Timer2_PWM_Status);

void GUA_Timer2_PWM_SetDutyCycle(unsigned char nGUA_Timer2_PWM_DutyCycle);

void GUA_Timer2_PWM_Init(void);

 

#endif


3)工程中添加GUA_Timer2_PWM.c

4)添加驱动的路径


$PROJ_DIR$..USER   

注意USER文件夹是与“Project”等文件夹同级的自定义文件,用于存放香瓜写的代码。


2、添加库的驱动


1)添加库的驱动文件

3、应用层中调用


1)添加头文件(main.c中)


#include "GUA_Timer2_PWM.h"


2)初始化(main.c的main函数中)

  //定时器2的PWM初始化

  GUA_Timer2_PWM_Init();  


3)测试代码(可以自行放置在不同按键处理代码中)


①开启50%占空比的PWM



  GUA_Timer2_PWM_SetDutyCycle(50);

  GUA_Timer2_PWM_Status(GUA_TIMER2_PWM_STATUS_ON);


②关闭PWM


  GUA_Timer2_PWM_Status(GUA_TIMER2_PWM_STATUS_OFF);


③开启60%占空比的PWM


  GUA_Timer2_PWM_SetDutyCycle(60);

  GUA_Timer2_PWM_Status(GUA_TIMER2_PWM_STATUS_ON);


4、复用IO口为timer2

stm8的复用功能比较特殊,需要手动修改,香瓜在此入坑了两天。


1)点开工程的ST-LINK下的Option Bytes(网上有些资料显示必须在仿真模式下,香瓜实测不一定要在仿真模式下)

2)配置并保存

3)形成.obc的配置文件

4)使工程能够自动加载保存的配置文件

5)rebuild all。


五、实验结果


用逻辑分析仪连接PB0,分别抓取三个测试代码的波形,实验结果如下:


1、开启50%占空比的PWM

可见PB0产生了38.647K的方波,占空比为13/25.875(约为50.2%)。


2、关闭PWM


无产生波形


3、开启60%占空比的PWM

可见PB0产生了38.647K的方波,占空比为15.5/25.875(约为59.9%)。


因此,实验成功。


注:香瓜实测仿真多次,不用重复配置复用功能的步骤。网上大多数是使用STVD产生复用配置,再用其他方式进行下载程序。在量产时本文的步骤能否依然有效,仍有待后续实测。

推荐阅读

史海拾趣

FCI [First Components International]公司的发展小趣事

在电子行业中,FCI(First Components International)公司作为一家知名的连接器和互联系统制造商,其发展历程中确实有许多值得分享的故事。以下是关于FCI公司的五个发展故事:

  1. FCI的气体流量计与传感器技术突破

FCI作为一家全球性的气体流量计、气体和液体流量开关以及液位开关的制造商,其产品广泛应用于各种工业领域。为了满足不断增长的市场需求,FCI投入大量研发资源,成功开发出高精度、高可靠性的气体流量计和传感器。这些产品在化工、能源、环保等多个领域得到了广泛应用,为FCI赢得了良好的市场口碑。随着技术的不断创新和产品质量的持续提升,FCI逐渐成为了行业内的佼佼者。

  1. FCI中国分公司的成立与服务升级

随着中国市场的快速发展,FCI看到了在中国市场发展的巨大潜力。为了更好地服务中国客户,FCI决定在中国成立分公司。分公司的成立,不仅为FCI提供了更贴近本地市场的服务平台,还为其在中国市场的业务拓展提供了有力支持。分公司雇佣了一批在过程仪表和测量控制方面经验丰富的员工,并新增了数条经过认证的高精度流体标定台,以提供专业的服务和技术支持。这一举措显著提升了FCI在中国市场的竞争力和品牌影响力。

  1. FCI的AirMax VS高速背板连接器技术革新

为了满足未来高速数据传输的需求,FCI投入巨资研发新一代的高速背板连接器技术。经过多年的努力,FCI成功开发出了先进的AirMax VS高速背板连接器技术,为未来传输速率达到40Gb/s的设计奠定了基础。这一技术的推出,不仅巩固了FCI在连接器行业的领先地位,还为其在高速数据传输领域的发展打开了新的市场空间。

  1. FCI与航空领域的深度合作

随着航空技术的不断发展,对高精度传感器和流量计的需求也日益增长。FCI凭借其在气体流量计和传感器方面的技术优势,成功打入了航空领域市场。公司与多家知名航空企业建立了深度合作关系,为其提供定制化的产品和解决方案。这些产品在航空器的燃油系统、液压系统以及环境控制系统中发挥着重要作用,为航空安全提供了有力保障。

  1. FCI的全球化战略布局

为了适应全球化的市场趋势,FCI积极拓展其国际业务。公司通过并购、合资等方式,在全球范围内建立了多个生产基地和销售网络。这些举措不仅提高了FCI的生产效率和响应速度,还使其能够更好地服务全球客户。同时,FCI也加大了对新兴市场的投入,通过与当地合作伙伴的紧密合作,成功打入了多个具有潜力的市场领域。

以上五个故事展示了FCI在电子行业发展中的关键里程碑和重大成就。从技术创新到市场拓展,再到全球化布局,FCI始终保持着敏锐的市场洞察力和强大的竞争力,不断推动着电子行业的发展进步。

HEC Inc公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐中不可或缺的重要设备。从广义上讲,任何与电视机连接的网络终端设备均可视为机顶盒,其发展历程涵盖了从模拟频道增补器到数字卫星、地面及有线电视机顶盒的广泛范畴。而从狭义角度看,机顶盒特指那些具备数字处理能力的设备,如IPTV机顶盒、DVB-S卫星机顶盒、DVB-T地面机顶盒及DVB-C有线电视机顶盒等。

机顶盒的核心功能在于接收并转换数字电视信号,使之能在传统或智能电视上播放。它不仅能接收来自有线电缆、卫星天线及宽带网络的信号,还能提供电子节目指南、网页浏览等增值服务。通过机顶盒,用户能够享受到高清乃至4K超高清的电视节目,体验更为细腻的画面和震撼的音效。此外,机顶盒还具备网络交互能力,支持在线购物、观看网络视频、玩游戏等多元化活动,使电视机从单向接收信息的设备转变为智能互动终端。

随着技术的不断进步,机顶盒正朝着高清化、智能化方向发展。未来,机顶盒将不仅限于基本的信号接收与解码功能,还将融入更多智能推荐、语音识别等先进技术,为用户提供更加个性化、便捷的娱乐体验。总之,机顶盒作为连接电视与互联网的桥梁,正以其丰富的功能和广泛的应用场景,不断满足用户日益增长的娱乐需求。

展恒电子(Broadic)公司的发展小趣事

展恒电子始终坚持以品质为核心,严格把控产品质量。在与上海芯北电子科技有限公司的合作中,双方共同保证产品品质的一致性、兼容性和安全性。在合作期间,展恒电子成功向客户供应了数百万片芯片,并得到了客户的高度认可和信任。这种对品质的坚持和追求,使得展恒电子在电子行业中赢得了良好的声誉,也为公司的长期发展奠定了坚实的基础。

这五个故事从不同角度展示了展恒电子(Broadic)在电子行业中的发展历程和成就,体现了其在技术创新、市场拓展、品质保证等方面的实力和努力。通过不断努力和创新,展恒电子已经在电子行业中取得了显著的成果,并将继续为行业的发展贡献自己的力量。

CEVA, Inc公司的发展小趣事

面对不断变化的市场环境和技术挑战,CEVA公司积极应对,抓住机遇。例如,在执行编码标准并降低许可证风险方面,CEVA的DevOps/实时开发团队面临着在更高效地执行编码标准的同时降低许可证相关风险的挑战。公司通过优化开发流程、提升自动化水平等方式,成功应对了这一挑战。同时,CEVA也通过增加站点布局、拓建电商能力、提升产品竞争力等手段,抓住市场机遇,迎接未来。

Esico-Triton公司的发展小趣事

Esico-Triton公司成立于XXXX年,起初是一个小型的电子设备研发团队。当时,创始人[XXXXX]和[XXXXX]看到了电子设备市场的巨大潜力,于是决定合作创办一家公司。他们的初衷是开发一款能够简化工作流程的电子设备。在公司创立初期,资金紧张,研发条件有限,但团队成员凭借着对技术的热情和专业知识,成功研发出了第一款产品——一款便携式数据处理器。这款产品因其便携性和高效性受到了市场的欢迎,为Esico-Triton的后续发展奠定了坚实的基础。

CIF公司的发展小趣事

C公司是一家专注于电子产品贸易的CIF公司。为了降低成本、提高效率,C公司积极整合全球供应链资源,与多家优质的电子产品生产商建立了长期合作关系。通过优化采购、生产和物流等环节,C公司成功降低了运营成本,提高了市场竞争力。

问答坊 | AI 解惑

RF工程师的音:urgent:某著名半导体外企新出来的职位1_RF(内部推荐)

某著名外企新出来的RF 职位, 不过指明了公司名, 注意不符合请勿浪费资源,同时请注意工作地点有:上海,深圳,北京,成都,请在简历中注明申请去的地方。紧急招募,越开越好。请发中英文简历到 herofighter88@gmail.com 除Technical Hub Manager, ...…

查看全部问答>

无线充电实验

无线充电实验的一篇论文,非常不错哦~,里面有具体电路…

查看全部问答>

各位大虾,帮忙看看下面是什么编译错误,怎么解决,多谢啦

在PPC下编译出现如下编译错误: 2140: Error: unsupported relocation type                                    &nb ...…

查看全部问答>

请问我Hook了ZwCreateFile后,为什么获取不到文件名呢?

我在我的HookZwCreateFile中 DbgPrint(\"HookZwCreateFile:%wZ\\n\",ObjectAttributes->ObjectName); 打印出来的全是目录,没有文件名?为啥? 谢谢各位驱动大牛。。。。…

查看全部问答>

问个问题?

用pc通过串口给单片机发送数据 用vb6.0编程 比如我要发送 0xFF  字节, 我用vb不知如何实现 试过: 用MScomm1.output=255    出错 用MScomm1.output=chr(255) 数据不准确 …

查看全部问答>

quartus ii 8.0 安装问题

我安装完Quartus 8.0后(已成功破解),利用其自带的IP生成工具生成了一个三速度以太网的IP核,同时生成了仿真文件,当我打开仿真工具Questasim运行生成的仿真脚本文件时,开始正常,当执行到do mac_wave.do时 生成波形文件变得非常慢,而且信号是 ...…

查看全部问答>

大神帮帮忙?关于320F28035时钟问题

     本人在做关于DSP28035的芯片,在实验配置时钟的时候波形不对。所以下面我想用DSP控制TOPWAY的液晶屏无法成功!     DSP+12M的晶振,晶振旁边的电容15pf.     出来波心是这样:   ...…

查看全部问答>

出mini6410开发板。。。。。。。。

RT,出mini6410,256RAM 1GB SLC FLASH 介绍淘宝搜 价格:420RMB。…

查看全部问答>

南华大学黄智伟 好的系统设计方案是取得好的竞赛成绩的保证

本帖最后由 paulhyde 于 2014-9-15 04:04 编辑 南华大学黄智伟 好的系统设计方案是取得好的竞赛成绩的保证  …

查看全部问答>

有关AD835的使用注意事项?

本帖最后由 paulhyde 于 2014-9-15 03:32 编辑 AD835在使用的过程中会影响结果的主要注意事项有哪些?谢谢!    …

查看全部问答>