您尚未登录。

楼主 #1 2020-05-09 18:27:21

缥缈九哥
会员
注册时间: 2020-05-09
已发帖子: 74
积分: 100

基于MDK-ARM的华芯微特SWM180+RTOS的JLINK开发环境建立--缥缈九哥

基于MDK-ARM的华芯微特SWM180+RTOS的JLINK开发环境建立

一,下载软件

1,mdk:MDK-523.EXE
    http://www.keil.com/fid/j34rw9wlgtwj1w3qhmw11ww3fwxbkks16d2wd1/files/eval/mdk523.exe

2,pack:Synwit.SWM32_DFP.1.0.0.pack
    通过代理商或者“yuanxihua@21cn.com”获取此Pack文件。
   
二,安装软件

1,右击 MDK-523.EXE 用管理员权限安装到 C:\Keil ;
2,安装 Synwit.SWM32_DFP.1.0.0.pack 到 C:\Keil\ARM\PACK\Synwit\SWM32_DFP\1.1.0  ;
3,打开MDK-ARM的IDE界面,在菜单的 “project”->“Manage”->“Pack Installer”下刷新在线安装 ARM下的所有PACK包 ;
4,在MDK-ARM的IDE界面,在菜单的 “File”->“License Management”里安装上RL-ARM和 MAK-ARM Plus 的版权。

三,建立工程

1,右击桌面“Keil uVision5” 打开MDK-ARM界面,在菜单的 “project”->“New uVision Project ...”下建立项目“9g-swm180”到:
    “D:\works\9G-CM0\9G-SWM180X”目录下面;

2,在弹出的“Select Device for Target ‘Target1’”选择里选择 “Synwit” 下的“SWM1800 Series”下的“SWM180xB”器件后点击“OK”
    现成项目器件的选择;
   
3,在弹出的“Manage Run-Time Environment”里选择“CMSIS”下的“CORE”和“RTOS(API)”下的“Keil RTX”,以及“Device”下的
    “Startup”及“Driver”下面的所有外设驱动,然后点击“OK”完成项目的建立;

3,在“D:\works\9G-CM0\9G-SWM180X”下建立“source”文件夹,并在MDK-ARM界面左侧“Project”下的“Target 1”下面的“Source Group1”
    修改成“source”文件夹;

4,在MDK-ARM界面“File”->“New...”建立一个空文件后保存到“D:\works\9G-CM0\9G-SWM180X\source”并命名为“main.c”,并且加入到项目的
    左侧的“source”文件夹中;

5,修改“main.c”文件内容如下:
    #include "SWM1800.h"
    int main(void)
    {
        SystemInit();
        GPIO_Init(GPIOA, PIN8 , 1, 0, 0, 0);//GPIOA.8 配置为输出引脚,推挽输出
        while(1){GPIO_InvBit(GPIOA, PIN8);for(int i=0; i<1000000; i++) {;}}
    }

四,配置工程

1,打开MDK-ARM的界面,在菜单的 “Project”->“Options for Target1 ...”下“Target”里选择上“Use MicroLIB”,在“Output”里选择上“Create HEX File”,
    在“Debug”里选择上“J-LINK/J-TRACE Cortex”,并在后面的“Setting”弹出的“Target device settings”里选择上“Cortex-M0”,后点击“OK”,
    退回的“Debug”里面“Port:”下选择端口“SW”,看到能识别IDCODE后点击 “确定”再“OK”完成项目设置;

五,执行工程

1,利用JLINK的SWD口连接目标板到电脑的USB口,在MDK-ARM的界面菜单的 “Debug”->“Start/Stop Session”进行编译下载代码,然后按F5全速
    运行程序。完成实现入门点灯全过程!

六,应用RTX

1,在“main.c”文件前部分加上头文件“#include "cmsis_os.h"”,定义两个进程号 “osThreadId idLED, idCOM;”声明两个进程“void TaskLED(void const *arg);”和“
    void TaskCOM(void const *arg);”定义两个进程“osThreadDef(TaskLED, osPriorityNormal, 1, 0);”和“osThreadDef(TaskCOM, osPriorityNormal, 1, 0);”
2,在“main()”函数中加入RTOS初始化“ osKernelInitialize();”以及创建进程“idLED = osThreadCreate(osThread(TaskLED), NULL);”和“idLED = osThreadCreate(osThread(TaskCOM), NULL);”
    并启动RTOS“osKernelStart();”;

