前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >M-Arch(雅特力M4)【AT-START-F425测评】No.02 AT32F425开发环境搭建

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

作者头像
滚神大人
发布2022-04-18 14:17:38
4210
发布2022-04-18 14:17:38
举报
文章被收录于专栏:趣Python趣Python

前言

之前在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架构:

M-Arch架构

M-Arch IO目录层次:

M-Arch IO目录层次

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

代码语言:javascript
复制
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

编译通过

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

全局宏定义:

代码语言:javascript
复制
APPCODE,AT32,USE_STDPERIPH_DRIVER,AT32F425

头文件包含:

代码语言:javascript
复制
.\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的配置来用。

大功告成

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

代码语言:javascript
复制
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,如果要配置,按官方的例程:

代码语言:javascript
复制
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。】

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 趣Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 框架融合
  • 编译通过
    • 重点解决问题一:宏定义和头文件。
      • 重点解决问题二:FreeRTOS的编译问题。
      • 大功告成
      • 调试一把
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档