658|0

41

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

雅特力车规级MCU-AT32A403A开发板评测 12 GCC Makefile 工程模板建立与程序下载 [复制链接]

本帖最后由 みずじ 于 2024-3-3 16:24 编辑

雅特力车规级MCU-AT32A403A开发板评测 12 GCC Makefile 工程模板建立与程序下载

1. 软硬件平台

  1. AT32A403A Board开发
  2. GCC Makefile
  3. Artery_ICP_Programmer_V3.0.13

2.编译工具链配置

搭建过程参考 https://gitee.com/End-ING/embedded-gcc-template

1. GNU Arm Embedded Toolchain交叉编译器

进入arm开发者官网,往下滑动选择下载解压可用的ZIP压缩包文件

下载链接: Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer

将下载好的压缩包文件解压在gcc-arm-none-eabi”文件夹中,并记住文件内“bin”文件的路径,后续需添加到系统环境变量Path中。

添加完环境变量后,进行测试,检测是否安装好。

2. 安装Mingw-w64 GCC

点击链接进入到SourceForge官网,往下翻可以找到很多版本的下载链接,选择红色框内型号即可,不同前后缀的具体差异请参考:

MinGW gcc下载链接及sjlj、dwarf、seh异同以及gcc安装_AMDDMA的博客-CSDN博客_seh和sjlj

下载链接:

MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net

同样,将下载好的文件解压到“gcc-arm-none-eabi”文件夹下,记住目录下的“bin”文件路径

进入“bin”文件内找到“mingw32-make”应用程序文件,复制一份并重命名为“make”。这么做有利于在命令行执行make指令,而不是输入mingw32-make。

添加完环境变量后,进行测试,检测是否安装好。

3.程序下载软件Artery_ICP_Programmer

(参考上面的教程,应该是使用OpenOCD去下载程序的,但是我下载失败了,目前没有找到解决方法,因此,决定使用其他的方法去下载程序,例如Artery_ICP_Programmer,Artery_ISP_Programmer)

下载地址https://www.arterytek.com/cn/support/index.jsp?index=5

程序下载方法合集

  • ICP(In-Circuit Programming)。它让用户不需要将已经安装的 MCU 从目标 PCB 取下就能够通过软 件控制来更新 MCU 的程序存储。
  • ISP在线编程(In-System Programming)。具有 ISP 功能的单片机芯片,可以直接在电路板上给芯片写入或者擦除程序。
  • UART: 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)。是一种全双工异步通信的串 行通讯端口(COM)。
  • USB: 通用串行总线(Universal Serial Bus)。是一种用于规范电脑与外部设备连接与通讯的外部总线标准。
  • DFU: (Device Firmware Upgrade)。是一种基于 USB 通讯的设备固件更新协议。

综上所述,基本的软件环境已经配置好。

