286|9

59

帖子

0

TA的资源

一粒金砂(中级)

[雅特力AT-START-F437]开箱与开发环境搭建 [复制链接]

 

雅特力AT-START-F437这块板子最吸引我的地方是大sram(高达512KB)、大flash高达(4MB),sram大就是好笔者特喜欢,所以申请了这块板子。顺便同时申请了另外一块据说flash/swd锁死的AT-START-F403A开发板,去雅特力下载AT32F437的datasheet和reference manual同时把AT32F403A的文档也下载下来研究了,还想了几个解锁方法准备一一尝试,但最后好像给了另外一位版友,这是题外话。1月22日板子到手,不得不说板子比我想象的大不少(不知道是不是要把所有针脚全引出的缘故才这么大),是AT系的经典黑白色搭配。

 

开发板资源简介

MCU是雅特力的AT32F437ZMT7,带FPU的cortex-m4,最高频率可达288MHZ。sram最大可达512KB,flash有4MB之巨。3个i2c, 4个usart,  4个spi控制器,2个usb OTG, 一个以太网EMAC,2个can,2个sdio。说完MCU来看看板载资源:板载一AT-Link省得再外接调试器,板载一以太网口,一颗16MB的nor flash,一usb typeA接口用于OTG1 host,两usb micro接口分别用于usb OTG1和OTG2。可能板子设计年代(两年前?)缘故,还不是typeC口。

 

开发工具组合

笔者一直用linux做开发环境,这次也不例外。开发环境主要需解决toolchain、工程组织、烧录调试这三大问题。toolchain比较简单,安装arm-none-eabi-gcc即可;工程源码组织准备使用cmake;调试烧录呢准备使用openocd+gdb-multiarch,以笔者经验大部分情况下gdb基本用不上,更喜欢原始的printf,但是用jtag/swd调试器配合openocd或pyocd看寄存器在mcu开发时还是偶尔用得着的,比如程序跑飞后看看pc等寄存器。openocd/pyocd另外一个主要功能就是烧录固件,pyocd下载厂商的对应pack文件即可,openocd需要自己适配flash烧录算法,一般而言做mcu的openocd flash烧录算法还是需要一番功夫的,好在雅特力官方其实做了openocd的支持,其代码仓库在

https://github.com/ArteryTek/openocd

git clone后编译即可,并不复杂,在linux下编译openocd尤其方便,这里不再赘述。

 

Firmware Library

AT32F437的Firmware Library可从雅特力官网下载,笔者用的是最新的版本

 

CMakeLists.txt
接下来就是书写CMakeLists.txt了,CMakeLists书写这也是套路的,照着一些模板或者其它MCU用的改>一改就可以用了,只要注意两点:CPU是cortex-m4且带浮点,所以-mcpu,-mfloat-abi与-mfpu等CFLAGS不要写错了;二笔者发现雅特力的Firmware Library期望有MCU与开发板的一些宏定义比如AT32F437ZMT7与AT_START_F437_V1。最后笔者的点灯用例的CMakeLists如下

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
cmake_minimum_required(VERSION 3.20)

set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
set(CMAKE_AR arm-none-eabi-ar)
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_OBJDUMP arm-none-eabi-objdump)
set(SIZE arm-none-eabi-size)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

add_compile_options(-mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16)
add_compile_options(-ffunction-sections -fdata-sections -fno-builtin -fno-common -Wall -Wshadow -Wdouble-promotion -Werror -Wno-unused-parameter)

add_compile_options(-O3)

project(at32f437 C ASM)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_STANDARD 99)

include_directories(libraries/cmsis/cm4/core_support
                    libraries/cmsis/cm4/device_support
                    libraries/cmsis/dsp/include
                    libraries/drivers/inc
                    project/at_start_f437/examples/gpio/led_toggle/inc
                    project/at32f435_437_board)

add_definitions(-DAT32F437ZMT7 -DAT_START_F437_V1)

file(GLOB_RECURSE SOURCES
                "project/at32f435_437_board/at32f435_437_board.c"
                "project/at_start_f437/examples/gpio/led_toggle/src/*.c"
                "libraries/drivers/src/*.c"
                "libraries/cmsis/cm4/device_support/system_at32f435_437.c"
                "libraries/cmsis/cm4/device_support/startup/gcc/startup_at32f435_437.s"
                )

set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/libraries/cmsis/cm4/device_support/startup/gcc/linker/AT32F437xM_FLASH.ld)
add_link_options(
                -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16
                -Wl,--gc-sections,--print-memory-usage,-Map,${PROJECT_NAME}.map
                --specs=nano.specs
                --specs=nosys.specs)
add_link_options(-T ${LINKER_SCRIPT})

add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})

# target_link_libraries(${PROJECT_NAME}.elf printfloat)

set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
set(LST_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.lst)
add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
        COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
        COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
        COMMAND ${CMAKE_OBJDUMP} --all-headers --demangle --disassemble $<TARGET_FILE:${PROJECT_NAME}.elf> > ${LST_FILE}
        COMMAND ${SIZE} --format=berkeley $<TARGET_FILE:${PROJECT_NAME}.elf>
)

