打印
[应用相关]

STM32W108无线传感器网络嵌入式uCOS-II的移植及实时环境监测

[复制链接]
1081|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fesxp|  楼主 | 2015-8-15 10:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fesxp 于 2015-8-15 10:41 编辑

基于STM32W108无线开发板,将ucos-ii v2.86内核移植到其上,并添加用户任务,实现对温湿度、超声波、声音、光敏等传感器的控制及实时数据采集。

14.1 开发环境说明      
硬件:STM32W108无线开发板,JLink烧写器,PC机、温湿度传感器、声音传感器、光敏传感器、超声波传感器等。

软件:IAR Embedded Workbench开发软件,SimpleMac Zigbee协议栈,ucos-ii的内核源码。
相关源文件更改
14.3部分对源码包“Micrium-ARM-uCOS-II-Cortex-M3.exe”进行解压之后会得到文件夹“Micrium”,从文件夹“Micrium\Software\EvalBoards\ST\STM3210B-EVAL\IAR\OS-Probe\”目录下拷贝os_cfg.h文件,覆盖工程目录app目录下的os_cfg.h文件即可,不需进行更改,文件内容在此就不列出。

分组port下包含四个文件os_cpu.hos_cpu_a.asmos_cpu_c.cos_dbg.c,下面分别进行相应的更改。
对于文件os_cpu.h将第109行语句“void OS_CPU_PendSVHandler(void);”注释掉,添加语句“voidPendSV_Handler(void);”,然后保存文件。
文件os_cpu_c.c中的部分函数需要进行更改,更改函数如下:
[tr]  [td=627]  
INT32U   OS_CPU_SysTickClkFreq(){return 6000000;} //新添加函数,CPU时钟频率
  
  
//更改方式:将函数OSTaskCreateHook()内容完全注释
  
#if  OS_CPU_HOOKS_EN > 0
  
void   OSTaskCreateHook (OS_TCB *ptcb)
  
{  
   /*
  
#if OS_APP_HOOKS_EN > 0
  
     App_TaskCreateHook(ptcb);
  
#else
  
     (void)ptcb; // Prevent compiler warning
  
#endif
  
   */
  
}
  
#endif
  
  
//更改方式:将函数OSTaskDelHook()内容完全注释
  
#if  OS_CPU_HOOKS_EN > 0
  
void  OSTaskDelHook (OS_TCB *ptcb)
  
{  
  /*
  
#if  OS_APP_HOOKS_EN > 0
  
    App_TaskDelHook(ptcb);
  
#else
  
     (void)ptcb; //Prevent compiler warning
  
#endif
  
   */
  
}
  
#endif
  
  
//更改方式:将函数OSTaskIdleHook  ()内容完全注释
  
#if  OS_CPU_HOOKS_EN > 0 && OS_VERSION >= 251
  
void   OSTaskIdleHook (void)
  
{
  
   /*
  
#if OS_APP_HOOKS_EN > 0
  
     App_TaskIdleHook();
  
#endif
  
   */
  
}
  
#endif
  
  
//更改方式:将函数OSTaskStatHook()内容完全注释
  
#if  OS_CPU_HOOKS_EN > 0
  
void   OSTaskStatHook (void)
  
{
  
   /*
  
#if OS_APP_HOOKS_EN > 0
  
     App_TaskStatHook();
  
#endif
  
   */
  
}
  
#endif
  
  
//更改方式:将函数OSTaskSwHook  ()内容完全注释
  
#if  (OS_CPU_HOOKS_EN > 0) && (OS_TASK_SW_HOOK_EN > 0)
  
void   OSTaskSwHook (void)
  
{
  
   /*
  
#if OS_APP_HOOKS_EN > 0
  
     App_TaskSwHook();
  
#endif
  
   */
  
}
  
#endif
  
  
//更改方式:将函数OSTCBInitHook  ()内容完全注释
  
#if  OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
  
void   OSTCBInitHook (OS_TCB *ptcb)
  
{
  
   /*
  
#if OS_APP_HOOKS_EN > 0
  
     App_TCBInitHook(ptcb);
  
#else
  
     (void)ptcb;  //避免编译警告
  
#endif
  
   */
  
}
  
#endif
  
  
//更改方式:将函数OSTimeTickHook  ()内容完全注释
  
#if (OS_CPU_HOOKS_EN > 0) &&  (OS_TIME_TICK_HOOK_EN > 0)
  
void   OSTimeTickHook (void)
  
{
  
/*   
  
#if OS_APP_HOOKS_EN > 0
  
     App_TimeTickHook();
  
#endif
  
*/
  
  
//添加新函数SysTick_Handler(),时钟中断处理函数
  
/******************************************************************************
  
功能描述:时钟中断处理函数
  
参数:无
  
返回值:无
  
******************************************************************************/
  
void  SysTick_Handler (void)
  
{
  
    OS_CPU_SR   cpu_sr;
  
    OS_ENTER_CRITICAL();  //通知uC/OS-II内核ISR已被启动
  
    OSIntNesting++;
  
    OS_EXIT_CRITICAL();
  
    OSTimeTick();  //调用uC/OS-II内核提供的OSTimeTick()函数
  
    OSIntExit();  //通知uC/OS-II内核我们退出ISR
  
}
14.6 实验结果及分析
将实验程序进行编译,如果出现错误进行调试更改,最后将程序烧写入STM32W108无线开发板,烧写完成之后,将开发板通过串口线与PC机相连,开始执行,按下S2按键开始创建子任务,串口输出信息如图所示。由图可知当前温湿度传感器检测的温度为29C,湿度为33RH,超声波传感器检测的距离为35cm,对光敏传感器和声音传感器分别操作,可以看到输出结果是有变化的,由结果可知创建的4个子任务都能正常执行,证明了实验结果的正确性,同样说明ucos-ii移植实验是成功的。


沙发
weiyuliang| | 2015-8-15 11:41 | 只看该作者
楼主这个传感器在哪里可以买到?传输距离、功耗、组网做的怎么样

使用特权

评论回复
板凳
fesxp|  楼主 | 2015-8-15 16:46 | 只看该作者
传输距离400m左右,可以做成多跳式进行转发,就能远距离传输,由于是基于ARM-Cortex技术,功耗很低,就是在原来STM32的基础上增加了无线射频协议栈,使用起来别简单。

使用特权

评论回复
地板
fesxp|  楼主 | 2015-8-15 16:47 | 只看该作者
传感器是从淘宝上找一家买的。

使用特权

评论回复
5
fesxp|  楼主 | 2015-8-16 07:36 | 只看该作者
内部集成了802.15.4协议栈

使用特权

评论回复
6
mmuuss586| | 2015-8-16 09:41 | 只看该作者
fesxp 发表于 2015-8-15 16:46
传输距离400m左右,可以做成多跳式进行转发,就能远距离传输,由于是基于ARM-Cortex技术,功耗很低,就是在 ...

穿墙能力怎么样呢?

使用特权

评论回复
7
fesxp|  楼主 | 2015-8-16 12:40 | 只看该作者
STM32W108无互射频,穿过单层墙是可以的,但是传输距离会缩短。如果用来穿墙,你可以偿试用带放大器的增强型天线试一下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎加入百度贴吧“STM32W108嵌入式无线传感器网络”

8

主题

19

帖子

1

粉丝