M-Arch(雅特力M4)【AT-START-F425测评】No.02 AT32F425开发环境搭建

前言

之前在M-Arch中弄过STM32的M3,GD32的M4和M23,搭环境就顺风顺水了。

主要把出现的问题梳理和总结下。

pack直接按官方给的安装就行了,另外Keil的话要用KEIL5,KEIL5工程的后缀是uvprojx,arm编译器选 Use default compiler version 5,弄一个之前的工程改吧改吧就行了。

资源方面,AT32F425的几个特点:

  • 工作温度:-40°C至+105°C,工业级没问题

  • 不支持浮点运算,-_-

  • 没有DAC

  • 但支持红外线接口(IRTMR)

框架融合

M-Arch的基本思想是把IO进行封装和抽象,屏蔽厂家的差异性,从而达到IO跟业务解耦的目的。

M-Arch架构:

48c7b814cfa77be932cce71d3e6e81dd.png
M-Arch架构

M-Arch IO目录层次:

f80c7b21f759d69f16facf9657eb0505.png
M-Arch IO目录层次

没什么说的,再整一个AT32就好了,完美!!!

E:.
│  io.c
│
├─at32
│      interrupt.c
│      io_adc.c
│      io_at32.c
│      io_at32.h
│      io_crc.c
│      io_dac.c
│      io_fmc.c
│      io_gpio.c
│      io_rng.c
│      io_spi_rtc.c
│      io_system.c
│      io_timer.c
│      io_uart.c
│
├─gd32
│      interrupt.c
│      io_adc.c
│      io_crc.c
│      io_dac.c
│      io_fmc.c
│      io_gd32.c
│      io_gd32.h
│      io_gpio.c
│      io_rng.c
│      io_spi_rtc.c
│      io_system.c
│      io_timer.c
│      io_uart.c
│
├─gd32M0
│      interrupt.c
│      io_adc.c
│      io_crc.c
│      io_dac.c
│      io_fmc.c
│      io_gd32M0.c
│      io_gd32M0.h
│      io_gpio.c
│      io_rng.c
│      io_spi_rtc.c
│      io_system.c
│      io_timer.c
│      io_uart.c
│
├─include
│      io.h
│      io_adc.h
│      io_crc.h
│      io_dac.h
│      io_fmc.h
│      io_gpio.h
│      io_rng.h
│      io_spi.h
│      io_system.h
│      io_timer.h
│      io_uart.h
│
└─stm32
        interrupt.c
        io_adc.c
        io_crc.c
        io_dac.c
        io_fmc.c
        io_gpio.c
        io_rng.c
        io_spi_rtc.c
        io_stm32.c
        io_stm32.h
        io_system.c
        io_timer.c
        io_uart.c

编译通过

重点解决问题一:宏定义和头文件。

全局宏定义:

APPCODE,AT32,USE_STDPERIPH_DRIVER,AT32F425

头文件包含:

.\src\io\include;
.\src\common\include;
.\src\app\include;
.\src\freeRTOS\kernel\include;
.\src\freeRTOS\kernel\portable\RVDS\ARM_CM3;
.\src\firmwares\AT32F425_Firmware_Library\cmsis\cm4\core_support;
.\src\firmwares\AT32F425_Firmware_Library\drivers\inc;
.\src\firmwares\AT32F425_Firmware_Library\freeRTOSConfig;
.\src\firmwares\AT32F425_Firmware_Library\cmsis\cm4\device_support

重点解决问题二:FreeRTOS的编译问题。

AT32F425不支持浮点数运算,FreeRTOS中选一个M3的配置来用。

大功告成

至此,基本的编译环境算是搞定了(告警暂时不管了)。

compiling timers.c...
compiling port.c...
linking...
Program Size: Code=2384 RO-data=1064 RW-data=44 ZI-data=1948  
FromELF: creating hex file...
After Build - User command #2: fromelf --bin -o "E:\Gitee\m-arch\output_at\m_arch_app.bin" "E:\Gitee\m-arch\output_at\m_arch_app.axf"
".\output_at\m_arch_app.axf" - 0 Error(s), 12 Warning(s).
Build Time Elapsed:  00:00:11

调试一把

AT32的时钟默认不是96M,如果要配置,按官方的例程:

void system_clock_config(void)
{
  /* config flash psr register */
  flash_psr_set(FLASH_WAIT_CYCLE_2);
 
  /* reset crm */
  crm_reset();

  crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, TRUE);

  /* wait till hext is ready */
  while(crm_hext_stable_wait() == ERROR)
  {
  }

  /* config pll clock resource */
  crm_pll_config(CRM_PLL_SOURCE_HEXT, CRM_PLL_MULT_12);

  /* enable pll */
  crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE);

  /* wait till pll is ready */
  while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET)
  {
  }

  /* config ahbclk */
  crm_ahb_div_set(CRM_AHB_DIV_1);

  /* config apb2clk */
  crm_apb2_div_set(CRM_APB2_DIV_1);

  /* config apb1clk */
  crm_apb1_div_set(CRM_APB1_DIV_1);

  /* select pll as system clock source */
  crm_sysclk_switch(CRM_SCLK_PLL);

  /* wait till pll is used as system clock source */
  while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL)
  {
  }

  /* update system_core_clock global variable */
  system_core_clock_update();
}

单步运行,main函数中的while主循环也能正常运行,bingo。

【注:本文首发于eeworld。】

87215c7fb1b478d5cc6795c50adbc711.png 25d4ac45b9cb0179b7e6e55127dd8506.gif
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值