LM3S1968有什么特殊的地方吗

Other Parts Discussed in Thread: LM3S1968, LM3S6432

你好,LM3S1968有什么特殊的地方吗?同样使用PD1/PWM1口实现PWM输出的一段代码,在LM3S1968上不能实现,却在LM3S6432在完全正常。编译工具为KEIL uVision V4.00u +Luminary Eval Board 此问题已经困绕我三天了。]

#include "hw_memmap.h"

#include "hw_types.h"

#include "sysctl.h"

#include "gpio.h"

#include "pwm.h"

int main(void)

{

   SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);// 配置6MHz外部晶振作为主时钟

   SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);    // 使能PWM2和PWM3输出所在GPIO

GPIODirModeSet(GPIO_PORTD_BASE,GPIO_PIN_1,GPIO_DIR_MODE_OUT);

   GPIOPadConfigSet(GPIO_PORTD_BASE,GPIO_PIN_1,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);//PB0/PWM2和PB1/PWM3配置为4mA推挽模式

   GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_1,GPIO_PIN_1);

//GPIOPinWrite(GPIO_PORTH_BASE,GPIO_PIN_1,GPIO_PIN_1);

   SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);      // 使能PWM模块

   SysCtlPWMClockSet(SYSCTL_PWMDIV_1);             // PWM时钟配置:不分频

   GPIOPinTypePWM(GPIO_PORTD_BASE,GPIO_PIN_1);// PB0和PB1配置为PWM功能

   PWMGenConfigure(PWM_BASE, PWM_GEN_0,PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);// 配置PWM发生器1:加减计数

   PWMGenPeriodSet(PWM_BASE, PWM_GEN_0, 8000);     // 设置PWM发生器1的周期

   PWMPulseWidthSet(PWM_BASE, PWM_OUT_1, 5600);    // 设置PWM2输出的脉冲宽度

