您尚未登录。

#1 Re: Cortex M0/M3/M4/M7 » Lauterbach TRACE32下载算法框架 » 2024-04-09 20:10:40

官方没有提供模板,从网上查找的文档自己写的

#3 Re: 上海航芯 » 上海航芯ACM32F403RET7开发板试用 » 2024-03-28 20:10:11

chran12345 说:

@wm20031015
how to compiler

keil mdk ac5

#5 Re: 全志 SOC » 【开源】无线J-Link(V831+XR829+AXP2101+STM32F072C8) » 2023-10-14 11:40:45

以前用orange pi zero刷ubuntu跑jlink linux驱动,挺好使。

#7 Re: Cortex M0/M3/M4/M7 » 灵动微 MCU 开发板赠送活动 » 2023-08-08 08:33:44

colin 说:

如果是公司要用的,会差这点钱吗?

公司自然会有代理免费送的。

#8 Re: Cortex M0/M3/M4/M7 » Lauterbach Trace32追踪hardfault » 2023-07-04 19:54:18

CmBacktrace也不错,如果keil的交互窗口更强大一点,应该是可以做到跳转到出问题的行

#10 Cortex M0/M3/M4/M7 » Lauterbach Trace32追踪hardfault » 2023-06-30 09:15:47

wm20031015
回复: 5

APM32F072研究了一下追踪hardfault,一个是通过网上的套路,从PC指针人工方式找到事故地点,另一个是通过trace32代码执行的回溯查找事故地点。

#11 Cortex M0/M3/M4/M7 » Lauterbach Trace32查看代码运行时间,代码覆盖率 » 2023-03-22 17:19:39

wm20031015
回复: 1

trace32高级点的应用:
1、代码执行时间,新版的power debug仿真器已经可以把log保存到本地电脑了

2、程序运行起来后,看下实际运行环境下的,代码覆盖覆盖率,

#12 Re: Cortex M0/M3/M4/M7 » 有趣的F103家族新添"不限量税后5.8" AIR32F103 和 MH32F103A » 2023-02-15 15:17:59

果然CAN和USB不能同时用,用USB转串口的DEMO,把CAN时钟打开,USB就不能识别了

#15 Re: 上海航芯 » 上海航芯ACM32F403RET7开发板试用 » 2022-12-31 09:26:43

acm32f4.pngacm32f41.png

lauterbach最新发布的svdconverter终于可以完整的把SVD文件转换成per文件了,调试MCU就可以使用per.view xxxx来加载,直接察看操作寄存器了。

svd_converter.rar

#16 Re: 上海航芯 » ACM32H5新产品需求及意见收集 » 2022-12-16 16:43:06

这主频对不起外设啊,外设全开的情况下,CPU忙得过来不

#17 Re: Cortex M0/M3/M4/M7 » Lauterbach TRACE32下载算法框架 » 2022-12-13 15:51:03

搞MCU开发JLINK是比较方便。很多都是拿来做逆向的,IDA+TRACE32,直接修改完调试,没更方便的了

#18 Re: RISC-V » WCH又搞了个性价比王炸CH32V003 » 2022-10-17 11:39:54

开发环境要迁移到IAR才行,GCC编译出来的文件比IAR大太多了

#20 Re: 上海航芯 » 上海航芯ACM32F403RET7开发板试用 » 2022-07-30 20:53:05

trace32 烧写的脚本 :

//连接MCU
SYStem.Down
SYStem.RESetOut
WAIT.500ms
SYStem.RESet
SYStem.CPU CortexM33
;SYStem.CPU Star
SYStem.JtagClock 30M
SYStem.CONFIG.DEBUGPORTTYPE SWD
SYStem.Option.DUALPORT ON
SYStem.Up

PRIVATE &i
&i=0x20000000
WHILE (&i<0x20001000)
(
  Data.Set &i 0
  &i=&i+1
)

FLASH.RESet
;Data.LOAD.Binary ~~/demo/arm/flash/word/acm32f4.bin 0x20000000
;Register.Set PC 0x20000004
;Go

//创建FLASH列表,64K,地址范围:0x00--0xffff,扇区大小:512byte,总线位宽:字,32位
;FLASH.Create 1. 0x0000--0x1fff 0x200 TARGET Long
FLASH.Create 1. 0x0000--0xffff 0x200 TARGET Long
;FLASH.Create 1. 0x0000--0x7ffff 0x200 TARGET Long

