本帖最后由 闵大 于 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)
|