打印
[ZLG-MCU]

ST和Luminary对比

[复制链接]
4236|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jian14|  楼主 | 2008-4-12 09:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用了Luminary一段时间,感觉是很实在的单片机,这是我了解的一些情况:

ST Cortex-M3                 Luminary Cortex-M3

72MHz时钟,但FLASH是双周     50MHz单周期指令。
期的,实际指令只有36MHz。

12位AD,但有3bit误差,       10位AD,1bit误差。 
实际只有9位性能。

定时器较多。                 定时器较少。

PWM有死区、刹车功能。        PWM有死区、刹车功能。

有USB/DMA。                  zlgmcu说将要出USB/DMA。

没有以太网。                 带FIFO的以太网。

应用方案较多。               应用方案中等。

没有MPU。                    有MPU。

功耗低                       功耗较大。

EMC不清楚                    我测试过EMC非常好(估计是电源和地线多)

不带外部总线                 不带外部总线

 

相关帖子

沙发
香水城| | 2008-4-12 10:14 | 只看该作者

声明:此处对STM32的描述有误,过于片面


“72MHz时钟,但FLASH是双周期的,实际指令只有36MHz。”这种说法与事实严重不符!

请看下面两个帖子:
  STM32的代码,跑在ram里快?还是跑在flash里快?
  STM32从Flash中运行程序的时序分析 13、14楼


关于“50MHz单周期指令”的描述属于概念不清!

关于STM32的AD精度问题,我将另有说明,这个参数被许多人曲解。

使用特权

评论回复
板凳
zheng79| | 2008-4-12 10:24 | 只看该作者

我实测过

STM32跑72MHz比36MHz快不了一倍.
STM32跑72MHz可能比LM3S跑50MHz还要慢(浮点数运算)

测试环境
软件:keil ARM3.11 第二级优化 
LM3S硬件: EasyARM8962开发板 测量LED3闪烁周期
STM硬件:EK-STM32F开发板 测量LD2闪烁周期

LM3S程序:

#include "hw_memmap.h"
#include "hw_types.h"
#include "gpio.h"
#include "sysctl.h"

#define PINS    GPIO_PIN_6     //8962开发板LED3

#define    N (1024)

//int a[N],b[N],c[N];               //LED3输出周期76.4ms
float a[N],b[N],c[N];       //LED3输出周期401.4ms


void test(int t)
{
      int i;
    int count;

    for(count=0;count<50;count++)
    {
        t += count;
        for(i=0;i<N;i++)
        {
             a = t*i;
        }
    
        for(i=0;i<N;i++)
        {
             b = t+i;
        }
    
        for(i=0;i<N;i++)
        {
             c = a * b / (i+1);
        }
    }

}//void test(int t)



/*********************************************************************************************************
** Function name:      main
** Descriptions:       主函数
** input parameters:   无
** output parameters:  无
** Returned value:     无   
*********************************************************************************************************/
int main(void)
{
    SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_6MHZ);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

    GPIOPadConfigSet(GPIO_PORTB_BASE, PINS,
                     GPIO_STRENGTH_4MA,
                     GPIO_PIN_TYPE_STD);

    GPIODirModeSet(GPIO_PORTB_BASE, PINS, GPIO_DIR_MODE_OUT);
    while(1) {
        GPIOPinWrite(GPIO_PORTB_BASE, PINS, PINS);
        test(100);
        GPIOPinWrite(GPIO_PORTB_BASE, PINS, ~PINS);
        test(200);
    }
}
/*********************************************************************************************************
  END FILE
*********************************************************************************************************/



STM32程序:

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/


#define    N (1024)

GPIO_InitTypeDef GPIO_InitStructure;
ErrorStatus HSEStartUpStatus;

//int a[N],b[N],c[N];               //EK-STM32F开发板LD2输出周期73.0ms
float a[N],b[N],c[N];       //EK-STM32F开发板LD2输出周期420.2ms


void test(int t)
{
      int i;
    int count;

    for(count=0;count<50;count++)
    {
        t += count;
        for(i=0;i<N;i++)
        {
             a = t*i;
        }
    
        for(i=0;i<N;i++)
        {
             b = t+i;
        }
    
        for(i=0;i<N;i++)
        {
             c = a * b / (i+1);
        }
    }

}//void test(int t)

/*******************************************************************************
* Function Name  : RCC_Configuration
* Description    : Configures the different system clocks.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RCC_Configuration(void)
{
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1); 
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1); 

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* PLLCLK = 8MHz * 9 = 72 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

    /* Enable PLL */ 
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }
}

/*******************************************************************************
* Function Name  : NVIC_Configuration
* Description    : Configures Vector Table base location.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void NVIC_Configuration(void)
{
#ifdef  VECT_TAB_RAM  
  /* Set the Vector Table base location at 0x20000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif
}

/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{

#ifdef DEBUG
  debug();
#endif

    /* Configure the system clocks */
    RCC_Configuration();
    /* NVIC Configuration */
    NVIC_Configuration();

    // Enable GPIOC clock                                                       
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7 ;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);


    /* Infinite loop */
    while (1)
    {

        GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_SET);
        test(100);
        GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_RESET);
        test(200);
    }
}