3,添加两个进程实体后“main.c”如下:

    #include "SWM1800.h"
    #include "cmsis_os.h"

    osThreadId idLED, idCOM;
    void TaskLED(void const *arg);
    void TaskCOM(void const *arg);
    osThreadDef(TaskLED, osPriorityNormal, 1, 0);
    osThreadDef(TaskCOM, osPriorityNormal, 1, 0);
    void SerialInit(void);

    int main(void)
    {
        SystemInit();
        osKernelInitialize();
        idLED = osThreadCreate(osThread(TaskLED), NULL);
        idLED = osThreadCreate(osThread(TaskCOM), NULL);
        osKernelStart();
    }

    void TaskLED(void const *arg)
    {
        GPIO_Init(GPIOA, PIN8, 1, 0, 0, 0);    //GPIOA.8配置为输出引脚,推挽输出
        GPIO_Init(GPIOA, PIN9, 1, 0, 0, 0);    //GPIOA.9配置为输出引脚,推挽输出
        GPIO_ClrBit(GPIOA, PIN8);GPIO_SetBit(GPIOA, PIN9);
       
        while(1)
        {
            GPIO_InvBit(GPIOA, PIN8);GPIO_InvBit(GPIOA, PIN9);
            osDelay(500);
        }
    }
    void TaskCOM(void const *arg)
    {
        SerialInit();
        while(1)
        {
            printf("Hi, World!\r\n");
            osDelay(500);
        }
    }
    void SerialInit(void)
    {
        UART_InitStructure UART_initStruct;
       
        PORT_Init(PORTA, PIN0, FUNMUX_UART0_RXD, 1);    //GPIOA.0配置为UART0输入引脚
        PORT_Init(PORTA, PIN1, FUNMUX_UART0_TXD, 0);    //GPIOA.1配置为UART0输出引脚
       
        UART_initStruct.Baudrate = 57600;
        UART_initStruct.RXThresholdIEn = 0;
        UART_initStruct.TXThresholdIEn = 0;
        UART_initStruct.TimeoutIEn = 0;
        UART_Init(UART0, &UART_initStruct);
        UART_Open(UART0);
    }
    int fputc(int ch, FILE *f)
    {
        UART_WriteByte(UART0, ch);   
        while(UART_IsTXBusy(UART0));    
        return ch;
    }

4,在MDK-ARM的界面菜单的 “Debug”->“Start/Stop Session”进行编译下载代码,然后按F5全速
    运行程序。

离线

#2 2022-06-17 20:23:08

nufing
会员
注册时间: 2020-01-02
已发帖子: 79
积分: 78.5

Re: 基于MDK-ARM的华芯微特SWM180+RTOS的JLINK开发环境建立--缥缈九哥

不知道能不能像 STM32、GD32 那样,通过串口进行烧录程序 ?

最近编辑记录 nufing (2022-06-17 20:24:57)

离线

#3 2022-06-18 09:36:26

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 497
积分: 498

Re: 基于MDK-ARM的华芯微特SWM180+RTOS的JLINK开发环境建立--缥缈九哥

nufing 说:

不知道能不能像 STM32、GD32 那样,通过串口进行烧录程序 ?

可以的,有个专用的ISP 串口/Jlink烧写工具。

离线

#4 2022-06-18 09:48:18

Iven
会员
注册时间: 2018-04-10
已发帖子: 41
积分: 1

Re: 基于MDK-ARM的华芯微特SWM180+RTOS的JLINK开发环境建立--缥缈九哥

按照领导说的,没有图片说明,不合格

离线

#5 2022-06-21 20:31:24

nufing
会员
注册时间: 2020-01-02
已发帖子: 79
积分: 78.5

Re: 基于MDK-ARM的华芯微特SWM180+RTOS的JLINK开发环境建立--缥缈九哥

LinjieGuo 说:
nufing 说:

不知道能不能像 STM32、GD32 那样,通过串口进行烧录程序 ?

可以的,有个专用的ISP 串口/Jlink烧写工具。


资料太少了, 真不好搞。 开发板放了一段时间,现在不知道是自己操作步骤不对,还是开发板有问题。


ISP 上拉,

C2 C3 接 串口, TTL电平 的,

使用SYNWIT- PRG ,死活连不上

最近编辑记录 nufing (2022-06-21 20:31:41)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn