CC2530 zstack 3.0.2 用的是串口0,P0.2和P0.3脚
P0.4和P0.5作为LED的控制,测试时发现P0.5接的LED灯在串口来数据的时候会闪一下
这是为什么?MT_UART_DEFAULT_OVERFLOW 已经设为FLASE了
预编译里
ZTOOL_P1
MT_TASK
串口的初始化如下,
void initUart0()
{
halUARTCfg_t uartConfig;
/* Initialize APP ID */
App_TaskID = 0;
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_9600;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 0;
uartConfig.rx.maxBufSize = 128;//默认128;
uartConfig.tx.maxBufSize = 128;//默认128;
uartConfig.idleTimeout = 6;//默认6
uartConfig.intEnable = FALSE; uartConfig.callBackFunc = uartRxCb;
HalUARTOpen (HAL_UART_PORT_0, &uartConfig);
}
Viki Shi:
这里有一个串口的例子,供参考:e2echina.ti.com/…/175480
user5367314:
回复 Viki Shi:
串口使用是没问题的,只是P0.5脚作为IO使用,连的是LED,
在串口接收数据的时候LED会闪烁,MT_UART_DEFAULT_OVERFLOW 已经设为FLASE
YiKai Chen:
回复 user5367314:
查查U0UCR/P0SEL/P0DIR的設置
user5367314:
回复 YiKai Chen:
这些都是3.0.2协议栈light例程默认的,我没动过,只是改了MT_UART_DEFAULT_OVERFLOW 为FLASE,
现在的情况只要串口不接收数据的时候,P0.5可以正常控制LED,串口来数据的时候,P0.5连的灯就会闪一下,
然后P0.5又是正常的,可以控制LED的亮灭
YiKai Chen:
回复 user5367314:
請先查U0UCR/P0SEL/P0DIR的設置
user5367314:
回复 YiKai Chen:
U0UCR/P0SEL/P0DIR的設置如下,是否有问题?串口用的串口0的接收引脚P0.2(只接收,无需发送)
P0.3,P0.4,P0.5作为普通IO去控制LED
static void HalUARTInitDMA(void)
{
……
PxSEL|= HAL_UART_Px_RX_TX;// Enable Tx and Rx on P1.
……
UxUCR = UCR_FLUSH;// Flush it.
……
}static void HalUARTOpenDMA(halUARTCfg_t *config)
{
……if (config->flowControl){UxUCR = UCR_FLOW | UCR_STOP;PxSEL |= HAL_UART_Px_CTS;PxDIR |=HAL_UART_Px_RTS;
……}else{UxUCR = UCR_STOP;}
……
}
static void HalUARTResumeDMA( void )
{
……UxUCR |= UCR_FLUSH;
……
}
YiKai Chen:
回复 user5367314:
我指調試一下程序,在你程序跑起來看到問題的時候暫停下來看一下暫存器U0UCR/P0SEL/P0DIR的內容為何?
user5367314:
回复 YiKai Chen:
下面三个函数会调用P0.5脚,导致P0.5拉低之后串口一来数据就拉高,屏蔽下面的PxOUT代码问题解决,是否会出现其他问题?
HalUARTSuspendDMA函数
PxOUT |= HAL_UART_Px_RTS;// Disable Rx flow.HalUARTPollDMA函数
PxOUT |= HAL_UART_Px_RTS;// Disable Rx flow.HalUARTReadDMA函数
PxOUT &= ~HAL_UART_Px_RTS;// 默认 Re-enable the flow on any read.
YiKai Chen:
回复 user5367314:
應該不会出现其他问题
user5710134:
根据你的描述,在设置Uart初始化时,可以采用默认,看看LED是否会闪吗?要是还是闪,说明使能是无效的,再看看手册,使能端的设置。