#ifdef  DEBUG
/*******************************************************************************
* Function Name  : assert_failed
* Description    : Reports the name of the source file and the source line number
*                  where the assert error has occurred.
* Input          : - file: pointer to the source file name
*                  - line: assert error line source number
* Output         : None
* Return         : None
*******************************************************************************/
void assert_failed(u8* file, u32 line)

  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d ", file, line) */

  /* Infinite loop */
  while (1)
  {

  }
}
#endif

/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/






使用特权

评论回复
地板
香水城| | 2008-4-12 12:09 | 只看该作者

太好了,有人实测过

3楼的朋友,你能够把你的测试程序、编译软件版本和优化选项以及测试数据发表出来吗?这样大家都可以做一下,免得有人怀疑真假。

使用特权

评论回复
5
zlgarm| | 2008-4-12 12:18 | 只看该作者

谢谢Jian14的支持

    谢谢Jian14的支持。Luminary将要出带USB(OTG型)、DMA的片子;今年内也要出带外部超级总线的片子;功耗也会大大降低。未来的Luminary会越来越好!


(zlgarm_zsg)

使用特权

评论回复
6
香水城| | 2008-4-12 13:41 | 只看该作者

好奇地问一句:什么叫“外部超级总线”?

使用特权

评论回复
7
mohanwei| | 2008-4-12 14:40 | 只看该作者

这年头,吹牛都不用本的……把广告术语都带到技术领域了

使用特权

评论回复
8
mj2008| | 2008-4-12 20:38 | 只看该作者

iic 哪个标准呢?

iic 哪个标准呢?

使用特权

评论回复
9
mj2008| | 2008-4-12 20:44 | 只看该作者

还是两个都用熟了再对比为好

否则容易引起争端,不利于和谐社会的建设

使用特权

评论回复
10
zlgmcu| | 2008-4-14 09:00 | 只看该作者

Luminary芯片还具有成本优势,批量购买更便宜

(zlgmcu_wdx)

使用特权

评论回复
11
puppyh| | 2008-4-14 10:23 | 只看该作者

难道ST的芯片批量购买更贵?

这是好笑!

使用特权

评论回复
12
ST_ARM| | 2008-4-14 10:30 | 只看该作者

请教一个问题

在GPIOPadConfigSet(GPIO_PORTB_BASE, PINS, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD);中,设置GPIO_STRENGTH_4MA是什么意思?
请懂Luminary的指教.

使用特权

评论回复
13
wahahaabc| | 2008-4-14 12:44 | 只看该作者

希望luminary 将I2C总线 “通用调用地址”功能也加入

希望luminary 将I2C总线 “通用调用地址”功能也加入。

前些天发了EMAIL给美国luminary支持,他说:I2C总线的“通用调用地址”在《I2C总线规范》中是一个可选项,所以他们没有实现这个功能。但是这样的解释实在是说不过去,看看NXP的LPC2100系列,LPC2200系列,还有更早以前的P89LPC932都支持该功能。这不能不说是一大缺陷。

使用特权

评论回复
14
zlgarm| | 2008-4-14 17:26 | 只看该作者

可以

   13楼介绍的I2C“通用调用地址”我不熟悉,你可以把它的英文表述告诉我吗?我会向原厂直接提出此建议。

(zlgarm_zsg)

使用特权

评论回复
15
zhang..yb| | 2008-4-14 17:41 | 只看该作者

ST确性价比高

感觉 ST确性价比高,倾向用 ST.

使用特权

评论回复
16
wahahaabc| | 2008-4-14 18:02 | 只看该作者

RE 14楼

RE 14楼:
“通用调用地址”就是广播呼叫地址(general call address),只不过叫法不同而已。参见《I2C总线规范》(ZLG网站)P14

使用特权

评论回复
17
ijk| | 2008-4-14 21:24 | 只看该作者

1楼总结得很全面

我对ADC比较感兴趣,发现了点新情况:

根据ST出的新的数据手册 Rev 6,其中可以看出AD精度很高,请看,第65页:

Table 46. ADC accuracy - limited test conditions
Symbol Parameter               Typ    Max  Unit
ET     Total unadjusted error  ±1.3  ±2  LSB

关键是,Test conditions为:
fPCLK2 = 56 MHz,
fADC = 14 MHz, RAIN < 10 kΩ,
VDDA = 3 V to 3.6
VTA = 25 °C
Measurements made after
ADC calibration
VREF+ = VDDA

而这符合多数人的使用实际情况:VDDA = 3 V to 3.6

使用特权

评论回复
18
mj2008| | 2008-4-14 21:32 | 只看该作者

控制iic从模式回非应答位是否也是可选功能?

使用特权

评论回复
19
jerrywzf| | 2008-4-14 21:47 | 只看该作者

ST的JTAG会不会出现锁死,LM的特别麻烦!!!

使用特权

评论回复
20
pk.kong| | 2008-4-15 08:40 | 只看该作者

很热闹,进来学习。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

0

粉丝