//bat32g13x编程程序加载到0x20000000,
FLASH.TARGET 0x20000000 0x20000800 0x200 ~~/demo/arm/flash/word/acm32f4.bin

//擦除FLASH
FLASH.Erase 1.

;编程FLASH
FLASH.Program 1.
Data.LOAD.auto F:\Project\demo\ACM32F4_ModulesDemo_Rev1.0.8\ModulesDemo\GPIO\demo\MDK_Project\Objects\Project.axf /path F:\Project\demo\ACM32F4_ModulesDemo_Rev1.0.8\ModulesDemo\GPIO\demo\MDK_Project\Objects
FLASH.Program off

List
Break

#21 Re: 上海航芯 » 上海航芯ACM32F403RET7开发板试用 » 2022-07-30 20:51:15

周六得空,把板子翻出来把坑填完,终于可以正常烧写仿真了。

acm32f4_config.h

#ifndef	__ACM32F4__H
#define __ACM32F4__H

#define CHIP_FLASH_SIZE     0x7ffff
#define FLASH_PAGE_SIZE     0x200

#define SCU_RCR             *(unsigned int *)(0x40010800UL + 0x00)  
#define SCU_CCR1            *(unsigned int *)(0x40010800UL + 0x10) 
#define SCU_CCR2            *(unsigned int *)(0x40010800UL + 0x14)
#define SCU_RCHCR           *(unsigned int *)(0x40010800UL + 0x24) 

#define SCU_RCR_REMAP_IMP   (1UL << 16)
#define SCU_RCHCR_RCHRDY    (1UL << 9)
#define SCU_RCHCR_RCH_EN    (1UL << 0)
#define SCU_RCHCR_RCH_DIV   (1UL << 8)
#define SCU_CCR2_DIVDONE    (1UL << 31)

#define EFC_CTRL            *(unsigned int *)(0x00100000UL + 0x00)
#define EFC_SEC             *(unsigned int *)(0x00100000UL + 0x04)
#define EFC_TERASE          *(unsigned int *)(0x00100000UL + 0x0c)
#define EFC_TPROG           *(unsigned int *)(0x00100000UL + 0x10)
#define EFC_STATUS          *(unsigned int *)(0x00100000UL + 0x14)   
#define EFC_INTSTATUS       *(unsigned int *)(0x00100000UL + 0x18)   
#define EFC_INTEN           *(unsigned int *)(0x00100000UL + 0x2C)    
#define FMC_FLSTS_OVF_Msk   0x01
#define SCB_VTOR           *(unsigned int *)(0xE000E000UL + 0x0D00UL + 0x08)

#define EFC_CTRL_PAGE_ERASE_MODE        (1 << 1)
#define EFC_CTRL_PROGRAM_MODE           (1 << 0)

#define EFC_STATUS_NVR4_LOCK            (1 << 4)
#define EFC_STATUS_NVR3_LOCK            (1 << 3)
#define EFC_STATUS_NVR2_LOCK            (1 << 2)
#define EFC_STATUS_NVR1_LOCK            (1 << 1)
#define EFC_STATUS_EFLASH_RDY           (1 << 0)

//计算编程等待时间,默认时钟为64M
#define SYS_CLK             (64)
#define FLASH_PROG_DELAY    (12 * SYS_CLK)
#define FLASH_ERSAE_DELAY   (6 * 1000 * SYS_CLK)

//系统时钟配置
#define system_init()   do{                 \
    SCU_RCR |= SCU_RCR_REMAP_IMP;           \
    EFC_CTRL = (EFC_CTRL & ~(0x1F << 7)) | (8 << 7); \
    if(0 == (SCU_RCHCR & SCU_RCHCR_RCH_EN)) \
    {                                       \
        SCU_RCHCR |=  SCU_RCHCR_RCH_EN;     \
        while(0 == (SCU_RCHCR & SCU_RCHCR_RCHRDY)); \
    }                                       \
    SCU_CCR1 = 0;                           \
    SCU_RCHCR &= (~SCU_RCHCR_RCH_DIV);      \
    while(0 == (SCU_RCHCR & SCU_RCHCR_RCHRDY));    \
    SCU_CCR2 = 0x0000;                      \
    while((SCU_CCR2 & SCU_CCR2_DIVDONE) == 0x00);  \
    EFC_TPROG = FLASH_PROG_DELAY;           \
    EFC_TERASE = FLASH_ERSAE_DELAY;         \
}while(0)

