注册
登录
电子工程世界-论坛
返回首页
EEWORLD首页
频道
EE大学堂
下载中心
Datasheet
专题
单片机
物联网
汽车电子
嵌入式
手机/便携
模拟电子
家用电子
网络通信
电源管理
工业控制
测试测量
半导体设计/制造
安防电子
传感器
医疗电子
sanwave的个人空间
https://home.eeworld.com.cn/space-uid-495971.html
[收藏]
[复制]
[分享]
[RSS]
空间首页
动态
记录
日志
相册
主题
分享
留言板
个人资料
借用开发板
论坛
淘帖
Collection
查看新帖
最新回复
社区活动
联系管理员
我的空间
帖子
日志
收藏
好友
勋章
积分
安全验证
请完成以下验证码
日志
速度上手LM4F LaunchPad 产生PWM波
已有 1670 次阅读
2013-8-26 10:12
发现网上关于TI的LM4F120 Launchpad 资料太少了,其中大部分都是TI员工或者其合作伙伴提供的,例程太少,导致新手上手很慢
我只是要实现几路PWM波输出而已,昨天努力了一天,发现并不容易,至少没有可参考的例程,好在我不断地找资料,最后终于写出来了,特贴在此,供新手参考
另外,在写程序之前,还有很多要说和要做的
首先,拿到LM4F120 Launchpad,首先要做的就是装好开发环境,我用的是CCS 5.2.1,算是很新的了。在新建工程之前,还有两个个工作要做,就是安装Launchpad For Windows
驱动程序
,和
TI提供的Stellaris驱动库,即 StellarisWave。文档“StellarisWare软件库说明.pdf”详细说明了其安装后的文件分布。其中,外设驱动库有一份周立功翻译的文档,叫 Stellaris外设驱动库。 然后新建工程,记着目标型号选 LM4F120H5QR,Connection选 “Stellaris In-Circuit Debug Interface”。然后,剩下的工作一定要按照 “怎样使用CCS5创建Stellaris的新工程.pdf”里面所说的,当然我们的板子的型号是“ek-lm4f120xl”而非“ek-lm4f232”,要不然很容易报错。
剩下的就是写代码了。先说说我代码的大概逻辑吧,使用Timer0~Timer3产生八路周期一致的占空比互补的PWM波,通过PB的八个GPIO输出,当然,周期和占空比你都可以任意设置。
这算是我第一次发帖吧,可能有点乱,仅供新手参考。
程序是参考TI社区一提问者的,我只是把其中一路变成了八路。出处:
javascript:;
下面上代码。至于文中提到的那些文档,大家可以按名字从网上搜,稍等会我也上传到网盘里,因为资料很杂,所以整理起来还是有些上火。
注意:LM4F120H5QR 本身是没有PWM模块的,只能使用Timer模块产生
[code]
#include \"inc/hw_memmap.h\"
#include \"inc/hw_types.h\"
#include \"driverlib/pwm.h\"
#include \"driverlib/gpio.h\"
#include \"driverlib/sysctl.h\"
#include \"utils/uartstdio.h\"
#include \"driverlib/timer.h\"
int delta=5;
int value=1;
void InitTimerPWM(int fullValue)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER3);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 );
GPIOPinConfigure(GPIO_PB0_T2CCP0);
GPIOPinConfigure(GPIO_PB1_T2CCP1);
GPIOPinConfigure(GPIO_PB2_T3CCP0);
GPIOPinConfigure(GPIO_PB3_T3CCP1);
GPIOPinConfigure(GPIO_PB4_T1CCP0);
GPIOPinConfigure(GPIO_PB5_T1CCP1);
GPIOPinConfigure(GPIO_PB6_T0CCP0);
GPIOPinConfigure(GPIO_PB7_T0CCP1);
TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_PWM | TIMER_CFG_B_PWM );
TimerLoadSet(TIMER0_BASE, TIMER_A, fullValue);
TimerLoadSet(TIMER0_BASE, TIMER_B, fullValue);
TimerEnable(TIMER0_BASE, TIMER_BOTH);
TimerMatchSet(TIMER0_BASE, TIMER_A, 0);
TimerMatchSet(TIMER0_BASE, TIMER_B, 0);
TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_PWM | TIMER_CFG_B_PWM );
TimerLoadSet(TIMER1_BASE, TIMER_A, fullValue);
TimerLoadSet(TIMER1_BASE, TIMER_B, fullValue);
TimerEnable(TIMER1_BASE, TIMER_BOTH);
TimerMatchSet(TIMER1_BASE, TIMER_A, 0);
TimerMatchSet(TIMER1_BASE, TIMER_B, 0);
TimerConfigure(TIMER2_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_PWM | TIMER_CFG_B_PWM );
TimerLoadSet(TIMER2_BASE, TIMER_A, fullValue);
TimerLoadSet(TIMER2_BASE, TIMER_B, fullValue);
TimerEnable(TIMER2_BASE, TIMER_BOTH);
TimerMatchSet(TIMER2_BASE, TIMER_A, 0);
TimerMatchSet(TIMER2_BASE, TIMER_B, 0);
TimerConfigure(TIMER3_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_PWM | TIMER_CFG_B_PWM );
TimerLoadSet(TIMER3_BASE, TIMER_A, fullValue);
TimerLoadSet(TIMER3_BASE, TIMER_B, fullValue);
TimerEnable(TIMER3_BASE, TIMER_BOTH);
TimerMatchSet(TIMER3_BASE, TIMER_A, 0);
TimerMatchSet(TIMER3_BASE, TIMER_B, 0);
}
void updatePWM(int fullValue)
{
if(value<=0 ||value>=fullValue)
delta=-delta;
value+=delta;
TimerMatchSet(TIMER0_BASE, TIMER_A, value);
TimerMatchSet(TIMER0_BASE, TIMER_B, fullValue-value);
TimerMatchSet(TIMER1_BASE, TIMER_A, value);
TimerMatchSet(TIMER1_BASE, TIMER_B, fullValue-value);
TimerMatchSet(TIMER2_BASE, TIMER_A, value);
TimerMatchSet(TIMER2_BASE, TIMER_B, fullValue-value);
TimerMatchSet(TIMER3_BASE, TIMER_A, value);
TimerMatchSet(TIMER3_BASE, TIMER_B, fullValue-value);
SysCtlDelay(SysCtlClockGet()/100);
}
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
int valueMax=SysCtlClockGet()/10000;
InitTimerPWM(valueMax);
while(1)
{
updatePWM(valueMax);
}
}
[/code]
[
本帖最后由 sanwave 于 2013-8-26 10:12 编辑
]
本文来自论坛,点击查看完整帖子内容。
收藏
邀请
举报
发表评论
评论 (
1
个评论)
回复
LKK123
2013-8-28 10:25
谢谢,加油。
涂鸦板
您需要登录后才可以评论
登录
|
注册
评论
sanwave
加为好友
给我留言
打个招呼
发送消息
热门文章
头条资讯
烧了微软10000张GPU,这伙人铁了心要砸大家的饭碗
恩智浦为便携式设备推出1MB大RAM内存的Cortex-M4微控制器
【大大芯方案】更大功率无线快充,大联大推出基于立锜RT3182CGQW+RT1716WSC(MagSafe)无线充电方案
用crash分析内核死锁的一次实践
三个月巨亏465亿,全球风投巨头软银大溃败,曾重仓阿里暴赚;沈南鹏大幅减持美团、拼多多股票;抖音内测听视频模式|雷锋早报
今日芯闻:最新!风华高科发布MLCC重要公告
新增数据手册
CAR7VLF511RPB
D38999/26SG35JE-LC
NRLM333M16V35X30F
7101L2PY3A3BES
WBDDQSC-A-00-2941-B-B
85S3B-R22-H30/R60L
热搜器件
ICS502M
LA6585M
0707358
15326679
RSM30DTAS
TVS06RF-9-98HB
推荐下载
RT9231
模拟视频技术滤波器
天科1¥-one.ppt
TL431的偏置电流计算.doc
基于单片机的双音多频键盘接口技术
msp430最新常用子函数.h.zip
推荐关注
03驱动钛丝(SMA)的应用(3)胰岛素泵应用案例
明远智睿SSD2351核心板架构设计与性能优势
信息安全管理必备!Linux系统使用SSH登录root账号的方法
BJT存储时间是否影响关断损耗
康谋方案 | BEV感知技术:多相机数据采集与高精度时间同步方案
应对海量数据挑战,如何基于Euro NCAP标准开展高效智驾测试与评估?