微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 关于cc2530和z_stack的串口问题

关于cc2530和z_stack的串口问题

时间:10-02 整理:3721RD 点击:

在z_stack2007 中默认的是DMA模式的,且串口默认为0串口,我想通过预编译的方式来实现通过串口1的中断模式进行数据的交互。预想这样在休眠模式下通过外部中断来唤醒终端休眠。请问这样可以做到么?如果能做到请问怎么做呢?需要预编译什么呢?求各位大神帮帮忙

求大家帮帮忙啊。。。。

你好,

TI的协议栈版本没有Z-Stack 2007之类的,只有Z-Stack 2.5.1a/Z-Stack Home 1.2.0/...

#ifndef HAL_UART_ISR
#if HAL_UART_DMA           // Default preference for DMA over ISR.
#define HAL_UART_ISR  0
#elif (defined ZAPP_P2) || (defined ZTOOL_P2)
#define HAL_UART_ISR  2
#else
#define HAL_UART_ISR  1
#endif
#endif

CC2530在PM2模式支持Timer event和GPIO 中断唤醒,不支持串口唤醒,如果你想实现串口唤醒的话,在sleep前,把RX引脚,改成GPIO的配置就可以了。

谢谢VV的帮忙,我的是Z-Stack 2.5.1a/,那请问下怎么在sleep前,把RX引脚,改成GPIO的配置呢?能否帮下忙,谢谢

还有如果休眠模式是PM3呢  串口中断能唤醒休眠么?怎么让终端进入模式PM3呢?

当你把zgPollRate=0,当系统的timeout为0的时候,就会进入PM3

/* HAL_SLEEP_PM2 is entered only if the timeout is zero and
* the device is a stimulated device.
*/
halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;

/* DEEP sleep can only be entered when zgPollRate == 0.
* This is to eliminate any possibility of entering PM3 between
* two network timers.
*/

谢谢VV大神,还有个问题我用的是Z-Stack 2.5.1a/,那请问下怎么在sleep前,把RX引脚,改成GPIO的配置呢?能否帮下忙,谢谢

vv大神帮下忙啊。怎么配置成pgio呢?

请求大神帮帮忙啊。。。。。。。怎么把RX引脚配置成GPIO啊 这涉及到硬件么?

就是把UART串口的RX脚配置为GPIO,在用户手册上有管脚操作的内容: http://www.ti.com.cn/cn/lit/ug/swru191f/swru191f.pdf 80页

好的 我试试 谢谢您的帮忙

请问VV,把RX引脚,改成GPIO,在通过读取串口数据时候是不是要把把RX引脚改为回来啊?如果要改回来是不是在醒来的时候就改呢?

唤醒以后改的!

谢谢VV的回答,我用串口0能中断唤醒了 ,但是串口则不行,请帮我看看是不是配置出现了问题,

我在协议栈中修改了串口0 你能中断唤醒休眠,并且能从串口0 读出正确的数据,但是串口1就不行,我串口0的修改如下:在休眠前加入

P0SEL &= ~0X20; //外P0_5为通用接口模式

GPIO P0DIR &= ~0X20; //P0_5为输入

P0IEN |= 0X20; //开P0_5的IO中断使能

IEN1 |= 0X20; //开P0的中断

休眠后理解恢复到串口的原始状态,

P0SEL = 0x3C;

GPIO P0DIR =0X01;

P0IEN = 0X00;

IEN1 = 0X04;

hal_board_cfg.h头文件中,修改如下:

注掉原有的

#define HAL_UART_ISR  1//重新定义为ISR模式

这样就能从休眠中唤醒,

 

 

我串口1修改如下:在不休眠的时候,通过修改

hal_board_cfg.h头文件中,

#define HAL_UART_ISR  2//重新定义为ISR模式

这样就能正常读出数据,

加入休眠,我修改如下:

在休眠前加入

P1SEL &= ~0X80; //外P1_7为通用接口模式 GPIO P1DIR &= ~0X80; //P1_7为输入

  P1IEN |= 0X80; //开P1_7的IO中断使能   IEN2 |= 0X80; //开P1的中断

休眠后醒来后立即回复原始状态:

P1SEL ^= 0x80;

GPIO   P1DIR ^= 0X17;

  P1IEN &= ~ 0X00;

   IEN2 &= ~0X09;

但是这样不能从休眠中唤醒,更不要提读出数据了,请各位大神帮我看看是不是串口1的配置出现了问题,如果配置错误请问下周末配置,我对硬件不熟悉,谢谢

各位工程师帮帮忙吧!

你好,

串口用到的引脚,程序里面有没有其他地方有复用的。

你再协议栈上,串口1的功能有没有调通,先不管休眠的东西。

,谢谢VV大神的帮忙,我串口1能在不休眠的时候调通的 能正常收发数据的,就是加了休眠后,就不能正常使用了,请问下是不是我一下所加的配置不对呢

在休眠前加入

P1SEL &= ~0X80; //外P1_7为通用接口模式 GPIO P1DIR &= ~0X80; //P1_7为输入

  P1IEN |= 0X80; //开P1_7的IO中断使能   IEN2 |= 0X80; //开P1的中断

休眠后醒来后立即回复原始状态:

P1SEL ^= 0x80;

GPIO   P1DIR ^= 0X17;

  P1IEN &= ~ 0X00;

   IEN2 &= ~0X09;

醒来以后为什么没有跟串口相关的配置!

谢谢vv,我这就没有唤醒,这样的配置能不能唤醒呢?

P1SEL &= ~0X80; //外P0_5为通用接口模式 GPIO   P1DIR &= ~0X80; //P0_5为输入

  P1IEN |= 0X80; //开P0_5的IO中断使能   IEN2 |= 0X80; //开P0的中

而且我在唤醒后配置:

P1SEL ^= 0x80; //外P0_5为通用接口模式 GPIO   P1DIR ^= 0X17; //P0_5为输入

  P1IEN &= ~ 0X00; //开P0_5的IO中断使能   IEN2 &= ~0X09;

配置成串口对么,

你好,我配置完后串口0唤醒后数据会带有乱码,可能因为前面的被当做外部中断来触发,导致收到的数据不完整,你说你能读出正确的数据,是怎么做到的,还有你是在哪边恢复串口初始状态的,这个最近弄很久了,老是弄不好,看到的话希望能回复我下,谢谢

数据带乱码,可能是刚唤醒的时候,晶振还没有处于稳定状态,是不是前面一个字节是乱码的。

@VV  我这边测试的话基本都是前面4,5个字节都是乱码,接下来收到10多个字节正常的完后又是乱码

建议你先实现串口1的数据收发,实现收发之后,再来实现串口中断唤醒

你好,感谢你的回复,正常串口数据收发肯定是实现了才会来做这个事

设备通过UART唤醒以后,暂时把Rx弄成一直on的状态,不让他进入休眠

osal_pwrmgr_device( PWRMGR_ALWAYS_ON );

VV大神,我也有这样的问题不过我不是Rx脚唤醒,我另外有一个唤醒引脚,在按键那里写了osal_pwrmgr_device( PWRMGR_ALWAYS_ON );而且我的串口能接收字节了,现在的问题是,我在串口数据处理玩后如果把这个参数又置为battery,串口最后几个数据就会出错,但是不置的话,后面就不是低功耗模式了,这个要怎么解决啊?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top