基于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全速
运行程序。
离线
不知道能不能像 STM32、GD32 那样,通过串口进行烧录程序 ?
最近编辑记录 nufing (2022-06-17 20:24:57)
离线
按照领导说的,没有图片说明,不合格
离线
nufing 说:不知道能不能像 STM32、GD32 那样,通过串口进行烧录程序 ?
可以的,有个专用的ISP 串口/Jlink烧写工具。
资料太少了, 真不好搞。 开发板放了一段时间,现在不知道是自己操作步骤不对,还是开发板有问题。
ISP 上拉,
C2 C3 接 串口, TTL电平 的,
使用SYNWIT- PRG ,死活连不上
最近编辑记录 nufing (2022-06-21 20:31:41)
离线
这家公司是真的好,找遍整个官网,就是找不到keil 5的pack包.
奇了怪了.
离线
这家公司是真的好,找遍整个官网,就是找不到keil 5的pack包.
奇了怪了.
华芯微特的资料挺全的,例程也很好使,做开发硬件部分的代码直接从例程里copy过来就行。这一点做的挺赞的。
离线
需要注意的是硬件I2C有坑,复位都不能解决,必须要掉电。用到I2C的小伙伴记得用IO来模拟。
离线