#define flash_readywait(value)  do{     \
    unsigned int x;                     \
    x = value;                          \
    do{                                 \
        x --;                           \
        if((EFC_STATUS & EFC_STATUS_EFLASH_RDY) != 0) break; \
    }while(x);                          \
}while(0)

#define flash_program()    do{                  \
    unsigned int i;                             \
    EFC_CTRL |= EFC_CTRL_PROGRAM_MODE;          \
    for(x=0; x<FlashParameter.size; x += 4)     \
    {                                           \
        EFC_SEC = 0x55AAAA55;                   \
        *(unsigned int *)(FlashParameter.addr + x) = *((unsigned int *)(&FlashParameter.data[x])); \
        flash_readywait(FLASH_PROG_DELAY);      \
    }                                           \
    EFC_CTRL &= ~EFC_CTRL_PROGRAM_MODE;         \
    FlashParameter.status = 0;                  \
}while(0)

#define flash_erasepage()   do{                 \
    EFC_CTRL |= EFC_CTRL_PAGE_ERASE_MODE;       \
    EFC_SEC = 0x55AAAA55;                       \
    *(unsigned int *) FlashParameter.addr = 0x00; \
    flash_readywait(FLASH_ERSAE_DELAY);         \
    EFC_CTRL &= ~EFC_CTRL_PAGE_ERASE_MODE;      \
    FlashParameter.status = 0;                  \
}while(0)

#define flash_erasechip()   do{                 \
    unsigned int x;                             \
    EFC_CTRL |= EFC_CTRL_PAGE_ERASE_MODE;       \
    for(x=0; x<FlashParameter.size; x += FLASH_PAGE_SIZE)   \
    {                                           \
        EFC_SEC = 0x55AAAA55;                   \
        *(unsigned int *)(x) = 0x00;            \
        flash_readywait(FLASH_ERSAE_DELAY);     \
    }                                           \
    EFC_CTRL &= ~EFC_CTRL_PAGE_ERASE_MODE;      \
    FlashParameter.status = 0;                  \
}while(0)

#endif

main.c

//***********************************************************************************************************
//  Ver 1.0
//      2022.04.02  1、新建文件。
//***********************************************************************************************************
//#include    "gd32l23x_config.h"
//#include    "bat32g135_config.h"
#include    "acm32f4_config.h"

//参数块定义
typedef struct{
    unsigned int  flashaddr;  //0x800,芯片起始地址
    unsigned int  flashwidth; //0x804,1=8bit,2=16bit,4=32bit
    unsigned int  width;      //0x808,数据总线位宽
    unsigned int  offset;     //0x80c,
    unsigned int  addr;       //0x810,FLASH操作地址
    unsigned int  size;       //0x814,擦除、写入字节数
    unsigned int  reserved;   //0x818,
    unsigned int  status;     //0x81c,in: 1=program, 2=erase, 5=chip erase, out: 0=o.k., 0x100=fail
    unsigned char   data[4096]; //0x820,缓冲区起始地址
}FlashParameter_Str;

static FlashParameter_Str FlashParameter __attribute__((at(0x20000800)));
//static FlashParameter_Str FlashParameter __attribute__((section(".ARM.__at_0x20000800")));

enum{
    FLASH_PROGRAM       = 0x01,
    FLASH_ERASE_PAGE    = 0x02,
    FLASH_CHIP_ERASE    = 0x05,
};

#pragma arm section code = ".ARM.__at_0x20000000"
//#pragma clang section text = ".ARM.__at_0x20000000"   //AC6
int main(void)
{     
    unsigned int errCnt = 65535;
    unsigned int tMs;
    
    system_init();
    while(1)
    {
        switch(FlashParameter.status)
        {
            case FLASH_PROGRAM:
                flash_program();                 
                return(0);
                //break;
                    
            case FLASH_ERASE_PAGE:
                flash_erasepage();
                return(0);
                //break; 
                    
            case FLASH_CHIP_ERASE:
                flash_erasechip();               
                return(0);
                //break; 
              
            default:
                tMs = 65535;
                while(tMs--);
                break;
        }
        if(errCnt > 0) errCnt--;
        else           return(1);
    }
}
#pragma arm section
//#pragma clang section

