打印
[AT32F423]

【AT-START-F423测评】 + 利用雅特力自己的IDE和WorkBench快速创建新工程

[复制链接]
736|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 suncat0504 于 2023-11-21 23:41 编辑

#申请原创# @21小跑堂   
  雅特力公司自己开发了用于单片机开发用的IDE和WorkBench。他的IDE是以Eclipse为蓝本的IDE,使用过Eclipse的一定会很喜欢,比如我。因为以前一直都是用Eclipse来开发基于Java的Web程序,对这个IDE比较熟练。而WorkBench是利用图形化界面,通过选择MCU的设备,进行一定的设置后,完成创建工程的工具,因为是全中文的,使用起来很方便我这种英语水平贼烂的人来使用。废话不多说,马上进入体验环节。这两个工具软件的下载连接可以在以下雅特力官网找到:
HYPERLINK "https://www.arterytek.com/cn/product/AT32F423.jsp#Resource"
  下载后需要解压。安装IDE的时候,需要先说明一下好啊,使用eclipse一般是需要JRE的,但雅特力提供的IDE安装程序中已经提供了,所以不需要另外安装。
安装IDE的过程中,没出啥幺蛾子,很容易就安装完成了。至于WorkBench是可以直接运行的,不需要安装。
现在我们试着用这两个工具建立一个点亮板载LED的项目。这里我是用的是AT-START-F423 V1.1评估板。启动Work Bench,出现以下界面:

选择适合你评估板的MCU型号后,选择“新建”:

构建完成后:

因为我们只想建立一个最简单的点亮LED的工程,对于AT-START-F423 V1.1评估板,板载了好几个LED,我们使用其中的一个,它占用的GPIO口为GPIOD13。因此,我们选择左侧“外设”中的“GPIO”,此时界面发生了变化,

在右侧的芯片管脚配置图形中,选择“PD13”,在弹出的菜单中选择“GPIO_OUTPUT”

因为是要驱动LED嘛。完成后中间区域就会出现设置好的GPIO内容。

因为不再使用其他设备,到这里我们就算设置好了,所以可以生成代码了,点击“生成代码”菜单中的“生成代码”,

项目名称中,我们输入“LED”,项目位置一栏,我们需要找一个保存项目的位置。为了方便以后的操作,我们暂停目前的操作,打开雅特力的IDE,在进入IDE之前会有这个窗体,要求我们建立一个工作空间,作为IDE管理项目的地方,您可以随意设置。我设置为IDE所在的文件夹中,建立一个workspace的子文件夹,

点击“Launch”,没有问题的话,就会机内IDE的开发界面。

,到这里我们已经建立起了Work Space。回到Work Bench窗体,继续设置建立代码用的设置页面,

点击“项目设置”右侧的“浏览”按钮,选择我们之前在IDE文件夹建立起来的“workspace”子文件夹,

点击“选择文件夹”,

勾选“MCU固件包”中的“使用*.zip”固件包。在这里我们暂停一下,去前面的官网下载适合于我们的MCU的一个文件,就我而言是用AT32F423,所以下载名为“AT32F423_Firmware_Library_V2.0.2.zip”,一定要和你的MCU匹配哦。下载后,记住下载位置,点击“浏览”,找到它即可。当然你也“选择下载版本”,下载后会不会自动配置好“固件包位置”,我不知道。

然后点击“确定”。

然后就等着代码被生成。

建议“确定”关闭这个窗体。如果点击“打开项目”,很可能触发其他应用打开这个项目。当然你也可以选择点击“开发文件夹”。然后你可以在workspace文件夹中看到多了一个“LED”的文件夹,这个就是刚生成的项目。
在项目代码生成完成后,我们就可以回到IDE窗体,导入这个刚刚生成的项目了。

在左侧Project Explorer的空白区域点击鼠标右键,在弹出的菜单中选择“Import”(当然也可以从菜单“Fie”中找到“Import”子菜单来执行),
在弹出的窗体中,选择“General”中的“Existing Projects into Workspace”,点击“Next”,

在下一个窗体的“Select root directory”中输入你的workspace所在的文件夹,

