关于cc2530和z_stack的串口问题
在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,串口最后几个数据就会出错,但是不置的话,后面就不是低功耗模式了,这个要怎么解决啊?