测试代码

板子拿到手感觉应该还是出厂时的固件,三LED轮流闪烁,挺奇怪的难道前面的版友寄回开发板时又恢复flash固件了?咱把官方的点灯代码改一改以测试openocd烧录是否正常:

int main(void)
{

  system_clock_config();
  at32_board_init();
  uart_print_init(115200);

  printf("Hello AT32F437\r\n");

  while(1)
  {
    at32_led_toggle(LED2);
    delay_ms(200);
    at32_led_toggle(LED3);
    delay_ms(200);
    at32_led_toggle(LED4);
    delay_ms(200);
  }
}

 

编译

cmake -B build
cmake --build build -j8

在build目录即有at32f437.bin文件生成,烧录到板子即可

 

openocd烧录

openocd -f interface/cmsis-dap.cfg -f target/at32f437xM_qspi.cfg -c "program build/at32f437.bin verify reset exit 0x8000000"

 

运行结果
串口有Hello AT32F437打印,三个LED交互闪烁,说明固件成功烧录了。

最新回复

大佬好像很喜欢cmake开发,可以了解下先楫的hpm sdk;   详情 回复 发表于 7 天前

赞赏

1

查看全部赞赏


回复
举报

7113

帖子

11

TA的资源

版主

我看到大佬您的openocd的.cfg好象是qspi的,这个文件是官方提供的,还是大佬您自己的编写的?

点评

这个cfg文件是雅特力那个openocd仓库里提供的  详情 回复 发表于 2025-2-4 11:45

回复

7113

帖子

11

TA的资源

版主

大佬是有空能分享一下openocd的下载算法的文章,先谢谢了。

点评

openocd烧录flash算法挺复杂的,虽然有固定套路:src/flash/nor下按openocd nor框架添加源码,然后openocd cfg文件指定用哪个算法,mcu的嵌入式flash或者spi/qspi nor flash都是如此。麻烦的地方在那个源码添加与改  详情 回复 发表于 2025-2-4 11:53

回复

59

帖子

0

TA的资源

一粒金砂(中级)

lugl4313820 发表于 2025-2-4 09:40 我看到大佬您的openocd的.cfg好象是qspi的,这个文件是官方提供的,还是大佬您自己的编写的?

这个cfg文件是雅特力那个openocd仓库里提供的


回复

59

帖子

0

TA的资源

一粒金砂(中级)

lugl4313820 发表于 2025-2-4 09:49 大佬是有空能分享一下openocd的下载算法的文章,先谢谢了。

openocd烧录flash算法挺复杂的,虽然有固定套路:src/flash/nor下按openocd nor框架添加源码,然后openocd cfg文件指定用哪个算法,mcu的嵌入式flash或者spi/qspi nor flash都是如此。麻烦的地方在那个源码添加与改动,需要根据芯片的flash控制器或spi/qspi控制器写代码,好在雅特力做得很好直接官方解决了他自家的mcu flash支持,别人直接拿来用

点评

我这几天在学习灵动的下载算法,头发掉完了都没有进度。  详情 回复 发表于 2025-2-4 12:16

回复

59

帖子

0

TA的资源

一粒金砂(中级)

测评结束后面准备写一篇文章介绍openocd flash的适配过程,就以at32f437为例解读雅特力官方的openocd代码如何?不过现在赶紧地按申请中的测评内容写测评文章,省得打分太低过不了还要寄回板子,笔者挺喜欢这块大sram、大flash板子的

点评

加油,期待你的大作,这块板子我也申请了,由大佬你拿下,非常有意义。  详情 回复 发表于 2025-2-4 12:16

回复

7113

帖子

11

TA的资源

版主

xhackerustc 发表于 2025-2-4 12:09 测评结束后面准备写一篇文章介绍openocd flash的适配过程,就以at32f437为例解读雅特力官方的openocd代码如 ...

加油,期待你的大作,这块板子我也申请了,由大佬你拿下,非常有意义。


回复

7113

帖子

11

TA的资源

版主

xhackerustc 发表于 2025-2-4 11:53 openocd烧录flash算法挺复杂的,虽然有固定套路:src/flash/nor下按openocd nor框架添加源码,然后openoc ...

我这几天在学习灵动的下载算法,头发掉完了都没有进度。


回复

1367

帖子

6

TA的资源

版主

大佬好像很喜欢cmake开发,可以了解下先楫的hpm sdk;

点评

确实hpm sdk就是用cmake组织的 PS: 只玩过hpm家最便宜的hpm5301,结合cherrydap当调试器用好使  详情 回复 发表于 7 天前
个人签名

1084534438 欢迎交流  [加油,一切皆有可能]


回复

59

帖子

0

TA的资源

一粒金砂(中级)

RCSN 发表于 2025-2-8 10:09 大佬好像很喜欢cmake开发,可以了解下先楫的hpm sdk;

确实hpm sdk就是用cmake组织的

PS: 只玩过hpm家最便宜的hpm5301,结合cherrydap当调试器用好使


回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表