//    PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, 2800);    // 设置PWM3输出的脉冲宽度

   PWMOutputState(PWM_BASE,PWM_OUT_1_BIT,true);// 使能PWM2和PWM3的输出                  

   PWMGenEnable(PWM_BASE, PWM_GEN_0);              // 使能PWM发生器1,开始产生PWM方波

   for (;;)

   {

   }

}

  • 我试了一下这段代码,用EK-LM3S1968开发板,在我这里可以正常运行。

    能够看到PWM1有波形输出。

  •    楼主可把以下两段代码加上试下,有的情况下是需要手动配置管脚为PWM功能。

       GPIOPinConfigure(GPIO_PD0_M0PWM0);  

       GPIOPinConfigure(GPIO_PD1_M0PWM1);

  • 二楼,你是在LM1968上测试的吗?

    我在1968上测试无论如何都不行。同样的代码,在LM6432上正常。

    如上代码,我先在PD1/PWM1口做IO口输出高电平,正常。当再把此脚配置引脚为PWM功能时,马上变为低电平。可却无PWM输出。

    试了那个6432,却非常完美。

  • 是的,我是在1968上测的。(附件是我这编译的.bin文件)

    hello.zip
  • 经过下载测试,状态一样,无PWM输出。

    使用LM Flash Programmer,下载hello.bin。

    附件是我编译使用的文件夹。含.hex文件

    code.rar
  • 楼主,我们谈的是1968的PWM1有波形,pwm0无波形。

    我这里没有keil,没办法load你的hex文件。

    能否割线断开PWM1引脚和外部的连接看看有没有输出。把示波器探头直接放到1968的D1引脚看看是否有输出?

  • 如您所述,我在离D1/PWM1脚最近处割线,断开其与外围的所有连接,重新下载你给的.bin文件。用示波器测试,依然没有波形输出。

    我将同样的程序做对应的修改,测试了PG2/PWM0,PD1/PWM1,PH0/PWM2,PH1/PWM3,均没有波形输出。

    使用1968,我共焊接了3块PCB,全部是这样的现象。

    而同样的程序,测试LM3S6432的PD0/PWM0,PD1/PWM1却完全正常(示波器测试)

    记得以前曾看到LM3S系列有出过漏洞,不知道是不是与此有关。

    附件是我使用芯片的照片,请帮忙确认一个。

    而我试着尝试按3楼所述增加GPIOPinConfigure(GPIO_PD1_PWM1);编译却不能通过,这句该怎么写呢。GPIOPinConfigure估计是老的驱动,但可以用,可是GPIO_PD1_PWM1却提示无定义。

    还有我将再安装IAR进行测试。

    另,可否使用QQ的远程协助功能来进行现场调试呢?我的QQ:59282827。Email:yuzhuixin@163.com

    实在不行的放,告诉我地址,我把板子寄往技术支持中心也可以。

    这个问题整的我够呛,寻求支持。

    不胜感激!

  • 楼上,你的芯片是在哪买的?我没能发现类似的顶端标识流水线号(当然这个结果并不绝对)  

    再确认一个实验,例程包中有pwmgen,uart_echo,2个例程。请试试能否正常运行。

    http://www.ti.com/tool/sw-ek-lm3s1968

  • 现在可怎么办才好呢,摔东西的冲动都有了。头大。

    完全下载及仿真例程包中的pwmgen,uart_echo,无反应。

    重新编译pwmgen,uart_echo,下载及仿真测试仍无反应。

    剔除例程中的LED显示部分,重新编译pwmgen,uart_echo,下载测试及仿真测试均进入死循环,

    重新建立工程,剔除LED显示部分,编译pwmgen,uart_echo,下载及仿真测试,UART0,UART1,UART2均正常实现“镜子”功能。PWM0及PWM2依然如前,无输出。

    为了生活,还得继续。准备重新买LM3S1968了。

    LM3系列有什么方法(譬如ID之类)可以测试出是什么型号的片子吗?

    貌似使用H-JTAG时可以读出一个代码,但想来估计是ARM-M3内核的代码。

    在想是不是被JS拿其它同类的片子重新打标识了。找了下,LM3S系列含3个UART,100脚封装的有30多种呢,无从查起了。

  • 楼主,寄存器Device Capabilities 1中PWM位是否有置位。

    我们也没办法确认芯片真伪,TI通过渠道确认芯片是否为正品。

    www.ti.com.cn/.../gencontent.tsp

  • 楼主如果想知道器件型号,从DID0和DID1两个寄存器就可以读出来。这里有芯片的身份信息。 StellarisWare中有LM3S1968 PWM模块的示例代码。楼主可以用这个测试一下,工程附在附件里面了。

     

     

    pwmgen.rar
  • 你好,再次编译PWMGEN,测试仍然不行。使用IAR编译,故障依旧。

    如上所述,使用KEIL编译下列程序,下载仿真测试

    #include "LM3Sxxxx.h"
    #include "LM3S1968.h"//#include "LM3S6432.h"//

    int main(void)// 主函数(程序入口)
    { unsigned long nb=0;

      nb=SYSCTL_DID0_R;nb=0;
      nb=SYSCTL_DID1_R;nb=0;
      nb=SYSCTL_DC0_R;nb=0;
      nb=SYSCTL_DC1_R;nb=0;
      nb=SYSCTL_DC2_R;nb=0;
      nb=SYSCTL_DC3_R;nb=0;
      nb=SYSCTL_DC4_R;nb=0;
      for (;;) {}
    }

    读出DID0为0x1001002。依据LM3S1968的PDF文档,解读为:FURY-class等级 AQ2版本。为正常。

    读出DID1为0x11F2003C。依据LM3S1968的PDF文档,解读:0xF2不知道是什么芯片,(LM3S1968应该为0xB8);100芯LQFP应为0x02,此处为0x00.可气的是最后的2位00代表“工程样片”

    读出DC0寄存器为0x00FF007F。解读为256K FLASH,64K SRAM。正常。

    读出DC1寄存器为0x071133FF。解读,PWM模块存在。

    读出DC2寄存器为0x070F5337。解读后感觉正常,没有深究。

    读出DC3寄存器为0x90FF77CC。解读为:不包含所有的CCP引脚,不包含PWM故障检测脚,不包含PWM0,PWM1,PWM4,PWM5脚,却包含了PWM2,PWM3脚。这等JS,真想骂Y的。

    读出DC4寄存器为0x1100C0FF。解读后感觉正常,没有深究。

    对应的,又把手头的LM3S6432给读了一下。

    读出DID0为0x1001002。依据LM3S6432的PDF文档,解读为:FURY-class等级 AQ2版本。为正常。

    读出DID1为0x1075402E。依据LM3S6432的PDF文档,解读:0x75代表LM3S6432,0x02代表100芯LQFP,最后的2位0x10代表“全功能经测试芯片”

    读出DC0寄存器为0x007F002F。解读为96K FLASH,32K SRAM。正常。

    读出DC1寄存器为0x001131BF。解读,PWM模块存在。

    读出DC2寄存器为0x03071013。解读后感觉正常,没有深究。

    读出DC3寄存器为0x8F07B7C3。解读为:包含所有的CCP引脚,包含PWM故障检测脚,包含PWM0,PWM1脚,不包含PWM4,PWM5,PWM2,PWM3脚。与实际芯片完全相符。

    读出DC4寄存器为0x5000007F。解读后感觉正常,没有深究。

    看来这次栽在这个奸商手里了。软件,硬件找了一遍。电脑系统都重装了,芯片重新焊了,PCB线路也割了。唉,想着3个UART都正常,不会是芯片问题呢。

    谁能告诉我“0xF2”在FURY-class系列LM3S里代表什么型号的芯片呢?

    要赶快重新采购芯片了。郁闷!

  • 不知道它所包含的PWM2,PWM3脚隐藏在哪个IO口上呢。怪好奇的。

    我们国家的山寨水平能达到这种境界吗?要真是某个牛厂山寨出这么个芯片,能达到这水平和工艺。我全当给它捐资了。

  • 呵呵,这个应该还是TI的M3产品,F2这个型号我没找到对应的器件。也许是某颗比较早期的工程样片。

    建议楼主还是找正规渠道购买~

  • 楼上说的对。FURY-class的芯片列表在下面,只有2个PWM的芯片屈指可数。

    www.ti.com/.../mcuorphan.tsp

    楼主以后买芯片找下面列表中的公司:

    www.ti.com.cn/.../gencontent.tsp

  • 今天下午买的LM3S1968到货了。赶快焊接了调试。一下子PWM波形就出来了。悬着的心终于落了地。

    重新读了它的DID0/1,DC0/1/2/3/4.结果DID1为0X10B8402E,其中的0XB8代表了LM3S1968,这与PDF上一致。

    ,DC3为0X8FFFB7FF,其中0X8F代表CCP存在,最后的0XFF代表存在PWM0/1/2/3/4/5。与PDF实际功能一致。

    看来真得走正规渠道买这类东东啊。只是苦了我口袋里的“真金白银”了。