CW32快速开发入门

描述

一、 CW32工程模板创建

1.以参考标准库中GPIO例程为例来,来新建工程。

2.新建“GPIO”文件,在GPIO文件夹内建立user文件夹。

3.制MDK安装目录下的4个文件。

如“C:UsersAdministratorAppDataLocalArmPacksARMCMSIS5.7.0CMSISCoreInclude”目录下的“cmsis_armcc.h”“cmsis_compiler.h”“cmsis_version.h”“core_cm0plus.h”文件。在user文件夹下新建“SYSLIB”文件夹,并将这4个文件复制进去,如图1所示。

 

CW32

图1 复制文件

 

4.复制标准库中“CW32F030_StandardPeripheralLib_V1.8Examplesgpiogpio_input_outputUSER”目录下的SRC文件夹与INC文件夹到GPIO文件夹下的USER文件夹里。

5.将标准库中的Libraries、IdeSupport文件夹复制到新建的GPIO工程文件里面,如图2所示。

 

CW32

图2 复制到新建GPIO工程文件

 

6.打开MDK开发环境,选择“Project”/“New μVision Project”命令,新建工程,如图3所示。

 

CW32

图3新建工程文件

 

7.为工程输入名称,并保存在刚才所建立的GPIO文件夹内,之后会弹出选择芯片型号,如图4所示。

 

CW32

图4 选择ARMCMOP

 

8.单击“OK”按钮并进行保存。

9.右键单击“Target 1”,在弹出的菜单中选择“Manage Project items”命令,在工程目录中添加.c文件,如图5所示。

 

CW32

图5 添加.c文件

 

10.在出现的对话框中,增加user和Library文件夹,并添加标准库的.c源文件到Library的Groups,如图6所示。

 

CW32

图6 添加库.c文件

 

11.添加user文件夹下SRC文件夹下的文件到user Groups,如图7所示。

 

CW32

图7 添加user Groups

 

12.添加启动文件。启动文件“startup_cw32f030.s”在标准库“IdeSupportMDK”路径下,如图8所示。

 

CW32

图8 添加启动文件

 

13.单击“Options for Target‘Target 1’”项目,单击C/C++(AC6)选项卡,如图9所示,在Include Paths编辑框中添加标准库.H文件的路径,最后单击“OK”按钮完成头文件。

 

CW32

图9 添加头文件与.c文件

 

14.选择“Target”选项卡,在“ARM Compiler”框中选择“Use default compiler version 5”选项,然后单击“OK”,如图10所示。

 

CW32

图10 选择“Use default compiler version 5”选项

 

15.选择“Debug”选项卡,保持默认“Use Simulator”被选中。

注意:如果使用硬件调试器+目标板开发调试,请选中“Use”,然后修改调试器为“CMSIS-DAP Debugger”(使用CW-DAPLINK或DAP兼容调试器时选择该选项。如果使用其它调试器,请选择合适的对应选项),如图11所示。

 

CW32

图11 修改调试器为“CMSIS-DAP Debugger”

 

16.选择“Utilities”项,单击“Settings”按钮,在弹出的对话框中选择“FLASH Download”选项,如图12所示。

 

CW32

图12 选择“FLASH Download”选项

 

17.单击“Add”按钮,找到“CW32F030”的FLASH烧写算法,单击“Add”按钮添加,如图13所示。

 

CW32

图13 添加“CW32F030”的FLASH烧写算法

 

18.在“Project”菜单中选择“Rebuild all target files”以编译项目。如果项目编译成功,将显示以下窗口,如图14所示。

 

CW32

图14 成功编译CW32F030项目显示窗口

 

19.根据需要修改源代码。完成编写后,如需要硬件调试,则接入DAPLINK调试器到目标板上,并为目标板供电。然后在MDK IDE中,从调试菜单中选择“开始/停止”调试会话或单击工具栏中的“开始/停止”调试会话按钮,以对FLASH存储器进行编程并开始调试,如图15所示。

 