3.Makefile文件编写(重点)

  1. ######################################
  2. # target
  3. ######################################
  4. TARGET = at32a403a_template
  5. ######################################
  6. # building variables
  7. ######################################
  8. # debug build?
  9. DEBUG = 1
  10. # optimization for size
  11. OPT = -Os
  12. #######################################
  13. # paths
  14. #######################################
  15. # Build path
  16. BUILD_DIR = build
  17. ######################################
  18. # source
  19. ######################################
  20. # C sources
  21. C_SOURCES =\
  22. Drivers/cmsis/cm4/device_support/system_at32a403a.c \
  23. Drivers/drivers/src/at32a403a_acc.c \
  24. Drivers/drivers/src/at32a403a_adc.c \
  25. Drivers/drivers/src/at32a403a_bpr.c \
  26. Drivers/drivers/src/at32a403a_can.c \
  27. Drivers/drivers/src/at32a403a_crc.c \
  28. Drivers/drivers/src/at32a403a_crm.c \
  29. Drivers/drivers/src/at32a403a_dac.c \
  30. Drivers/drivers/src/at32a403a_debug.c \
  31. Drivers/drivers/src/at32a403a_dma.c \
  32. Drivers/drivers/src/at32a403a_exint.c \
  33. Drivers/drivers/src/at32a403a_flash.c \
  34. Drivers/drivers/src/at32a403a_gpio.c \
  35. Drivers/drivers/src/at32a403a_i2c.c \
  36. Drivers/drivers/src/at32a403a_misc.c \
  37. Drivers/drivers/src/at32a403a_pwc.c \
  38. Drivers/drivers/src/at32a403a_rtc.c \
  39. Drivers/drivers/src/at32a403a_sdio.c \
  40. Drivers/drivers/src/at32a403a_spi.c \
  41. Drivers/drivers/src/at32a403a_tmr.c \
  42. Drivers/drivers/src/at32a403a_usart.c \
  43. Drivers/drivers/src/at32a403a_usb.c \
  44. Drivers/drivers/src/at32a403a_wdt.c \
  45. Drivers/drivers/src/at32a403a_wwdt.c \
  46. Drivers/drivers/src/at32a403a_xmc.c \
  47. Application/main.c \
  48. Application/at32a403a_int.c \
  49. Application/at32a403a_clock.c \
  50. BspDriver/at32a403a_board.c \
  51. # ASM sources
  52. ASM_SOURCES = \
  53. Application/startup_at32a403a.s \
  54. #######################################
  55. # binaries
  56. #######################################
  57. PREFIX = arm-none-eabi-
  58. GCC_PATH = /SoftwareApplication/gcc-arm-none-eabi/bin
  59. ifdef GCC_PATH
  60. CC = $(GCC_PATH)/$(PREFIX)gcc
  61. AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp
  62. CP = $(GCC_PATH)/$(PREFIX)objcopy
  63. SZ = $(GCC_PATH)/$(PREFIX)size
  64. else
  65. CC = $(PREFIX)gcc
  66. AS = $(PREFIX)gcc -x assembler-with-cpp
  67. CP = $(PREFIX)objcopy
  68. SZ = $(PREFIX)size
  69. endif
  70. HEX = $(CP) -O ihex
  71. BIN = $(CP) -O binary -S
  72. #######################################
  73. # CFLAGS
  74. #######################################
  75. # cpu
  76. CPU = -mcpu=cortex-m4
  77. # fpu
  78. FPU = -mfpu=fpv4-sp-d16
  79. # float-abi
  80. FLOAT-ABI = -mfloat-abi=hard
  81. # mcu
  82. MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)
  83. # macros for gcc
  84. # AS defines
  85. AS_DEFS =
  86. # C defines
  87. C_DEFS =\
  88. -D USE_STDPERIPH_DRIVER \
  89. -D AT32A403AVGT7 \
  90. -D AT_START_A403A_V1 \
  91. # AS includes
  92. AS_INCLUDES =
  93. # C includes
  94. C_INCLUDES = \
  95. -IDrivers/cmsis/cm4/core_support \
  96. -IDrivers/cmsis/cm4/device_support \
  97. -IDrivers/drivers/inc \
  98. -IApplication \
  99. -IBspDriver \
  100. # compile gcc flags
  101. ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
  102. CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
  103. ifeq ($(DEBUG), 1)
  104. CFLAGS += -g -gdwarf-2
  105. endif
  106. # Generate dependency information
  107. CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
  108. #######################################
  109. # LDFLAGS
  110. #######################################
  111. # link script
  112. LDSCRIPT = Application/AT32A403AxG_FLASH.ld
  113. # libraries
  114. LIBS = -lc -lm -lnosys
  115. LIBDIR =
  116. LDFLAGS = $(MCU) -u_printf_float -specs=nosys.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
  117. # default action: build all
  118. all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
  119. # #######################################
  120. # # build the application
  121. # #######################################
  122. # # list of objects
  123. # OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
  124. # vpath %.c $(sort $(dir $(C_SOURCES)))
  125. # # list of ASM program objects
  126. # OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.S=.o)))
  127. # vpath %.S $(sort $(dir $(ASM_SOURCES)))
  128. # $(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
  129. # <a href="https://bbs.eeworld.com.cn/home.php?mod=space&uid=43340" target="_blank">@echo</a> "[CC] $<"
  130. # @$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
  131. # $(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
  132. # @echo "[AS] $<"
  133. # @$(AS) -c $(CFLAGS) $< -o $@
  134. # $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
  135. # @echo "[HEX] $< -> $@"
  136. # @$(CC) $(OBJECTS) $(LDFLAGS) -o $@
  137. # @$(SZ) $@
  138. # $(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
  139. # @echo "[HEX] $< -> $@"
  140. # @$(HEX) $< $@
  141. # $(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
  142. # @echo "[BIN] $< -> $@"
  143. # @$(BIN) $< $@
  144. # $(BUILD_DIR):
  145. # @mkdir $@
  146. #
  147. #######################################
  148. # build the application
  149. #######################################
  150. # list of objects
  151. OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
  152. vpath %.c $(sort $(dir $(C_SOURCES)))
  153. # list of ASM program objects
  154. OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
  155. vpath %.s $(sort $(dir $(ASM_SOURCES)))
  156. $(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
  157. @echo "[CC] $<"
  158. @$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
  159. $(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
  160. @echo "[AS] $<"
  161. @$(AS) -c $(CFLAGS) $< -o $@
  162. $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
  163. @echo "[HEX] $< -> $@"
  164. @$(CC) $(OBJECTS) $(LDFLAGS) -o $@
  165. @$(SZ) $@
  166. $(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
  167. @echo "[HEX] $< -> $@"
  168. @$(HEX) $< $@
  169. $(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
  170. @echo "[BIN] $< -> $@"
  171. @$(BIN) $< $@
  172. $(BUILD_DIR):
  173. @mkdir $@
  174. #######################################
  175. # flash目前无法使用,openocd没有适配好
  176. #######################################
  177. flash:
  178. openocd -f atlink.cfg -f at32f403axx.cfg -c init -c halt -c "program build/$(TARGET).elf verify reset exit"
  179. #######################################
  180. # clean up
  181. #######################################
  182. clean:
  183. -del /q$(BUILD_DIR)
  184. #######################################
  185. # dependencies
  186. #######################################
  187. -include $(wildcard $(BUILD_DIR)/*.d)
  188. # *** EOF ***

make 测试

执行make命令,生成hex,bin,elf可执行文件。

4.程序下载(hex文件下载)

  1. 编写程序
  1. #include "at32a403a_board.h"
  2. #include "at32a403a_clock.h"
  3. __IO uint32_t time_cnt = 0;
  4. /**
  5. * @briefmain function.
  6. * @paramnone
  7. * @retval none
  8. */
  9. int main(void)
  10. {
  11. system_clock_config();
  12. at32_board_init();
  13. uart_print_init(115200);
  14. printf("Hardware_Init [ok] \r\n");
  15. printf("at_start_a403a board testing 2024-03-03 [ok]\r\n");
  16. printf("at_start_a403a board arm-gcc-makefile template [ok] \r\n");
  17. while(1)
  18. {
  19. printf("at32_led_toggle example start [ok] \r\n");
  20. at32_led_toggle(LED2);
  21. delay_ms(200);
  22. at32_led_toggle(LED3);
  23. delay_ms(200);
  24. at32_led_toggle(LED4);
  25. delay_ms(200);
  26. printf("at32_led_toggle example end[ok]\r\n");
  27. printf("usart printf counter: %u\r\n",time_cnt++);
  28. delay_sec(1);
  29. }
  30. }
  1. gcc下面的串口打印问题,在gcc下面使用_write进行定向printf。 (如果是从KEIL的例程printf打印无法在gcc工程中使用,因此需要修改,雅特力官方提供的工程模板就很好的兼容了两者,不需要我们去进行如何的操作,具体实现在at32a403a_board.c中)
  1. 打开Artery_ICP_Programmer,连接AT-Link(J-Link,板载AT-Link)

    连接成功后,会显示mcu芯片型号AT32A403AVGT7 存储器东西1024KB,AT-Link固件版本号

  1. 添加Hex文件,读取信息
  1. 下载程序

设置下载选项,擦除选项为:主存储器全擦除

如果选择了下载后启用访问保护,如果使用其他软件去下载时,会发现无法下载,需要解除访问保护,因此在这里,我们默认不选择,虽然软件会提示你要进行保护。

  1. 代码下载成功之后,需要重启开发板

(不知道为什么直接按下复位按键没有用,导致一直认为没有下载成功,最后直接把插在板子上的usb线重新插拔之后,发现程序中的led在闪烁,串口在打印log信息,说明没有问题)

此帖出自汽车电子论坛
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
ADI 有奖直播报名中~
直播时间:3月27日(周四) 上午10:00-11:30
直播主题:易于驱动SAR型ADC的原理、优点及应用介绍
好礼等你拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

北京市海淀区中关村大街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
快速回复 返回顶部 返回列表