#24 Re: 上海航芯 » ACM32F403KEU7 手表设计中 » 2022-07-20 16:07:32

这个要用墨水屏才省电,OLED太耗电了,电池顶不住

#25 Re: Cortex M0/M3/M4/M7 » 有趣的F103家族新添"不限量税后5.8" AIR32F103 和 MH32F103A » 2022-07-13 20:13:00

qq9417058 说:
yelong98 说:

5.8干嘛不买雅特立,何苦去填坑新品

雅特力一批量,世强能给你搞死,签过合同的订单,都会改价叫你重签

法院告他

#26 上海航芯 » 上海航芯ACM32F403RET7开发板试用 » 2022-06-27 13:50:12

wm20031015
回复: 13

晕哥的淘宝设点买了个板,得空试了下开发板点灯测试正常,测试用trace32连接的时候提示内核问题,cortex m33还是star core?
qqq.png

选择cortex m33跑个点灯倒是没报错。
qqq1.png

写下载算法的时候遇到问题了,复位芯片后再下载,擦除时间算是正常的,程序运行的时候,不复位芯片下载,这个擦除时间很长,是重新配置时钟不成功?然后按64M配置的延迟导致出问题了?有大佬指点下,会不会芯片初始化有遗漏哪个寄存器没设置?

头文件如下:

#ifndef	__ACM32F4__H
#define __ACM32F4__H

#define CHIP_FLASH_SIZE     0x7ffff
#define FLASH_PAGE_SIZE     0x200

#define SCU_RCR             *(unsigned int *)(0x40010800UL + 0x00)  
#define SCU_CCR1            *(unsigned int *)(0x40010800UL + 0x10) 
#define SCU_RCHCR           *(unsigned int *)(0x40010800UL + 0x24) 

#define SCU_RCR_REMAP_IMP   (1 << 16)
#define SCU_RCHCR_RCHRDY    (1 << 9)
#define SCU_RCHCR_RCH_EN    (1 << 0)

#define EFC_CTRL            *(unsigned int *)(0x00100000UL + 0x00)
#define EFC_SEC             *(unsigned int *)(0x00100000UL + 0x04)
#define EFC_TERASE          *(unsigned int *)(0x00100000UL + 0x0c)
#define EFC_TPROG           *(unsigned int *)(0x00100000UL + 0x10)
#define EFC_STATUS          *(unsigned int *)(0x00100000UL + 0x14)   
#define EFC_INTSTATUS       *(unsigned int *)(0x00100000UL + 0x18)   
#define EFC_INTEN           *(unsigned int *)(0x00100000UL + 0x2C)    
#define FMC_FLSTS_OVF_Msk   0x01
#define SCB_VTOR           *(unsigned int *)(0xE000E000UL + 0x0D00UL + 0x08)

#define EFC_CTRL_PAGE_ERASE_MODE        (1 << 1)
#define EFC_CTRL_PROGRAM_MODE           (1 << 0)

#define EFC_STATUS_NVR4_LOCK            (1 << 4)
#define EFC_STATUS_NVR3_LOCK            (1 << 3)
#define EFC_STATUS_NVR2_LOCK            (1 << 2)
#define EFC_STATUS_NVR1_LOCK            (1 << 1)
#define EFC_STATUS_EFLASH_RDY           (1 << 0)

//计算编程等待时间,默认时钟为64M
#define SYS_CLK             (64)
#define FLASH_PROG_DELAY    (12 * SYS_CLK)
#define FLASH_ERSAE_DELAY   (6 * 1000 * SYS_CLK)

//系统时钟配置
#define system_init()   do{                 \
    SCU_RCR |= SCU_RCR_REMAP_IMP;           \
    EFC_TPROG = FLASH_PROG_DELAY;           \
    EFC_TERASE = FLASH_ERSAE_DELAY;         \
    if(0 == (SCU_RCHCR & SCU_RCHCR_RCH_EN)) \
    {                                       \
        SCU_RCHCR |=  SCU_RCHCR_RCH_EN;     \
        while(0 == (SCU_RCHCR & SCU_RCHCR_RCHRDY)); \
    }                                       \
    SCU_CCR1 = 0;                           \
    EFC_CTRL = 0x2400;                      \
}while(0)

#define flash_readywait(value)  do{     \
    unsigned int i;                     \
    i = value;                          \
    do{                                 \
        i --;                           \
        if((EFC_STATUS & EFC_STATUS_EFLASH_RDY) != 0) break; \
    }while(i);                          \
}while(0)