在项目列表区域就会出现“LED”项目。
在这里多说一句,如果你生成的项目不是在workspace文件夹内,最好勾选“Copy projects into workspace”这个选项,避免以后出麻烦。这个选项表示载入工程的时候,会同时把不在workspace中的项目,直接拷贝到这个文件夹。以后所有的改动都是直接反映到这个workspace文件夹中的。
勾选我们要进行开发的项目“LED”后,点击“Finish”即可。然后这个项目就进到“Project Explorer”区了。这是我们可以浏览这个项目的构成和文件内容了。
使用Work Bench,既方便我们按照实际需求建立工程,减少不必要的代码,又可以快速建立工程,只使用必要的库文件,而不用自己东拼西凑去组织了。
还有一点,如果配合SVN插件,建立数据仓库,可以随时利用SVN功能保存我们的代码,方便我们对待吗进行更复杂的管理。如果你了解SVN的强大功能,一定会爱不释手。实际上,在使用git工具之前,我就是一直在用SVN进行代码管理工程文件的。
LED工程的结构如下,

如图所示,需要的文件不多。
现在我们打开main.c,看看主体代码,

IDE的右侧区域是函数列表区,方便我们快速定位函数代码的位置。中间是代码区。IDE布局您也可以根据自己的喜好进行调整。
/* add user code begin Header */
/**
  **************************************************************************
  * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  * [url=home.php?mod=space&uid=247401]@brief[/url]    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.
  *
  **************************************************************************
  */
/* add user code end Header */

/* Includes ------------------------------------------------------------------*/
#include "at32f423_wk_config.h"

/* private includes ----------------------------------------------------------*/
/* add user code begin private includes */

/* add user code end private includes */

/* private typedef -----------------------------------------------------------*/
/* add user code begin private typedef */

/* add user code end private typedef */

/* private define ------------------------------------------------------------*/
/* add user code begin private define */

/* add user code end private define */

/* private macro -------------------------------------------------------------*/
/* add user code begin private macro */

/* add user code end private macro */

/* private variables ---------------------------------------------------------*/
/* add user code begin private variables */

/* add user code end private variables */

/* private function prototypes --------------------------------------------*/
/* add user code begin function prototypes */

/* add user code end function prototypes */

/* private user code ---------------------------------------------------------*/
/* add user code begin 0 */

/* add user code end 0 */

/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  take some delay for waiting power stable, delay is about 60ms with frequency 8MHz.
  * @param  none
  * @retval none
  */
static void wk_wait_for_power_stable(void)
{
    volatile uint32_t delay = 0;
    for(delay = 0; delay < 50000; delay++);
}

/**
  * [url=home.php?mod=space&uid=247401]@brief[/url] main function.
  * @param  none
  * @retval none
  */
