8709|16

164

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【TIVA C Launchpad 学习笔记三】利用PWM模块产生两路方波 [复制链接]

/*******************************************
开发坏境:CCSv5
程序功能:利用PWM模块产生两路方波
程序说明:使用PWM模块0,PWM发生器0,输出为PWM0和PWM1管脚,分别为PB6,PB7
编程者:Linchpin
********************************************/
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/rom.h"
#include "driverlib/gpio.h"
#include "driverlib/pwm.h"
#include "driverlib/fpu.h"
#include "driverlib/pin_map.h"

int main (void)
{
        //使能FPU
        FPUEnable();
        FPULazyStackingEnable();
        //设置系统时钟为80MHz
        SysCtlClockSet(SYSCTL_SYSDIV_2_5 |SYSCTL_USE_PLL|SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHZ);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);//使能PWM0模块
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//使能PWM0和PWM1输出所在GPIO
        GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_6);
        GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_7);//配置PH0/PH1为PWM功能
        GPIOPinConfigure(GPIO_PB6_M0PWM0);    //#define GPIO_PB6_M0PWM0         0x00011804
        GPIOPinConfigure(GPIO_PB7_M0PWM1);    //#define GPIO_PB7_M0PWM1         0x00011C04
        SysCtlPWMClockSet(SYSCTL_PWMDIV_1);     // PWM时钟配置:不分频
        //配置PWM发生器0:加减计数,不同步
        PWMGenConfigure(PWM0_BASE,PWM_GEN_0,PWM_GEN_MODE_UP_DOWN| PWM_GEN_MODE_NO_SYNC);
        //设置PWM发生器1的频率,时钟频率/PWM分频数/n,80M/1/800=100KHZ
        PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, 800);
        //设置PWM0/PWM1输出的脉冲宽度
        PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, 400);//50%占空比
        PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1, 200);//25%占空比
        //使能PWM0和PWM1的输出
        PWMOutputState(PWM0_BASE, (PWM_OUT_0_BIT |PWM_OUT_1_BIT), true);
        //使能PWM发生器
        PWMGenEnable(PWM0_BASE, PWM_GEN_0);
        while(1);
}


最新回复

这篇帖子不错,很典型  详情 回复 发表于 2016-6-5 20:20
 
点赞 关注

回复
举报

6066

帖子

92

TA的资源

裸片初长成(初级)

沙发
 
谢谢分享
 
 

回复

16

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
GPIO_PB6_MOPWM0是自己定义还是直接调用,调用哪个库函数的

点评

在这个头文件里已定义的 #include "driverlib/pin_map.h"  详情 回复 发表于 2014-6-22 23:02
 
 
 

回复

164

帖子

0

TA的资源

一粒金砂(中级)

4
 
ddd4 发表于 2014-6-21 13:03
GPIO_PB6_MOPWM0是自己定义还是直接调用,调用哪个库函数的

在这个头文件里已定义的 #include "driverlib/pin_map.h"

点评

我运行你的代码,但是发生了错误,在使用 pin_map.h 需要加上#ifndef PART_TM4C123GH6PM#define PART_TM4C123GH6PM #endif 调试时经常遇到这种原因你知道怎么解决吗?  详情 回复 发表于 2014-6-23 09:03
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(初级)

5
 
Linchpin 发表于 2014-6-22 23:02
在这个头文件里已定义的 #include "driverlib/pin_map.h"

我运行你的代码,但是发生了错误,在使用 pin_map.h 需要加上#ifndef  PART_TM4C123GH6PM#define  PART_TM4C123GH6PM
#endif

调试时经常遇到这种原因你知道怎么解决吗?

1ER}R4Q8{_WN$W7B8]_WFXM.jpg (66.13 KB, 下载次数: 0)

没加上宏定义的

没加上宏定义的