#define flash_program()    do{                  \
    unsigned int ii;                             \
    EFC_CTRL |= EFC_CTRL_PROGRAM_MODE;          \
    for(ii=0; ii<FlashParameter.size; ii += 4)     \
    {                                           \
        EFC_SEC = 0x55AAAA55;                   \
        *(unsigned int *)(FlashParameter.addr + ii) = *((unsigned int *)(&FlashParameter.data[ii])); \
        flash_readywait(FLASH_PROG_DELAY);      \
    }                                           \
    EFC_CTRL &= ~EFC_CTRL_PROGRAM_MODE;         \
    FlashParameter.status = 0;                  \
}while(0)

#define flash_erasepage()   do{                 \
    EFC_CTRL |= EFC_CTRL_PAGE_ERASE_MODE;       \
    EFC_SEC = 0x55AAAA55;                       \
    *(unsigned int *) FlashParameter.addr = 0x00; \
    flash_readywait(FLASH_ERSAE_DELAY);         \
    EFC_CTRL &= ~EFC_CTRL_PAGE_ERASE_MODE;      \
    FlashParameter.status = 0;                  \
}while(0)

#define flash_erasechip()   do{                 \
    unsigned int i;                             \
    EFC_CTRL |= EFC_CTRL_PAGE_ERASE_MODE;       \
    for(i=0; i<FlashParameter.size; i += FLASH_PAGE_SIZE)   \
    {                                           \
        EFC_SEC = 0x55AAAA55;                   \
        *(unsigned int *)(i) = 0x00;            \
        flash_readywait(FLASH_ERSAE_DELAY);     \
    }                                           \
    EFC_CTRL &= ~EFC_CTRL_PAGE_ERASE_MODE;      \
    FlashParameter.status = 0;                  \
}while(0)

#endif

main函数如下:

//***********************************************************************************************************
//  Ver 1.0
//      2022.04.02  1、新建文件。
//***********************************************************************************************************
//#include    "gd32l23x_config.h"
//#include    "bat32g135_config.h"
#include    "acm32f4_config.h"

//参数块定义
typedef struct{
    unsigned int  flashaddr;  //0x800,芯片起始地址
    unsigned int  flashwidth; //0x804,1=8bit,2=16bit,4=32bit
    unsigned int  width;      //0x808,数据总线位宽
    unsigned int  offset;     //0x80c,
    unsigned int  addr;       //0x810,FLASH操作地址
    unsigned int  size;       //0x814,擦除、写入字节数
    unsigned int  reserved;   //0x818,
    unsigned int  status;     //0x81c,in: 1=program, 2=erase, 5=chip erase, out: 0=o.k., 0x100=fail
    unsigned char   data[4096]; //0x820,缓冲区起始地址
}FlashParameter_Str;

static FlashParameter_Str FlashParameter __attribute__((at(0x20000800)));
//static FlashParameter_Str FlashParameter __attribute__((section(".ARM.__at_0x20000800")));

enum{
    FLASH_PROGRAM       = 0x01,
    FLASH_ERASE_PAGE    = 0x02,
    FLASH_CHIP_ERASE    = 0x05,
};

#pragma arm section code = ".ARM.__at_0x20000000"
//#pragma clang section text = ".ARM.__at_0x20000000"   //AC6
int main(void)
{     
    unsigned int errCnt = 65535;
    unsigned int tMs;
    
    system_init();
    while(1)
    {
        switch(FlashParameter.status)
        {
            case FLASH_PROGRAM:
                flash_program();                 
                return(0);
                //break;
                    
            case FLASH_ERASE_PAGE:
                flash_erasepage();
                return(0);
                //break; 
                    
            case FLASH_CHIP_ERASE:
                flash_erasechip();               
                return(0);
                //break; 
              
            default:
                tMs = 65535;
                while(tMs--);
                break;
        }
        if(errCnt > 0) errCnt--;
        else           return(1);
    }
}
#pragma arm section
//#pragma clang section

#32 Re: Cortex M0/M3/M4/M7 » Lauterbach TRACE32下载算法框架 » 2022-04-04 21:53:26

个人可以弄个山寨的,原装货价格确实高了点

#33 Re: Cortex M0/M3/M4/M7 » Lauterbach TRACE32下载算法框架 » 2022-04-03 23:31:32