int main(void)
{
    /* add user code begin 1 */

    /* add user code end 1 */

    /* add a necessary delay to ensure that Vdd is higher than the operating
    voltage of battery powered domain (2.57V) when the battery powered
    domain is powered on for the first time and being operated. */
    wk_wait_for_power_stable();
  
    /* system clock config. */
    wk_system_clock_config();

    /* config periph clock. */
    wk_periph_clock_config();

    /* nvic config. */
    wk_nvic_config();

    /* init gpio function. */
    wk_gpio_config();

    /* add user code begin 2 */

    /* add user code end 2 */

    while(1)
    {
        /* add user code begin 3 */

        /* add user code end 3 */
    }

作为提示,代码中标注为add user code的块,就是您可以自己追加代码的地方。当然您也可以在其他地方,根据需要加代码。自动生成的只是为了方便给您加个提示。
对于我们这个LED工程,就是为了点亮或者闪烁LED,所以需要加一些代码来完成。可以使用gpio_bits_write函数,来设置GPIOD13的输出电平。

修改主程序代码如下:
/* add user code begin Header */
/**
  **************************************************************************
  * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  * [url=home.php?mod=space&uid=247401]@brief[/url]    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.
  *
  **************************************************************************
  */
/* add user code end Header */

/* Includes ------------------------------------------------------------------*/
#include "at32f423_wk_config.h"

/* private includes ----------------------------------------------------------*/
/* add user code begin private includes */

/* add user code end private includes */

/* private typedef -----------------------------------------------------------*/
/* add user code begin private typedef */

/* add user code end private typedef */

/* private define ------------------------------------------------------------*/
/* add user code begin private define */

/* add user code end private define */

/* private macro -------------------------------------------------------------*/
/* add user code begin private macro */

/* add user code end private macro */

/* private variables ---------------------------------------------------------*/
/* add user code begin private variables */

/* add user code end private variables */

/* private function prototypes --------------------------------------------*/
/* add user code begin function prototypes */

/* add user code end function prototypes */

/* private user code ---------------------------------------------------------*/
/* add user code begin 0 */

/* add user code end 0 */

/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  take some delay for waiting power stable, delay is about 60ms with frequency 8MHz.
  * @param  none
  * @retval none
  */
static void wk_wait_for_power_stable(void)
{
    volatile uint32_t delay = 0;
    for(delay = 0; delay < 50000; delay++);
}

// 延时处理
void delay(uint16_t ms)
{
    uint32_t d = 0, n = 0;
    for(n = 0; n < ms; n++) {
        for(d = 0; d < 50000; d++) {

        }
    }
}
/**
  * @brief main function.
  * @param  none
  * @retval none
  */
int main(void)
{
  /* add user code begin 1 */

  /* add user code end 1 */

  /* add a necessary delay to ensure that Vdd is higher than the operating
     voltage of battery powered domain (2.57V) when the battery powered
     domain is powered on for the first time and being operated. */
  wk_wait_for_power_stable();
  
  /* system clock config. */
  wk_system_clock_config();

  /* config periph clock. */
  wk_periph_clock_config();

  /* nvic config. */
  wk_nvic_config();

  /* init gpio function. */
  wk_gpio_config();

  /* add user code begin 2 */

  /* add user code end 2 */

  while(1)
  {
        /* add user code begin 3 */
        gpio_bits_write(GPIOD, GPIO_PINS_13, FALSE);
        delay(10);
        gpio_bits_write(GPIOD, GPIO_PINS_13, TRUE);
        delay(10);

        /* add user code end 3 */
    }
}

只是追加了一个简单的、不精确的延时函数,以及在主函数的while中追加亮灭LED的代码。
编译没错误的话,在LED所在项目的文件夹下,会生成编译结果。在“project\AT32_IDE\Debug”下生成LED.hex文件。把这个文件下载到评估板上,运行起来后,应该就会看到LED闪烁了。

关于下载这一块,请参照“AT32 IDE 用户手册”中AT-Link 调试这一块进行设置。很简单。另外需要用typec电缆连接好电脑和你的评估板。在Project Explore中选择LED工程,选择菜单【Run】>【Debug Configurations…】打开调试配置对话框。双击 GDB AT-Link
Debugging,将自动创建 AT-Link 调试配置。

事实上,我也只是双击了“GDB AT-Link Debugging”后,就自动生成了LED的调试模式。这个时候,点击“Debug”,就会自动编译并下载程序到评估板,同时启动调试模式,可以单步运行程序的。运行开始后,会在main函数的第一条语句处进入暂停模式,你可以随意设置断点来跟踪程序的运行。如果是以“Run”模式启动的,那就是直接运行了,不会进入调试模式。

整个程序一旦运行起来,你应该能看到评估板上一个红色LED常亮,而另外一个红色LED是闪烁状态。这就是我们的程序中代码控制的结果。
怎么样,有了Work bench帮助开发,配合IDE,是不是简洁明了。个人感觉,比Keil可方便多了。毕竟eclipse这个大名鼎鼎的工具的便捷度,可真不是盖的。反正我是感觉非常爽!

   

LED.zip

6.03 MB

工程

使用特权

评论回复
评论
Aeddg 2023-10-25 16:33 回复TA
谢谢分享! 
沙发
muyichuan2012| | 2023-10-23 19:22 | 只看该作者
写的很详细,感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:大连伊飞特信息技术有限公司软件工程师
简介:本人于1993年毕业于大连理工大学。毕业后从事单片机开发工作5年,之后转入软件开发工作至今。

87

主题

2421

帖子

5

粉丝