需提前学习:MSP430F5529库函数定时器A——定时中断;引脚手册获取;
目录
先上代码
详解
引脚复用
选择引脚
获取引脚手册
看手册
时钟选择
分频
周期
REGISTER选择
比较输出模式
模式类型
增计数模式下的比较输出
连续计数模式下的比较输出
增减计数模式下的比较输出
占空比选择
Timer_A_outputPWM()初始化
函数定义
参数baseAddress
Timer_A_setCompareValue()函数介绍
函数定义
参数
baseAddress
compareRegister
compareValue
先上代码
我们先贴代码,再介绍这样方便理解。
#include "driverlib.h"
#define TIMER_PERIOD 8192
void Timer_A0_PWM_Init(void)
{
Timer_A_outputPWMParam htim = {0};
//P1.2复用输出
GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1, GPIO_PIN2);
//时钟源选为SMCLK = 1048576 HZ
htim.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;
//分频系数设为32 32768HZ
htim.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_32;
//装载值设为8192 - 1 ,周期为0.25s
htim.timerPeriod = TIMER_PERIOD - 1;
//P1.2 对应 TA0.1 故设为TIMER_A_CAPTURECOMPARE_REGISTER_1 定时器为0
htim.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_1;
//选择复位置位模式
htim.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET;
//设置占空比,为5%
htim.dutyCycle = TIMER_PERIOD / 20 ;
//P1.2 对应 TA0.1 为TIMER_A0_BASE
Timer_A_outputPWM(TIMER_A0_BASE, &htim);
}
int main(void)
{
WDT_A_hold(WDT_A_BASE);
Timer_A0_PWM_Init();
//interrupts enabled
__bis_SR_register(GIE);
while(1)
{
}
}
详解
引脚复用
选择引脚
我们选择P1.2作为硬件PWM输出,他对应的是定时器0的1脚。所以复用引脚为输出,使用GPIO_setAsPeripheralModuleFunctionOutputPin()函数
获取引脚手册
可能有人想知道这个怎么看,首先我们得获引脚手册。打开我的git仓库——>点击引脚功能数据手册英文版——>下载
看手册
这个引脚对应复用功能在7.2 Signal Descriptions章节,也就是第16页。
时钟选择
clockSource 是时钟选择,我们此处选择SMCLK时钟。
SMCLK系统默认 1048576Hz,ACLK系统默认为32768Hz。
分频
clockSourceDivider 是分频的,如果你不知道这里能填写什么,可以鼠标到clockSourceDivider处,点击F3。你看他上面的注释就是可选参数。
周期
选择的周期数-1存入timerPeriod 中。如果我们定时周期为500,那么存入timerPeriod 的值为499,也就是500-1
REGISTER选择
因为我们设置的是P1.2引脚,查看手册可知,对应的是定时器0的CCI1A。所以此处选择TIMER_A_CAPTURECOMPARE_REGISTER_1,如果是对应的定时器的CCI2A,此处就选择TIMER_A_CAPTURECOMPARE_REGISTER_2。
比较输出模式
compareOutputMode 设置比较输出模式
模式类型
模式有如下
对应可选参数如下
注意:电平输出模式(000)没有选择
#define TIMER_A_OUTPUTMODE_OUTBITVALUE OUTMOD_0
#define TIMER_A_OUTPUTMODE_SET OUTMOD_1
#define TIMER_A_OUTPUTMODE_TOGGLE_RESET OUTMOD_2
#define TIMER_A_OUTPUTMODE_SET_RESET OUTMOD_3
#define TIMER_A_OUTPUTMODE_TOGGLE OUTMOD_4
#define TIMER_A_OUTPUTMODE_RESET OUTMOD_5
#define TIMER_A_OUTPUTMODE_TOGGLE_SET OUTMOD_6
#define TIMER_A_OUTPUTMODE_RESET_SET OUTMOD_7
增计数模式下的比较输出
在增计数模式下,当TAR增加到TAxCCRn或从TAxCCR0计数到0时,定时器输出信号按选择的输出模式发生变化。示例如图所示,该示例利用了TAxCCR0和TAxCCR1。
因为我只讲增计数模式,感觉正常使用也只会用到这个,所以建议看完这个一部分,下面两个可以不看。
连续计数模式下的比较输出
在连续计数模式下,定时器输出波形与增计数模式一样,只是计数器在增计数到TAxCCR0后还要继续增计数到0FFFFh,这样就延长了计数器计数到TAxCCR1数值的时间。在连续计数模式下的输出波形如图所示。在该示例中同样用到了TAxCCR0和TAxCCR1。
增减计数模式下的比较输出
这个用的少
占空比选择
这个里面的数值你自己填,比如我设置的周期是TIMER_PERIOD。那么我设置占空比为5%,就可以这样写
//设置占空比,为5%
htim.dutyCycle = TIMER_PERIOD / 20 ;
Timer_A_outputPWM()初始化
函数定义
void Timer_A_outputPWM(uint16_t baseAddress, Timer_A_outputPWMParam *param)
作用
计时器A运行在增计数模式产生PWM
参数baseAddress
可选值如下
TIMER_A0_BASE
TIMER_A1_BASE
TIMER_A2_BASE
Timer_A_setCompareValue()函数介绍
我们做硬件PWM除了初始化的时候可以进行设置占空比,还可以在其他时刻进行设置占空比。这样就需要使用这个函数了
函数定义
void Timer_A_setCompareValue ( uint16_t baseAddress,uint16_t compareRegister,uint16_t compareValue)
参数
baseAddress
baseAddress与Timer_A_outputPWM()函数的一致
compareRegister
选择所设置更改PWM的引脚文章来源:https://www.toymoban.com/news/detail-565972.html
#define TIMER_A_CAPTURECOMPARE_REGISTER_0 0x02
#define TIMER_A_CAPTURECOMPARE_REGISTER_1 0x04
#define TIMER_A_CAPTURECOMPARE_REGISTER_2 0x06
#define TIMER_A_CAPTURECOMPARE_REGISTER_3 0x08
#define TIMER_A_CAPTURECOMPARE_REGISTER_4 0x0A
#define TIMER_A_CAPTURECOMPARE_REGISTER_5 0x0C
#define TIMER_A_CAPTURECOMPARE_REGISTER_6 0x0E
compareValue
设置要最后改成的数值文章来源地址https://www.toymoban.com/news/detail-565972.html
到了这里,关于MSP430F5529库函数定时器A——硬件PWM的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!