【MCU】【AT32】利用AT32离线固件包搭建AT32工程模板(纯手动)
一、简介
本文将介绍如何自己手动搭建基于MDK开发环境下的AT32工程模板。
AT32 系列是 ** 雅特力科技(Arterytek)** 推出的 32 位 ARM Cortex-M 系列微控制器(MCU),兼容 STM32 生态,提供高性能、低功耗和丰富的外设接口,广泛应用于工业控制、消费电子、IoT 等领域。
核心特点
-
高性能内核
- 基于 **ARM Cortex-M4/M3/M0+** 内核,最高主频达 240MHz(AT32F437 系列)。
- 支持 DSP 指令集和 FPU(浮点单元,部分型号),适合数字信号处理。
-
丰富的存储与接口
- Flash 容量:64KB~2MB,SRAM:16KB~512KB。
- 通信接口:UART、SPI、I2C、USB、CAN、Ethernet 等。
- ADC/DAC:12 位 ADC(最高 2.6MSPS)、12 位 DAC。
-
低功耗设计
- 支持多种低功耗模式(睡眠、停止、待机),最低功耗仅数 μA。
- 内置电源管理单元(PWR)和实时时钟(RTC)。
-
高安全性
- 支持代码加密(读保护、写保护)。
- 硬件 CRC 校验、随机数发生器(RNG)。
典型型号与应用场景
| 系列 | 内核 | 主频 | 典型应用 |
|---|---|---|---|
| AT32F403A | Cortex-M4 | 96MHz | 工业控制、电机驱动 |
| AT32F415 | Cortex-M4 | 120MHz | 高端消费电子、智能设备 |
| AT32F437 | Cortex-M4 | 240MHz | 高性能计算、通信网关 |
| AT32F103 | Cortex-M3 | 72MHz | 低成本应用、替代 STM32F103 |
| AT32F407 | Cortex-M4 | 168MHz | 网络设备、复杂控制 |
| AT32F235 | Cortex-M0+ | 48MHz | 超低功耗 IoT 设备 |
开发资源
-
软件开发工具
- AT32CubeMX:图形化配置工具,兼容 STM32CubeMX。
- AT32IDE:基于 Eclipse 的集成开发环境。
- 支持第三方工具:Keil MDK、IAR、GCC 等。
-
固件库与中间件
- 标准外设库(SPL):类似 STM32 的标准库。
- HAL 库:高级抽象层库,简化开发。
- RTOS 支持:FreeRTOS、RT-Thread、uC/OS 等。
-
硬件开发板
- AT-START-F403A:入门级开发板,适合基础学习。
- AT-PRO-F415:专业开发板,集成丰富外设。
与 STM32 的兼容性
- 代码兼容性高:大部分 STM32 代码可直接移植到 AT32(需修改头文件和少量寄存器配置)。
- 引脚兼容:部分型号与 STM32 引脚完全兼容,可无缝替换。
- 生态适配:支持 STM32 的开发工具和第三方库(如 FatFS、lwIP)。
适用场景
- 工业控制:电机驱动、PLC、传感器接口。
- 消费电子:智能家居、智能穿戴设备。
- 通信设备:网关、路由器、IoT 终端。
- 替代方案:作为 STM32 的高性价比替代方案(尤其在供应链紧张时期)。
学习资源
- 官方文档:用户手册、参考手册、数据手册。
- 示例代码:官方提供丰富的外设驱动示例。
- 社区支持:雅特力官方论坛、GitHub 开源项目。


二、工程文件结构搭建
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);
}
}
/**
* @}
*/
/**
* @}
*/

四、 实验验证


浙公网安备 33010602011771号