打印
[原创]

MSP430F5529LP的P1.4口输出单路PWM波

[复制链接]
1311|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
闵大|  楼主 | 2019-8-30 11:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 闵大 于 2019-8-30 11:51 编辑

此帖回答昨天自己发出的求助帖。在此做一个小小记录。2019.08.30求助帖连接:https://bbs.21ic.com/icview-2856862-1-1.html

输出单路PWM波
MSP430Ware包中例程—timer_a_ex1_pwmSingle可以输出占空比0.75,频率**(忘了,可以用示波器测一下)单路PWM波。输出引脚口为P2.0,代码成功烧写后按下单片机复位按钮并用示波器观测波形验证代码是否正确。

通过查阅MSP430F5529 数据手册表4-1 P1.4也具备PWM输出能力,现想把原来例程P2.0引脚修改为P1.4引脚输出PWM

配置外设就是一种套路,我个人总结为三步走。配置外设时钟;配置GPIO口;初始化外设模块。

配置外设时钟:每一个外设模块若要工作必须要有时钟控制,则使用每个外设模块前必须了解该外设的时钟最高能达到多少。外设时钟都是通过系统时钟分频所得,得知系统时钟频率后需关注该外设实际获得时钟频率为多少?学习使用每一款单片机必须会看时钟树。

配置GPIO口:GPIO(General-purposeInput Output)通用数字输入输出口,GPIO外设是一座沟通MUC和外界唯一桥梁。

初始化外设模块:每一个外设模块都有非常多寄存器,若通过此寄存器完成某一目的则需提前设定。举一个例子,一个人需要去北京,要求5天后到**广场,则此人可以有很多不同选择。到北京**可以认为是目的,各种不同选择可以认为是寄存器配置。若仅有前面两步无配置寄存器,即此人没法到达**故目的不能实现。

现通过配置PWM模块帮助理解三步走方法。
步骤1.配置PWM模块时钟
步骤2.配置GPIO口
步骤3.初始化PWM模块

MSP430F5529没有独立PWM模块,故不存在PWM模块时钟。此处需要提一下DSP28335,此款MUC也是TI公司。它有独立PWM模块,此模块又包括时基模块、比较模块、动作模块等。回到此处,MSP430F5529外设配置可以把步骤1、3稍作修改且合并放在步骤2后面。

配置MSP430F5529的PWM模块两步走
步骤1.配置GPIO口
步骤2.初始化Timer_A寄存器

步骤1:配置P1.4为PWM输出引脚口
GPIO_setAsPeripheralModuleFunctionOutputPin(  
         GPIO_PORT_P1,
         GPIO_PIN4);

步骤2:查数据手册可知P1.4对应TimerA寄存器,则配置该寄存器为PWM模式

//Generate PWM - Timer runs in Up mode
     Timer_A_outputPWMParam param = {0};//向上计数模式。param是一个结构体变量。  
     param.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;//Timer_A时钟源  
     param.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_1;//不分频  
     param.timerPeriod = TIMER_PERIOD;//PWM周期计数值  
     param.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_3;//查表可知P1.4对应CCR3
     param.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET;//自动重装载模式
     param.dutyCycle = DUTY_CYCLE;//占空比计数值
     Timer_A_outputPWM(TIMER_A0_BASE, ¶m);//查表可知P1.4对应TimerA0  


总结:例程代码总共需要修改3个地方。
  
GPIO_setAsPeripheralModuleFunctionOutputPin(
         GPIO_PORT_P1,
         GPIO_PIN4);


param.compareRegister =  TIMER_A_CAPTURECOMPARE_REGISTER_3;//查表可知P1.4对应CCR3


Timer_A_outputPWM(TIMER_A0_BASE,  ¶m);//查表可知P1.4对应TimerA0



完整代码如附:
timer_a_ex1_pwmSingle.rar (589.76 KB)

使用特权

评论回复

相关帖子

沙发
xyz549040622| | 2019-8-30 14:23 | 只看该作者
不错,支持下,总结的不错!

使用特权

评论回复
板凳
airwill| | 2019-9-1 19:06 | 只看该作者
使用定时器的 PWM 功能, 比较简单. 如果纯软件实现就复杂了

使用特权

评论回复
评论
airwill 2019-9-6 11:12 回复TA
@闵大 :只要通过设置寄存器就能控制 PWM 频率和占空比,就是硬件实现。否则就算软件(或部分软件) 
闵大 2019-9-5 20:44 回复TA
@airwill :感谢您回复。如果向您说的这样,定时器的PWM功能难道不是纯软件实现吗?难道此方法加入了硬件吗,若是,则是什么硬件呢?盼复! 
airwill 2019-9-2 21:49 回复TA
@闵大 :可以借助简单的定时器, 输出端口高低电平, 实现 PWM 
闵大 2019-9-2 07:44 回复TA
您好!请问纯软件如何实现,能大概解释一下吗?我第一次听这个概念 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

23

帖子

0

粉丝