速度上手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: ...
随机推荐
- [HNOI2006]最短母串 (AC自动机+状压)
Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. Input 第一行是一个正整数n(n<=12) ...
- python vars模块
{'__file__': 'C:/Users/zhou/PycharmProjects/fullstack2/6_20/test.py', '__doc__': None, '__cached__': ...
- 第四章 模块化React和Redux应用
第四章 模块化React和Redux应用 4.1 模块化应用要点 构建一个应用的基础: 代码文件的组织结构: 确定模块的边界: Store的状态树设计. 4.2 代码文件的组织方式 4.2.1 按角色 ...
- mysql如何将一个字段多个类型串成一个字符串?
结论 先说结论,可以使用group_concat group by的组合实现多行变一行,将一个字段的多个类型串成一个字段 需求: 如题,一个字段如电影类别,一部电影可以是多个类别,如喜剧.动作片等,其 ...
- linux free命令-显示内存的使用情况
更多Linux 性能监测与优化 关注 Linux命令大全 free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区. 语法 free(选项) 选项 -b:以Byte为单 ...
- buf.writeDoubleBE()函数详解
buf.writeDoubleBE(value, offset[, noAssert]) buf.writeDoubleLE(value, offset[, noAssert]) value {Num ...
- js之获取html标签的值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SocketServer 网络服务框架
SocketServer简化了网络服务器的编写.它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer.这4个类是同步进行处理的,另 ...
- kvm virsh命令详解
[root@ok home]# virsh list Id Name State ---------------------------------------------------- 1 13sv ...
- ViewService
ViewService 在分布式系统中,最常见的场景就是主备架构.但是如果主机不幸宕机,如何正确的通知客户端当前后端服务器的状况成为一个值得研究的问题.本文描述了一种简单的模型用于解决此问题. 背景 ...