速度上手LM4F LaunchPad 输出多路PWM波
最近转战到TI的Cortex M4平台后,发现网上关于TI的LM4F120 Launchpad 资料太少了,而且其中大部分都是TI员工或者其合作伙伴提供的,例程太少,导致新手上手很慢。
我只是要实现几路PWM波输出而已,昨天努力了一天,发现并不容易,至少没有找到可参考的例程,好在我不断地找资料,最后终于写出来了,特贴在此,供新手参考
另外,在写程序之前,还有很多要说和要做的。
首先,拿到LM4F120 Launchpad,首先要做的就是装好开发环境,我用的是CCS 5.2.1,算是很新的了。在新建工程之前,还有两个工作要做,就是安装Stellaris ICDI的驱动程序和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社区一提问者的,我只是把其中一路变成了八路。出处:http://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/t/259898.aspx
下面上代码。至于文中提到的那些文档,大家可以按名字从网上搜,稍等会我也上传到网盘里,因为资料很杂,所以整理起来还是有些上火。
注意:LM4F120H5QR 本身是没有PWM模块的,只能使用Timer模块产生
以上资料打包下载: https://skydrive.live.com/redir?resid=C96C6EC8AD8DCFEA!4146
#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);
}
}
速度上手LM4F LaunchPad 输出多路PWM波的更多相关文章
- STM32F103定时器输出PWM波控制直流电机
这个暑假没有回家,在学校准备九月份的电子设计竞赛.今天想给大家分享一下STM32高级定时器输出PWM波驱动直流电机的问题.. 要想用定时器输出的PWM控制直流电机,,首先要理解“通道”的概念..一个定 ...
- 定时器同步+触发三ADC采样+输出6路PWM波
为了熟悉定时器定时器和ADC 用STM32F407DIS做了一个简单的工程: 通过高级定时器TIM1溢出更新时间作为触发输出信号(TRGO),触发TIM8开始计数: 同时TIM1的通道1.2.3以及分 ...
- PWM波控制舵机总结
文章转自:http://www.geek-workshop.com/thread-70-1-1.html 一.关于舵机: 舵机(英文叫Servo):它由直流电机.减速齿轮组.传感器和控制电路组成的一套 ...
- 使用引脚模拟PWM波控制引脚
/********************************* 代码功能:输出PWM波控制引脚 使用函数: 创作时间:2016*10*07 作者邮箱:jikexianfeng@outlook.c ...
- STM32 PWM波
利用STM32产生占空比可以调节的PWM波 科普:pwm(Pulse Width Modulation)脉宽调制 关于pwm波的产生:1.首先来看一下代码: pwm波模式的相关配置(利用的是定时器TI ...
- STM32高级定时器TIM1产生两路互补的PWM波(带死区)
测试环境:Keil 5.20.0.0 STM32F103RBT6 固件库版本:STM32F10x_StdPeriph_Lib_V3.5.0(2011) 本文使用TIM1的通道1,通道2,产生两路1kh ...
- 进阶之路(基础篇) - 005 模拟PWM波控制引脚
/********************************* 代码功能:输出PWM波控制引脚 使用函数: 创作时间:2016*10*07 作者邮箱:jikexianfeng@outlook.c ...
- stm32cube--通用定时器--产生pwm波
看了通用定时器的资料,发现内容挺多,挺难看懂,现在还是先掌握使用方法,以后再多看几遍吧. ① ② ③生成mdk工程后,在main.c的while(1)前面加上HAL_TIM_PWM_Start(&am ...
- 利用MDK4中的逻辑分析仪分析IO口的PWM波
1.先设置软件仿真 ,可参看STM32不完全手册的2.4的软件仿真这一章 (原文件名:1.jpg) Example functionality: ...
随机推荐
- sharepoint services
I have got solution for authentication to share point web service I have use fedAuth Cookie and rtfa ...
- 梦想CAD控件COM接口光栅图处理
在CAD操作过程中,我们在设计绘图时,光栅图像也就是我们常说的图片,应用非常广泛,在CAD中可以直接插入光栅图像,并且可以对光栅图像进行裁剪.透明度调整等一些操作,在网页可以快速实现我们所需功能. 一 ...
- 00Enterprise Resource Planning
Enterprise Resource Planning 企业资源计划即 ERP (Enterprise Resource Planning),由美国 Gartner Group 公司 ...
- Luogu P4014 「 网络流 24 题 」分配问题
解题思路 还是建立超级源点和超级汇点,又因为题目给出规定一个人只能修一个工件,所以建图的时候还要讲容量都设为$1$. 人的编号是$1\rightarrow n$,工件的编号是$n+1\rightarr ...
- ds020507
芯片输出端不加负载的时候,芯片的输出电压是9点多伏. 加上大的负载,芯片发热,电压接近输入电压. 正常负载,芯片输出7.0几伏. 版权声明:本文为博主原创文章,未经博主允许不得转载.
- 关于 CMSIS 标准 及 STM32F10x的固件库
CMSIS 标准英文全称是Cortex MicroController Software Interface Standard,翻译为中文意思就是 ARM Cortex 微控制器软件接口标准. 由于基 ...
- IE 浏览器证书错误常见问题解答
有时,你将看到下表的错误消息,比如,此网站的安全证书已经被吊销等等,说明网站的安全证书有问题. 站点的证书允许 Internet Explorer 与站点建立安全连接. SSL证书出现错误有时是证书本 ...
- Android三角标签View:TriangleLabelView
Android三角标签View:TriangleLabelView 在一些商城.产品推销类APP中,如淘宝.京东.电影门票销售.商品降价促销这类的APP,常常会在其APP中看到,某些商品的左上角 ...
- 【BZOJ4398】福慧双修(二进制,最短路)
题意: 此题中S=1 思路:Orz ManGod秒切此题 我觉得出入边权互换不太直观,就改了一下写法 第一次默认与1有关的第一条出边只出不入,第二次默认只入不出 ..]of longint; head ...
- 【BZOJ1014】火星人prefix(splay,Hash)
题意: . 思路: ; ..,..]of longint; sum,size,fa,a,b,id,mi:..]of longint; n,m,i,x,y,s,k,j,cnt,root:longint; ...