技术标签: 文档 ZigBee zstack BootLoad
一直想同归串口给CC2530下程序,就看了一下官方的文档。里面讲的不是太详细,加上自己英语也不好。理解不了,胡乱瞎搞了两天,就成功了。今天做下总结.
1 首先打开$INSTALL_DIR$\Projects\zstack\Utilities\BootLoad\CC253x\Boot.eww。就是boot文件。
打开
编译看有没有错误,有可能出现
Error[e72]: Segment PDATA_Z must be defined in a segment definition option (-Z, -b or -P)
我在网上找到了解决方法;http://feibit.com/forum.php?mod=viewthread&tid=9459
没有错误就可以下载进去了CC2530
第二部分,生成bin文件,
TI给的文档很详细,照着做就行了。有三点要注意
1 TI给的3条命令要修改成自己的名字(第一条不改) 命令之间加空格。
"$PROJ_DIR$\..\..\..\Tools\CC2530DB\oad.exe"
"$PROJ_DIR$\RouterEB\Exe\GenericApp.sim"
"$PROJ_DIR$\RouterEB\Exe\GenericApp.bin"
2定义关键字MAKE_CRC_SHDW
3. CRC Shadow 把他改成一样
最后连好串口,打开官方下载软件就下载成功了
下载进去就会发现第一次可以跳转。重启之后就不行了。这是因为有两个按键控制的跳转。
/**************************************************************************************************
* @fn main
*
* @brief C-code main functionality.
*
* input parameters
*
* None.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
void main(void)
{
vddWait(VDD_MIN_RUN);//检查电压
HAL_BOARD_INIT();//初始化时钟,按键 P0_1 p2-0
if (sbImgValid()) //代码是否有效 CRC Shadow 匹配
{
if ((SB_UART_DELAY == 0) || ResetWasWatchDog)//看门狗复位就会直接跳转到代码区(上电只执行一次串口下载)
{
sblJump();//接跳转到代码区
}
sblInit();//初始化串口
sblWait();//跳转等待
}
else
{
sblInit();//初始化串口
}
vddWait(VDD_MIN_NV);//检查写flsh电压
sblExec();//写入代码
HAL_SYSTEM_RESET();
}
/**************************************************************************************************
* @fn sblExec
*
* @brief Infinite SBL execute loop that jumps upon receiving a code enable.
*
* input parameters
*
* None.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
static void sblExec(void)
{
uint32 dlyCnt = 0;
while (1)
{
HalUARTPollISR();
if (sbExec() && sbImgValid())
{
SB_TURN_ON_LED1();
SB_TURN_ON_LED2();
// Delay to allow the SB_ENABLE_CMD response to be flushed.
for (dlyCnt = 0; dlyCnt < 0x40000; dlyCnt++)
{
HalUARTPollISR();//串口写代码
}
sblJump();//跳转
}
else if (dlyCnt++ & 0x4000)
{
SB_TOGGLE_LED1();
}
}
}
/**************************************************************************************************
* @fn sblInit
*
* @brief SBL initialization.
*
* input parameters
*
* None.
*
* output parameters
*
* None.
*
* @return None.
*/
static void sblInit(void)
{
halUARTCfg_t uartConfig;
/* This is in place of calling HalDmaInit() which would require init of the other 4 DMA
* descriptors in addition to just Channel 0.
*/
HAL_DMA_SET_ADDR_DESC0(&dmaCh0);
HalUARTInitISR();
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 0; // CC2530 by #define - see hal_board_cfg.h
uartConfig.rx.maxBufSize = 0; // CC2530 by #define - see hal_board_cfg.h
uartConfig.tx.maxBufSize = 0; // CC2530 by #define - see hal_board_cfg.h
uartConfig.idleTimeout = 0; // CC2530 by #define - see hal_board_cfg.h
uartConfig.intEnable = TRUE;
uartConfig.callBackFunc = NULL;
HalUARTOpenISR(&uartConfig);
SB_INIT_LEDS();
}
/**************************************************************************************************
* @fn sblJump
*
* @brief Execute a simple long jump from non-banked SBL code to non-banked RC code space.
*
* input parameters
*
* None.
*
* output parameters
*
* None.
*
* @return None.
*/
static void sblJump(void)
{
SB_TURN_ON_LED1();
SB_TURN_ON_LED2();
// while (SB1_PRESS || SB2_PRESS);判断按键
SB_TURN_OFF_LED1();
SB_TURN_OFF_LED2();
asm("LJMP 0x2000\n"); // Immediate jump to run-code.
HAL_SYSTEM_RESET();//复位
}
/**************************************************************************************************
* @fn sblWait
*
* @brief A timed-out wait loop that exits early upon receiving a force code/sbl byte.
*
* input parameters
*
* None.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
static void sblWait(void)
{
uint32 dlyCnt = SB_UART_DELAY;
while (1)
{
uint8 ch;
HalUARTPollISR();//读串口数据,等待命令。
if (HalUARTReadISR(&ch, 1))
{
if (ch == SB_FORCE_BOOT)
{
break;
}
else if (ch == SB_FORCE_RUN)
{
dlyCnt = 0;
}
}
if (SB1_PRESS)//如果P0_1为高就跳出(进入下载模式)
{
break;
}
if(SB2_PRESS || (dlyCnt-- == 0)) //( (dlyCnt-- == 0)) P2_0位高或者等待1分到就跳转
{
sblJump();
}
// RR-xing LED display while waiting.
if (dlyCnt & 0x2000)
{
SB_TURN_OFF_LED2();
SB_TURN_ON_LED1();
}
else
{
SB_TURN_OFF_LED1();
SB_TURN_ON_LED2();
}
}
SB_TURN_OFF_LED1();
SB_TURN_OFF_LED2();
}
/**************************************************************************************************
* @fn vddWait
*
* @brief Loop waiting for 16 reads of the Vdd over the requested limit.
*
* input parameters
*
* @param vdd - Vdd level to wait for.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
static void vddWait(uint8 vdd)
{
uint8 cnt = 16;
do {
do {
ADCCON3 = 0x0F;
while (!(ADCCON1 & 0x80));
} while (ADCH < vdd);
} while (--cnt);
}
/**************************************************************************************************
*/
文章浏览阅读88次。本文将介绍基于粒子群算法求解V图配电网电动汽车充电站选址优化问题算法流程。随着电动汽车的普及,充电站的建设变得越来越重要。如何在充电站数量有限的情况下,选取最优的位置,是一个需要解决的问题。本文将从以下几个方面进行介绍:一、问题描述 在V图配电网中,选取一些节点建设充电站,使得每个节点到最近的充电站的距离最小,同时保证所有充电站的容量之和不小于需求总量。该问题可以用数学模型表示如下:二、粒子群算法 粒子群算法是一种群体智能算法,模拟鸟群捕食时的行为,通过群体协作来寻找最优解。
文章浏览阅读339次。管理员登陆后,主要模块包括首页、个人中心、用户管理、医生管理、项目分类管理、项目信息管理、预约信息管理、检查信息管理、检查报告管理、药品分类管理、药品信息管理、电子病历管理、系统管理等功能。用户登陆后,主要模块包括首页、个人中心、预约信息管理、检查信息管理、检查报告管理、药品信息管理、电子病历管理等功能。return R.ok("密码已重置为:123456");return R.error("用户已存在");return R.error("账号不存在");return R.error("用户已存在");_毕设医院门诊系统
文章浏览阅读1.5k次。7-26 单词长度 (15 分)你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it’s算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。输入格式:输入在一行中给出一行文本,以.结束提示:用scanf("%c",…);来读入一个字符,直到读到.为止。输出格式:在一行中输出这行文本对应的..._c语言单词长度你的程度要读入
文章浏览阅读668次。QCustomPlot是一个基于Qt画图和数据可视化的C++控件。在Qt下的绘图工具有Qwt、QChart和QCustomPlot,置于选择哪个绘图工具各有优缺点。在绘制大量数据(10万个点以上)时选择QCustomPlot,在数据量比较小时,QChart和QCustomPlot相差无几。_qcustomplot下载
文章浏览阅读2.2k次,点赞16次,收藏24次。介绍了istio的功能以及什么是istio_istio
文章浏览阅读772次。我是在半年前接触到Python的,我之前没有一点编程基础,但在我自学的这半年里,我发现自己越来越喜欢他,迄今为止,Python都非常友好并且易于学习!它几乎可以做任何事,从简单的脚本创建、web、到数据可视化以及AI人工智能,越来越多的人投身到Python的怀抱中。接下来我给大家推荐3本自学Python必看的书籍,会帮你少走很多弯路!1.《A Byte of Python》没错,这是一本全英文版的..._学习pathon必看书
文章浏览阅读7k次,点赞12次,收藏17次。vue_elementui表头居中
文章浏览阅读2k次。这是对近年来基于深度学习的推荐系统的内容的一份综述,具体来说,大部分内容来自Deep Learning based Recommender System: A Survey and New Perspectives,我翻译和总结了其中的一些内容。同时,我有时也会阅读该survey提到的工作的原文,并对某些更具体的内容做一些补充。正文开始深度学习近年来在各个领域都被广泛应用,推荐系统也不例外,..._cnn 推荐系统文献
文章浏览阅读280次。利用蓝图更改一个物体的位置,发现本来两个应该相互阻挡的物体被穿过去了。为了不让相互阻挡的物体被穿过去,我们需要设置好蓝图节点的参数Sweep。_ue中怎么让阻挡消失
文章浏览阅读1.5k次。R13寄存器可以作为stack pointer,SP用于记录当前堆栈的地址,当在不同任务中切换时,SP用于保存上下文(一般来说,SP寄存器中的地址是当前正在执行的指令所在的地址)Cortex-m0中可以将SP细化成MSP和PSP:在应用程序中,需要特权访问时使用MSP,例如异常访问和系统内核访问;R14可用于链式寄存器,主要功能:(1)用于保存子程序或者一个程序调用的返回地址 (2)当程序调用结束后,将LR中的返回地址加载到程序计数器(PC)中。(1)R0-R7可以被任意指令访问。_arm cortex-m
文章浏览阅读8.7k次,点赞8次,收藏14次。前言本篇主要分析文书网爬虫思路,仅供个人学习之用,切勿用于任何商业用途。分析一中国裁判文书网首页地址:http://wenshu.court.gov.cn/ 随便点击一下搜索,进入: 进入第一个结果: 注意圆圈中的下载按钮,点击下载,一个.docx格式的文档就安安稳稳的躺在你的电脑硬盘上了。 到这里初步分析结束,我们自然就想到了爬虫的内容: [email protected]
文章浏览阅读10w+次,点赞3次,收藏5次。open3d实现图片、图像数据的读取显示和保存。_open3d 保存图片不显示