trace32调试什么芯片,换对应的头子就可以了,楼上有Tricore的头子?我没有用过tricore的芯片不太清楚,手上还有两个支持arm的头子,也许可以交换一下

#34 Cortex M0/M3/M4/M7 » Lauterbach TRACE32下载算法框架 » 2022-04-02 22:36:11

wm20031015
回复: 11

近来用国产的ARM起来越多了,想着把TRACE32利用起来,调试、抓取数据非常的方便,花了一周的时间找资料,验证算法,终于搞定了。

//***********************************************************************************************************
//  Ver 1.0
//      2022.04.02  1、新建文件。
//***********************************************************************************************************
//#include    "stdio.h"

//参数块定义
typedef struct{
    unsigned int  flashaddr;  //0x800,芯片起始地址
    unsigned int  flashwidth; //0x804,1=8bit,2=16bit,4=32bit
    unsigned int  width;      //0x808,数据总线位宽
    unsigned int  offset;     //0x80c,
    unsigned int  addr;       //0x810,FLASH操作地址
    unsigned int  size;       //0x814,擦除、写入字节数
    unsigned int  reserved;   //0x818,
    unsigned int  status;     //0x81c,in: 1=program, 2=erase, 5=chip erase, out: 0=o.k., 0x100=fail
    unsigned char   data[4096]; //0x820,缓冲区起始地址
}FlashParameter_Str;
//关键地址,TRACE32的数据交互都在这个结构体里面
static FlashParameter_Str FlashParameter __attribute__((at(0x20000800)));


#define FLASH_PAGE_SIZE     512

enum{
    FLASH_PROGRAM       = 0x01,
    FLASH_ERASE         = 0x02,
    FLASH_CHIP_ERASE    = 0x05,
};

#define FMC_FLPROT          *(unsigned int *)(0x40020000UL + 0x20)
#define FMC_FLOPMD1         *(unsigned int *)(0x40020000UL + 0x04)
#define FMC_FLOPMD2         *(unsigned int *)(0x40020000UL + 0x08)
#define FMC_FLSTS           *(unsigned int *)(0x40020000UL + 0x00)
#define FMC_FLERMD          *(unsigned int *)(0x40020000UL + 0x0c)
#define FMC_FLSTS_OVF_Msk   0x01
#define SCB_VTOR           *(unsigned int *)(0xE000E000UL + 0x0D00UL + 0x08)

//关键行,把main函数放到RAM首地址,找到这个问题花了不少时间。
#pragma arm section code = ".ARM.__at_0x20000000"
int main(void)
{     
    unsigned int errCnt = 65535;
    unsigned int tMs;
    unsigned int i;
    unsigned char *ptr,*buf;
    
    while(1)
    {
        switch(FlashParameter.status)
        {
            case FLASH_PROGRAM:
                ptr = (unsigned char *)FlashParameter.addr;
                buf = &FlashParameter.data[0];
                
                if(FlashParameter.size > 0xffff)
                {
                    FlashParameter.size = 0xffff;
                }
                
                FMC_FLPROT = 0xF1;
                
                for(i=0; i<FLASH_PAGE_SIZE; i++) 
                {
                    FMC_FLOPMD1 = 0xAA;
                    FMC_FLOPMD2 = 0x55;  
                    *ptr++ = *buf++;    
                    // polling OVER Flag
                    while((FMC_FLSTS & FMC_FLSTS_OVF_Msk) == 0);
                    FMC_FLSTS |= FMC_FLSTS_OVF_Msk;
                }

                FMC_FLPROT = 0x00;
                FlashParameter.status = 0;
                return(0);
                break;
                    
            case FLASH_ERASE:
                FMC_FLERMD = 0x10;
                FMC_FLPROT = 0xF1;
                FMC_FLOPMD1 = 0x55;
                FMC_FLOPMD2 = 0xAA;  
                // Write data to start address of sector to trigger Erase Operation
                *(unsigned int *) FlashParameter.addr = 0xFFFFFFFF;
                
                // polling Erase Over Flag
                while((FMC_FLSTS & FMC_FLSTS_OVF_Msk) == 0);
                FMC_FLSTS |= FMC_FLSTS_OVF_Msk;
                FMC_FLERMD = 0x00;
                FMC_FLPROT = 0x00;
                FlashParameter.status = 0;
                return(0);
                break; 
                    
            case FLASH_CHIP_ERASE:
                FMC_FLERMD = 0x08;
                FMC_FLPROT = 0xF1;
                FMC_FLOPMD1 = 0x55;
                FMC_FLOPMD2 = 0xAA;  
                *(unsigned char *) FlashParameter.addr = 0xff;    
                // polling OVER Flag
                while((FMC_FLSTS & FMC_FLSTS_OVF_Msk) == 0);
                FMC_FLSTS |= FMC_FLSTS_OVF_Msk;
                FMC_FLPROT = 0x00;
                FlashParameter.status = 0;
                return(0);
                break; 
              
            default:
                tMs = 65535;
                while(tMs--);
                break;
        }
        if(errCnt > 0) errCnt--;
        else           return(1);
    }
}
#pragma arm section