CW32

图15 对FLASH存储器进行编程并调试

 

20.MDK-ARM中的调试器可用于用C语言和汇编语言调试源代码,设置断点,以及监控各个变量和代码执行过程中发生的事件,如图16所示。

 

CW32

图16 MDK-ARM中调试器使用事件

至此,可以使用MDK初步开发CW32的相关应用了。

二、 快速点亮一个LED

以CW32F030为例,演示如何快速实现点亮一个LED。

1、软件准备

  • MDK开发环境已安装完成。
  • CW32固件库已下载。
  • 芯片PACK包已安装。
  • 工程模板已创建。
     

2、硬件准备

  • 准备一套调试器CW-DAPLINK(或其他兼容调试器)。
  • 一个CW32F030的核心板(具体实物可参考第8章内容)。
  • USB供电线。

硬件准备实物图,如图17所示。

 

CW32

图17 硬件准备

 

3、代码修改

CW32核心板上面有一个LED2指示灯,其控制端口连接至PC13,如图18所示。从图中不难分析,当PC13端口置为低电平时,LED指示灯亮。

 

CW32

图18 LED指示灯电路

打开2.4.1小节创建的工程模板,修改主程序代码如下。

int32_t main(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    CW_SYSCTRL- >AHBEN_f.GPIOC = 1;    //打开GPIOC时钟
    //设置PC13为输出模式
    GPIO_InitStruct.Pins = GPIO_PIN_13; //PC13端口
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //配置为推挽输出模式
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;//高速模式
    GPIO_Init(CW_GPIOC, &GPIO_InitStruct);//初始化端口
    PC13_SETLOW(); //置低PC13,点闪LED2  
    while (1);
}

在MDK环境下修改代码,如图19所示。

 

CW32

图19 指示灯控制的代码

 

4、下载测试

连接CWDAPLINK至目标核心板,并给核心板插入USB线供电,电源指示灯LED1红灯亮起,代表板子电源供电正常。请注意,此时LED2是熄灭状态,如图20所示。

 

CW32

图20 实物连接图

在MDK工程中,配置下载器为DAP类型的调试工具,如图21所示。

 

CW32

图21 下载器选项配置

5、下载并运行程序

下载程序完成后,按SW1红色复位键先进行复位,以确保程序的可靠运行。复位运行后,可以看到:核心板上面的电源指示灯LED1红灯仍然常亮,下面的LED2蓝灯受程序控制,已经被点亮,如图22所示。

 

CW32

图22 程序运行,LED2被点亮

如果要控制LED2灯熄灭,又该如何修改代码呢?

参考代码如下:

int32_t main(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    CW_SYSCTRL- >AHBEN_f.GPIOC = 1;    //打开GPIOC时钟
    //设置PC13为输出模式
    GPIO_InitStruct.Pins = GPIO_PIN_13; //PC13端口
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //配置为推挽输出模式
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;//高速模式
    GPIO_Init(CW_GPIOC, &GPIO_InitStruct);//初始化端口
    PC13_SETHIGH();//置高PC13,熄灭LED2  
    while (1);
}

 

如果要控制LED2灯闪烁,又该如何修改代码呢?

参考代码如下:

int32_t main(void)
{
  unsigned long i;
    GPIO_InitTypeDef GPIO_InitStruct;
    CW_SYSCTRL- >AHBEN_f.GPIOC = 1;    //打开GPIOC时钟
    //设置PC13为输出模式
    GPIO_InitStruct.Pins = GPIO_PIN_13; //PC13端口
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //配置为推挽输出模式
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;//高速模式
    GPIO_Init(CW_GPIOC, &GPIO_InitStruct);//初始化端口
  while (1)
    {
      for(i=0;i< 600000;i++);  //延时
      PC13_TOG(); //PC13指示灯IO反转
    }      
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分