C4CK%WS17V9X20SM4PS76(D.jpg (33.41 KB, 下载次数: 0)

C4CK%WS17V9X20SM4PS76(D.jpg

点评

properties——advanced options——predefined symbols,上面预定义predifine name 添加 PART_TM4C123GH6PM  详情 回复 发表于 2014-6-23 12:38
 
 
 

回复

164

帖子

0

TA的资源

一粒金砂(中级)

6
 
ddd4 发表于 2014-6-23 09:03
我运行你的代码,但是发生了错误,在使用 pin_map.h 需要加上#ifndef  PART_TM4C123GH6PM#define  PART_T ...

properties——advanced options——predefined symbols,上面预定义predifine name 添加 PART_TM4C123GH6PM

FRGI)GZ3I34F[G`_V[54I$0.jpg (71.9 KB, 下载次数: 0)

FRGI)GZ3I34F[G`_V[54I$0.jpg
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(初级)

7
 
能不给帮我解决第二个图的问题

点评

加上宏定义就可以了。  详情 回复 发表于 2014-6-24 12:30
 
 
 

回复

164

帖子

0

TA的资源

一粒金砂(中级)

8
 
ddd4 发表于 2014-6-23 14:14
能不给帮我解决第二个图的问题

加上宏定义就可以了。


 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

9
 
楼主出个带死区控制的 上,下臂输出的PWM例程吧!

点评

现在在准备期末考试没空呀 等我暑假有空了再写  详情 回复 发表于 2014-6-26 12:39
 
 
 

回复

164

帖子

0

TA的资源

一粒金砂(中级)

10
 
蓝雨夜 发表于 2014-6-24 14:22
楼主出个带死区控制的 上,下臂输出的PWM例程吧!

现在在准备期末考试没空呀  等我暑假有空了再写

点评

好! 加油啊  详情 回复 发表于 2014-6-26 13:01
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

11
 
Linchpin 发表于 2014-6-26 12:39
现在在准备期末考试没空呀  等我暑假有空了再写

好!

加油啊
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

12
 
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/rom.h"
#include "driverlib/gpio.h"
#include "driverlib/pwm.h"
#include "driverlib/fpu.h"
#include "driverlib/pin_map.h"

int main (void)
{
        //使能FPU
        FPUEnable();
        FPULazyStackingEnable();
        //设置系统时钟为80MHz
        SysCtlClockSet(SYSCTL_SYSDIV_2_5 |SYSCTL_USE_PLL|SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHZ);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);//使能PWM0模块
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//使能PWM0输出所在GPIO
        GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_4);
        GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_5);
                                GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_6);
        GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_7);
                                //配置PH0/PH1为PWM功能
                                GPIOPinConfigure(GPIO_PB6_M0PWM0);    //#define GPIO_PB6_M0PWM0         0x00011804
        GPIOPinConfigure(GPIO_PB7_M0PWM1);    //#define GPIO_PB7_M0PWM1         0x00011C04
        GPIOPinConfigure(GPIO_PB4_M0PWM2);    //#define GPIO_PB4_M0PWM2         0x00011804
        GPIOPinConfigure(GPIO_PB5_M0PWM3);    //#define GPIO_PB5_M0PWM3         0x00011C04
        SysCtlPWMClockSet(SYSCTL_PWMDIV_1);     // PWM时钟配置:不分频
        //配置PWM发生器0:加减计数,不同步
        PWMGenConfigure(PWM0_BASE,PWM_GEN_0,PWM_GEN_MODE_UP_DOWN| PWM_GEN_MODE_NO_SYNC);
        //设置PWM发生器0的频率,时钟频率/PWM分频数/n,80M/1/800=100KHZ
        PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, 800);
        //设置PWM01输出的脉冲宽度
        PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, 400);//50%占空比
        PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1, 300);//
                                PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2, 400);//
        PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3, 400);//
        //使能PWM0输出
        PWMOutputState(PWM0_BASE, (PWM_OUT_0_BIT |PWM_OUT_1_BIT|PWM_OUT_2_BIT|PWM_OUT_3_BIT), true);
        //使能PWM发生器
        PWMGenEnable(PWM0_BASE, PWM_GEN_0);
        while(1);
}
PWM0,PWM1正常 PWM2,PWM3没有输出 是为什么  能帮我看看吗
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

13
 
已解决


#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/rom.h"
#include "driverlib/gpio.h"
#include "driverlib/pwm.h"
#include "driverlib/fpu.h"
#include "driverlib/pin_map.h"

int main (void)
{

        //设置系统时钟为80MHz
        SysCtlClockSet(SYSCTL_SYSDIV_2_5 |SYSCTL_USE_PLL|SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHZ);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);//使能PWM0模块
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//使能PWM0输出所在GPIO
        SysCtlPWMClockSet(SYSCTL_PWMDIV_1);     // PWM时钟配置:不分频
        GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_4);
        GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_5);
        GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_6);
        GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_7);

        GPIOPinConfigure(GPIO_PB6_M0PWM0);    //#define GPIO_PB6_M0PWM0         0x00011804
        GPIOPinConfigure(GPIO_PB7_M0PWM1);    //#define GPIO_PB7_M0PWM1         0x00011C04
        GPIOPinConfigure(GPIO_PB4_M0PWM2);    //#define GPIO_PB4_M0PWM2         0x00011804
        GPIOPinConfigure(GPIO_PB5_M0PWM3);    //#define GPIO_PB5_M0PWM3         0x00011C04

        //配置PWM发生器0:加减计数,不同步
        PWMGenConfigure(PWM0_BASE,PWM_GEN_0,PWM_GEN_MODE_UP_DOWN| PWM_GEN_MODE_NO_SYNC);
        //设置PWM发生器0的频率,时钟频率/PWM分频数/n,80M/1/800=100KHZ
        PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, 1600);
        //配置PWM发生器0:加减计数,不同步
        PWMGenConfigure(PWM0_BASE,PWM_GEN_1,PWM_GEN_MODE_UP_DOWN| PWM_GEN_MODE_NO_SYNC);
        //设置PWM发生器0的频率,时钟频率/PWM分频数/n,80M/1/800=100KHZ
        PWMGenPeriodSet(PWM0_BASE, PWM_GEN_1, 1600);
        //设置PWM01输出的脉冲宽度
        PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, 400);//50%占空比
        PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1, 300);//
        PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2, 400);//
        PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3, 400);//
        //使能PWM0输出
        PWMOutputState(PWM0_BASE, (PWM_OUT_0_BIT |PWM_OUT_1_BIT|PWM_OUT_2_BIT|PWM_OUT_3_BIT), true);
        //使能PWM发生器
        PWMGenEnable(PWM0_BASE, PWM_GEN_0);
        PWMGenEnable(PWM0_BASE, PWM_GEN_1);
        while(1);
}

 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

14
 
谢谢楼主的 帖子  已成功输出
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

15
 
为什么我的PB6和PD0,PB7和PD1上的信号会一模一样,用的官方例程

点评

看看 LaunchPad 盒子里的介绍单,PB6和PD0 ,PB7和PD1,是接在一起的[attachimg]160139[/attachimg]  详情 回复 发表于 2014-7-22 13:24
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

16
 
wending 发表于 2014-7-17 16:25
为什么我的PB6和PD0,PB7和PD1上的信号会一模一样,用的官方例程

看看 LaunchPad 盒子里的介绍单,PB6和PD0 ,PB7和PD1,是接在一起的
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(中级)

17
 
这篇帖子不错,很典型
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表