flash.rar

#36 Re: Cortex M0/M3/M4/M7 » Lauterbach TRACE32下载调试STM32F103 » 2021-06-21 13:28:05

确实是这样,对于新手来说,一开始就写cmm文件有点难,都还没摸清操作套路,慢慢来就好了。

#37 Cortex M0/M3/M4/M7 » Lauterbach TRACE32下载调试STM32F103 » 2021-06-18 11:47:49

wm20031015
回复: 2

玩个高大上的装备,劳特巴赫Trace32来仿真调试STM32F103ZE,大概说一下流程,细节参考视频。
1.连接好仿真器与目标板,这高大上的设备还是要注意点,在断电状态连接调试头和20PIN线。都接好后将仿真器和板上电,这个顺序不知道有没有什么讲究,老师也没有说过要哪个先上电,按一般套路来吧。
2.打开trace32菜单的"TRACE32 ICD ARM USB".然后在命令行窗口输入两行命令,如下:
   sys.cpu stm32f103ze       //设置CPU为STM32F103ZE
   sys.up                            //连接CPU
   输入这两个命令后,最下面的状态栏“system dowm”就会变成“system ready”,表示连接目标芯片成功。
3.加载脚本"E:\T32\demo\arm\flash\stm32f10x.cmm" 将程序下载到FLASH,第一个窗口询问是否编程配置字,一般点取消就可以了,第二个窗口询问编程FLASH,按提示操作选择要烧写的文件,这个比较简单,等待完成就好了。
4.加载要调试的文件“Project.axf”和源文件的目录,命令行如下:
   data.load.auto E:\Project\STM32\GPIO\MDK-ARM\Obj\Project.axf /path E:\Project\STM32\GPIO
   加载的时候可能会遇到“bus error generated by cpu”这样的错误,没搞为懂为什么,跳过就可以。
5.点菜单“View -> List Source”打开代码窗口,点按钮栏的开始或者在命令行改善"go"命令,程序就跑起来了。

https://whycan.com/files/members/341/TRACE32%E4%B8%8B%E8%BD%BD%E8%B0%83%E8%AF%95STM32F103ZE.rar

#39 Re: 哇酷地摊(跳蚤市场) » 转行清仓 » 2021-03-08 18:43:19

预祝转行成功,

也要慢慢把手上用不上的东西清掉了。

#50 Cortex M0/M3/M4/M7 » ST-LINK V2/V2.1 DIY资料备份 » 2020-06-02 08:52:16

wm20031015
回复: 1

1、V2 支持STM32、STM8仿真,无串口。
2、V2.1支持STM32仿真,有串口,不支持STM8仿真。
3、使用包里的升级工具V2可以正常升级到最新版,V2.1如果使用CBT6也可以正常升级到最新版。
4、V2.1如果使用的是C8T6,要用里面的STLinkUpgradeHacked.jar,如果是正宗的C8T6,FLASH只有64K,会变砖,用recovery目录的ST-LinkUpgrade_V2.J27.M15还可以抢救一下。

ST-Link原理图和固件.zip

#56 Re: 好钜润半导体(TIKY) » 入坑TKM32F499 » 2020-04-29 14:04:05

入坑试了一下就吃灰了,没有调试口还是不方便。

#65 Re: Cortex M0/M3/M4/M7 » 各位好,问下Jlink教育版和BASE什么区别?想买一个教育版的 » 2017-10-18 14:23:12

刚买了一个,硬件是一样的,只是license不一样,可以通过exec addfeature  xxxx命令来添加,可以正常使用,因为SN与license不匹配会有个提示对话框出现。

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn