【MCU】【AT32】利用AT32离线固件包搭建AT32工程模板(纯手动)

一、简介

       本文将介绍如何自己手动搭建基于MDK开发环境下的AT32工程模板。

       AT32 系列是 ** 雅特力科技(Arterytek)** 推出的 32 位 ARM Cortex-M 系列微控制器(MCU),兼容 STM32 生态,提供高性能、低功耗和丰富的外设接口,广泛应用于工业控制、消费电子、IoT 等领域。

核心特点

  1. 高性能内核

    • 基于 **ARM Cortex-M4/M3/M0+** 内核,最高主频达 240MHz(AT32F437 系列)。
    • 支持 DSP 指令集和 FPU(浮点单元,部分型号),适合数字信号处理。
  2. 丰富的存储与接口

    • Flash 容量:64KB~2MB,SRAM:16KB~512KB。
    • 通信接口:UART、SPI、I2C、USB、CAN、Ethernet 等。
    • ADC/DAC:12 位 ADC(最高 2.6MSPS)、12 位 DAC。
  3. 低功耗设计

    • 支持多种低功耗模式(睡眠、停止、待机),最低功耗仅数 μA。
    • 内置电源管理单元(PWR)和实时时钟(RTC)。
  4. 高安全性

    • 支持代码加密(读保护、写保护)。
    • 硬件 CRC 校验、随机数发生器(RNG)。

典型型号与应用场景

系列内核主频典型应用
AT32F403ACortex-M496MHz工业控制、电机驱动
AT32F415Cortex-M4120MHz高端消费电子、智能设备
AT32F437Cortex-M4240MHz高性能计算、通信网关
AT32F103Cortex-M372MHz低成本应用、替代 STM32F103
AT32F407Cortex-M4168MHz网络设备、复杂控制
AT32F235Cortex-M0+48MHz超低功耗 IoT 设备

开发资源

  1. 软件开发工具

    • AT32CubeMX:图形化配置工具,兼容 STM32CubeMX。
    • AT32IDE:基于 Eclipse 的集成开发环境。
    • 支持第三方工具:Keil MDK、IAR、GCC 等。
  2. 固件库与中间件

    • 标准外设库(SPL):类似 STM32 的标准库。
    • HAL 库:高级抽象层库,简化开发。
    • RTOS 支持:FreeRTOS、RT-Thread、uC/OS 等。
  3. 硬件开发板

    • AT-START-F403A:入门级开发板,适合基础学习。
    • AT-PRO-F415:专业开发板,集成丰富外设。

与 STM32 的兼容性

  • 代码兼容性高:大部分 STM32 代码可直接移植到 AT32(需修改头文件和少量寄存器配置)。
  • 引脚兼容:部分型号与 STM32 引脚完全兼容,可无缝替换。
  • 生态适配:支持 STM32 的开发工具和第三方库(如 FatFS、lwIP)。

适用场景

  • 工业控制:电机驱动、PLC、传感器接口。
  • 消费电子:智能家居、智能穿戴设备。
  • 通信设备:网关、路由器、IoT 终端。
  • 替代方案:作为 STM32 的高性价比替代方案(尤其在供应链紧张时期)。

学习资源

  • 官方文档:用户手册、参考手册、数据手册。
  • 示例代码:官方提供丰富的外设驱动示例。
  • 社区支持:雅特力官方论坛、GitHub 开源项目。

固件库下载链接

AT32的MDK支持包链接

二、工程文件结构搭建

1.新建文件夹AT32_Example,在其下再次新建文件夹

2.将\AT32F403AVGT7移植材料\libraries\drivers\src下的AT32外设c文件源码移植到firmware

3.将\AT32F403AVGT7移植材料\libraries\drivers\inc下的AT32外设h头文件放到/include/drivers/inc/下

 4.\AT32F403AVGT7移植材料\project\at32f403a_407_board下的board.c,board.h放在bsp下

5.\AT32F403AVGT7移植材料\libraries\cmsis\cm4\device_support\startup\mdk下的s文件是mdk环境下的启动文件放在cmsis

6.\AT32F403AVGT7移植材料\libraries\cmsis\cm4\device_support下的系统文件也放在cmsis下

 7.将\AT32F403AVGT7移植材料\project\at_start_f403a\templates\inc下的3个头文件放到user下

 8.将\AT32F403AVGT7移植材料\project\at_start_f403a\templates\src下的3个c文件放在user下

at32f403a_407_conf_template.h文件删掉,因为已经有at32f403a_407_conf.h

 9.在文件夹下再新建一个文件夹存放MDK工程启动文件

10.打开MDK并新建工程

11.选择对应支持芯片包

12.跳过在线配置工具,重新自定义工程结构组

13.添加文件

14.添加文件路径

15.再新建文件core

16.\AT32F403AVGT7移植材料\libraries\cmsis\cm4\core_support下的文件(不包括文件夹),放到core下,再导入路径

17.工程配置中添加宏定义

AT32F403AVGT7,USE_STDPERIPH_DRIVER,AT_START_F403A_V1

18.编译

三、代码编写

1.开启时钟初始化

2.延时初始化

3.gpio(Led)初始化

4.灯光闪烁

//低电平点亮
	  gpio_bits_toggle(GPIOD, GPIO_PINS_11|GPIO_PINS_12|GPIO_PINS_13);
	  delay_ms(1000);

main.c

/**
  **************************************************************************
  * @file     main.c
  * @brief    main program
  **************************************************************************
  *                       Copyright notice & Disclaimer
  *
  * The software Board Support Package (BSP) that is made available to
  * download from Artery official website is the copyrighted work of Artery.
  * Artery authorizes customers to use, copy, and distribute the BSP
  * software and its related documentation for the purpose of design and
  * development in conjunction with Artery microcontrollers. Use of the
  * software is governed by this copyright notice and the following disclaimer.
  *
  * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,
  * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,
  * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR
  * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,
  * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
  *
  **************************************************************************
  */

#include "at32f403a_407_board.h"
#include "at32f403a_407_clock.h"

/** @addtogroup AT32F403A_periph_template
  * @{
  */

/** @addtogroup 403A_LED_toggle LED_toggle
  * @{
  */

#define DELAY                            100
#define FAST                             1
#define SLOW                             4

uint8_t g_speed = FAST;

void button_exint_init(void);
void button_isr(void);

/**
  * @brief  configure button exint
  * @param  none
  * @retval none
  */
void button_exint_init(void)
{
  exint_init_type exint_init_struct;

  crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
  gpio_exint_line_config(GPIO_PORT_SOURCE_GPIOA, GPIO_PINS_SOURCE0);

  exint_default_para_init(&exint_init_struct);
  exint_init_struct.line_enable = TRUE;
  exint_init_struct.line_mode = EXINT_LINE_INTERRUPT;
  exint_init_struct.line_select = EXINT_LINE_0;
  exint_init_struct.line_polarity = EXINT_TRIGGER_RISING_EDGE;
  exint_init(&exint_init_struct);

  nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
  nvic_irq_enable(EXINT0_IRQn, 0, 0);
}

/**
  * @brief  button handler function
  * @param  none
  * @retval none
  */
void button_isr(void)
{
  /* delay 5ms */
  delay_ms(5);

  /* clear interrupt pending bit */
  exint_flag_clear(EXINT_LINE_0);

  /* check input pin state */
  if(SET == gpio_input_data_bit_read(USER_BUTTON_PORT, USER_BUTTON_PIN))
  {
    if(g_speed == SLOW)
      g_speed = FAST;
    else
      g_speed = SLOW;
  }
}

/**
  * @brief  exint0 interrupt handler
  * @param  none
  * @retval none
  */
void EXINT0_IRQHandler(void)
{
  button_isr();
}

/**
  * @brief  main function.
  * @param  none
  * @retval none
  */
int main(void)
{
  system_clock_config();
	
//  at32_board_init();
//  button_exint_init();
//  uart_print_init(115200);
//  printf("at32 mcu initialize ok.\r\n");
	
	delay_init();
	
	gpio_init_type gpio_init_struct;//结构体定义
	
	crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);//初始化GPIOD时钟
	gpio_default_para_init(&gpio_init_struct);//缺省值配置
	gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;//驱动强度
	gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;//推挽输出
	gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;//输出
	gpio_init_struct.gpio_pins = GPIO_PINS_11|GPIO_PINS_12|GPIO_PINS_13;
	gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
	gpio_init(GPIOD, &gpio_init_struct);
	
  while(1)
  {
//    at32_led_toggle(LED2);
//    delay_ms(g_speed * DELAY);
//    at32_led_toggle(LED3);
//    delay_ms(g_speed * DELAY);
//    at32_led_toggle(LED4);
//    delay_ms(g_speed * DELAY);
	  
	  //低电平点亮
	  gpio_bits_toggle(GPIOD, GPIO_PINS_11|GPIO_PINS_12|GPIO_PINS_13);
	  delay_ms(1000);
	  
  }
}

/**
  * @}
  */

/**
  * @}
  */

四、 实验验证

示例工程链接:Molesidy/AT32: This repository is used to store sample projects generated during the process of learning AT32.https://github.com/Molesidy/AT32

posted @ 2025-07-08 00:02  Molesidy  阅读(0)  评论(0)    收藏  举报  来源
//雪花飘落效果