MSP430F5529库函数定时器A——硬件PWM

这篇具有很好参考价值的文章主要介绍了MSP430F5529库函数定时器A——硬件PWM。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需提前学习: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()函数

timer_a_outputpwm(timer_a1_base, &param);,MSP430F5529,单片机,嵌入式硬件

获取引脚手册

可能有人想知道这个怎么看,首先我们得获引脚手册。打开我的git仓库——>点击引脚功能数据手册英文版——>下载

timer_a_outputpwm(timer_a1_base, &param);,MSP430F5529,单片机,嵌入式硬件

看手册 

这个引脚对应复用功能在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 设置比较输出模式

模式类型

模式有如下

timer_a_outputpwm(timer_a1_base, &param);,MSP430F5529,单片机,嵌入式硬件

对应可选参数如下

注意:电平输出模式(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。

因为我只讲增计数模式,感觉正常使用也只会用到这个,所以建议看完这个一部分,下面两个可以不看。

timer_a_outputpwm(timer_a1_base, &param);,MSP430F5529,单片机,嵌入式硬件

连续计数模式下的比较输出

在连续计数模式下,定时器输出波形与增计数模式一样,只是计数器在增计数到TAxCCR0后还要继续增计数到0FFFFh,这样就延长了计数器计数到TAxCCR1数值的时间。在连续计数模式下的输出波形如图所示。在该示例中同样用到了TAxCCR0和TAxCCR1。

timer_a_outputpwm(timer_a1_base, &param);,MSP430F5529,单片机,嵌入式硬件

增减计数模式下的比较输出

这个用的少 

timer_a_outputpwm(timer_a1_base, &param);,MSP430F5529,单片机,嵌入式硬件

占空比选择

这个里面的数值你自己填,比如我设置的周期是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的引脚

#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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MSP430F5529库函数——模数转换模块(ADC12)软件触发

    需提前观看:MSP430F5529库函数学习——串口   目录 代码 ADC初始化部分 引脚复位 ADC12_A_init() 函数声明 baseAddress sampleHoldSignalSourceSelect clockSourceSelec clockSourceDivider ADC12_A_enable() ADC12_A_setupSamplingTimer() ADC12_A_configureMemory() memoryBufferControlIndex  inputSourceSelect positiveRefVolta

    2024年02月16日
    浏览(42)
  • 【MSP430F5529基于库函数的学习】电赛速学及小车实战

    为电赛准备学习的MSP430笔记 提示:主要跟着这个大佬学的 一张经常要看的图 时钟配置和闪烁的LED 时钟系统结构 (1)5个时钟来源 时钟系统模块具有5个时钟来源。 ① XT1CLK:低频/高频振荡器,可以使用32768Hz的手表晶振、标准晶体、谐振器或4~32MHz的外部时钟源; ② VLOCLK:

    2024年02月12日
    浏览(33)
  • MSP430F5529 DriverLib 库函数I2C驱动OLED屏幕

    平台:Code Composer Studio 10.4.0 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) P3.0为SDA,P3.1为SCL OLED.c OLED.h OLED_Font.h

    2024年02月15日
    浏览(25)
  • MSP430F5529 DriverLib 库函数学习笔记(一)时钟配置和闪烁LED

    平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) (1)5个时钟来源         时钟系统模块具有5个时钟来源。 ① XT1CLK :低频/高频振荡器,可以使用32768Hz的手表晶振、标准晶体、谐振器或4~32MHz的外部时钟源; ② VLOCLK :内部超低功耗低频振荡

    2024年02月16日
    浏览(45)
  • MSP430F5529——中断理解

    认识低功耗模式; MSP430的中断,需要两个部分,一部分是打开中断,另外一部分是编写中断服务函数 首先我们得知道__bis_SR_register和_BIS_SR是一个玩意。查看宏定义可知  _BIS_SR()可传入的参数 然后我们查看x的值,发现里面有八个可以传入的值 我们这里只需要关系GIE就可以

    2024年02月16日
    浏览(43)
  • MSP430F5529学习笔记

    该MCU是由德州仪器TI生产的16位低功耗单片机 主要分以下型号: 专注低功耗的 1xx 通用型,配备1KB-60KB FLASH、512B-10KB RAM,工作时耗电仅达200uA/MIPS,RAM保持模式耗电0.1uA,RTC模式耗电0.7uA;可在6us之内快速唤醒。搭载10/12位斜率SAR ADC,集成模拟比较器、DMA、硬件乘法器、BOR、SV

    2024年02月15日
    浏览(108)
  • 05:OLED模块【MSP430F5529】

    目录 实物图 字模取字         字模软件         取模步骤         1.设置软件         2.取模         3.输出数据  代码 type.h oledfont.h oled.h oled.c main.c 下面图片中,可以看到OLED模块的四个接口:GND,VCC,SCL,SDA GND VCC SCL SDA 接地 接电源3.3V/5V 接P3.5 接P3.6       

    2024年02月16日
    浏览(36)
  • msp430f5529学习笔记(2)时钟系统

    写在前~本章将会详细的讲解msp430f5529单片机的时钟系统及其使用方法。如有不妥的地方欢迎各位大佬斧正!!! 目录 什么是时钟系统和时钟源 MSP430f5529时钟源和时钟系统介绍 产生时钟信号的时钟源: 时钟配置        在单片机中,单片机每开始一个周期的工作就需要一个节

    2024年02月17日
    浏览(37)
  • MSP430F5529学习笔记(6)——导入MSP430Ware,查看例程

    MSP430WARE下载; 目录 在线版本 下载MSP430Ware 查看例程 导入例程  离线版本 下载MSP430Ware  查看例程 导入例程 MSP430Ware里面有很多例程和库函数使用手册,我们可以查看学习。非常重要 (1) 打开CCS——view——Resource Explorer  之后我们会进入如下界面 (2)  点击MSP430——Embe

    2024年02月13日
    浏览(45)
  • 06:PWM与电机驱动【MSP430F5529】

    电机型号: 工作方式: 原理图以及接线: 根据官方例程,主要代码为drive.c drive.h main.c (后面好像使用的时候会有什么冲突导致1或者2通道无法正常运行,不太记得了,可以到实物上实验一下子) 下面是智能送药小车使用PWM驱动电机相关代码与注释(在实物中,均能正常运行)

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包