stm32f2xx UCOS-II 移植文档说明
1.文档介绍
本文档是介绍分布式远近端MCU-stm32f207vct6在IAR工程建立和UCOS-II移植过程及代码烧录方式。
2.软件安装 2.1安装IAR软件本次使用的IAR为7.20版本。
2.2安装JLINK烧录软件本次使用的烧写软件为编译仿真调试下载工具IAR、烧写工具J-link V490、串口烧写工具stm32f20xFlashLoeader。
3.IAR工程建立 3.1固件库的移植1、新建文件夹用于存放所有文件RU_LTE_GSM,在此目录下新建文件Project、Utilities;并将STM32固件库中的Libraries目录拷贝到此目录下
Project文件夹用来存储后面要建立的工作空间、工程、及单片机相关的系统配置文件
Libraries用来存储工程的需要的单片机内核文件及固件库自带的源文件和头文件
Utilities文件夹用来存储用户自己编写的程序文件,这些程序文件大部分跟用户使用的硬件或软件算法相关
2、在Utilities目录下导入固件库中的stm32f2xx_conf.h、stm32f2xx_it.c、stm32f2xx_it.h文件,新增main.c文件
3.2工作空间和工程的建立File -> New -> Workplace
Project -> Create New Project
新建一个空的ARM工程,点击OK,保存工程;结束后点击 File -> Save All 保存工作空间。
在工程中加入文件组,右键工程,Add -> Add Group...;新增分组CMSIS、EVARM、StdPeriph_Driver、User。建立好分组后,在各组中导入文件,右键文件分组,Add -> Add Files...;导入的文件如下:
CMSIS:Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F2xx下的system_stm32f2xx.c
EVARM:Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F2xx\startup\iar下的启动文件startup_stm32f2xx.s
StdPeriph_Driver:Libraries\STM32F2xx_StdPeriph_Driver\src下驱动相关的源文件
User:Utilities目录下的用户文件
配置好后如下图:
3.3IAR工程设置 3.3.1工程配置方式
1、Project -> Options...
2、快捷键Alt + F7
3、右键工程名 Options
3.3.2配置1、General Options需要配置的条目如下:
2、C/C++ Compiler需要配置的条目如下:
分别表示文件的搜索路径和一些宏定义:
$PROJ_DIR$ 表示工程所在的路径
这里使用的路径有:
$PROJ_DIR$
$PROJ_DIR$\..\Libraries\CMSIS\CM3\CoreSupport
$PROJ_DIR$\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F2xx
$PROJ_DIR$\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F2xx\startup\iar
$PROJ_DIR$\..\Libraries\STM32F2xx_StdPeriph_Driver\inc\
$PROJ_DIR$\..\Libraries\STM32F2xx_StdPeriph_Driver\src\
$PROJ_DIR$\..\Utilities\
宏定义为:
USE_STDPERIPH_DRIVER
STM32F2XX
4.UCOS-II移植 4.1UCOS-II源码介绍
下载支持stm32f2的UCOS-II官方源码,并解压。移植中主要使用Micrium目录下的Software下的UCOS-II下的两个文件。
4.2UCOS-II移植1.在整个工程分支中添加ucosii文件分支,并往当中添加port和src两个文件,分别往port和src下添加源码中UCOS-II下的PORTS和Source文件。
2.在IAR软件中,添加分组Ucos-II,并分别添加两个组别port和source两个文件分组分别添加上一步的所有文件。
3.进入在工程配置
添加源码路径:
$PROJ_DIR$\..\ucosii\port\
$PROJ_DIR$\..\ucosii\src\
编译宏:
ewarm
NDEBUG
4.启动代码修改
把启动startip_stm32f2xx.s的PendSV_Handler用OS_CPU_PendSVHandler替换
5.UCOS-II tick运行:在main中配置tick时钟添加函数 -> system_tick_init
代码实现为:
void system_tick_init(void)
{
if (SysTick_Config(SystemCoreClock / 1000)) {
while (1);
}
/* start up tick clock */
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
}
这里更改SystemCoreClock 的值为系统定义的,我们可以通过更改1000这个值的大小来改变系统运行的最小时间基准,如:
SystemCoreClock / 10 100ms
SystemCoreClock / 100 10ms
SystemCoreClock / 1000 1ms
SystemCoreClock / 10000 100us
SystemCoreClock / 20000 50us
SystemCoreClock / 100000 10us
SystemCoreClock / 1000000 1us
这一步后,在stm32f2xx_it.c中添加或者修改原来的tick处理函数 -> SysTick_Handler
修改后:
void SysTick_Handler(void)
{
OSIntEnter();
OSTimeTick();
OSIntExit();
}
6.此时已经可以开始进行UCOS-II的代码添加了
7.在main中tick运行后添加代码
OSInit();
OSTaskCreate();
OSStart();
系统就运行起来了,看看自己需要什么尽情的添加吧!
注意使用ucosii的代码时要记得添加头文件 #include "ucos_ii.h"
5.代码烧录 5.1 JLINK固件升级 5.1.1 固件升级
固件升级针对盗版的JLINK,掉固件灯不亮的情况下使用,如果上电后灯正常闪烁则没必要重新刷新固件。
1.安装固件升级软件sam-ba_2.15.exe
2.上电,使用USB线连接PC机与JLINK
3.打开JLINK上盖,使用镊子短接电路板上的ERASE两点,持续时间5s后断开两点,并断开电源(拔去USB线),擦除原有固件。
4.接上电路板中的TST两点,然后上电10s以上,拔掉USB线,断开TST两点,注意:是先短接TST然后上电,10s后,先断电后断开TST两点,这个顺序很重要
重新上电,打开SAM-BA v2.15软件,选择JLINK连接的串口,提示选择连接,选择芯片(板子)型号“AT91SAM7S64-EK”,连接(Connect)。
6.连接成功后,在“Download/UploadFile”区域中的“SendFileName”栏中选择固件文件“v8_ID-12345678.bin”,点击“SendFile”,开始下载固件到JLINK。
7.提示是否需要解锁Flash,点击“Yes”,不解锁无法重新下载。
8.等下载完毕后会提示是否启动写保护,点击“No”,写保护后不能自动升级,但是可以防止程序被冲掉,这里建议使用“No”。
9.退出SAM-BA v2.15,上电即可进行JLINK代码烧写
5.1.2更新Jlink序列号1. 断开JlinkV8后重新连接,在电脑上识别驱动。
2. 启动JlinkCommander软件,会提示要升级固件,暂时先不升级。此时可以看到识别出来JlinkV8的序列号S/N是-1,为出厂设置。
3. 在命令行中输入“exec setsn=XXXXXXXX”。其中XXXXXXXX是8个十进制数,可以随意设定,比如说是当天的日期。需要注意的是,写入序列号后将不能通过本命令更改序列号,除非重新写入固件恢复出厂设置。退出JlinkCommander软件。
设定成功如下图2所示:
图2 设定Jlink序列号
4. 断开JlinkV8后重新连接,重新启动JlinkCommander软件,提示升级,果断升级。JLinkV8固件安全升级为最新版。固件更新成功,如图3所示。
图3 固件更新成功
5.2 JLINK下载方式1.打开软件
2.配置工程
Options -> Projects setting
3.Target -> Connect
等待连接上
4.File -> Open data file...
打开相应的bin文件
5.Target -> Program & Verify
5.3 串口烧写方式
烧写软件:stm32f20xFlashLoeader
注意:擦除选项和烧写前对芯片的擦除扇区有关,对烧写芯片没有影响,刷新选项中的刷写完开启读保护会对芯片进行读保护。
选择相应的串口打开要烧写的bin文件,选择擦除选项和刷写选项,点击开始即可。可以参照上图配置。