程序如下:
第一部分,在Zmain.c中对P0_6输出初始化
P0SEL&=~0x40;
P0DIR |=0x40;
P0_6=1;
第二部分
在应用程序中:
P0_6=1;
WaitUs(10000);
HalUARTWrite(0,&pkt->cmd.Data[1],10);
P0_6=0;
上图说明,1为P0_3写信号,2为P0_6(或P2_0)控制信号,
程序流程:P0_6置高电平,P0_3开始写数据,P0_3数据写完,P0_6置低电平。
协议栈:Z-stack home1.2.1
现在的问题:P03一写数据,P0_6就被拉低,串口用DMA和ISR都试过,都是这种情况。HalUARTWrite时如何不影响P0_6呢?请高手指教!谢谢
VV:
P0.6在原先协议栈里面用到Joystick的功能,有没有把这个功能屏蔽掉,保证只有你的程序在操作P0.6
user4398765:
回复 VV:
谢谢,原因找到了,与i/o口复用没关系。haluartwrite函数返回的时候只是把数据发送到了串口缓冲buffer中,数据并没有真正从串口发送寄存器中全部发送出去。
正确的顺序是这样的,打开外围设备串口控制位,写串口,等数据全部从串口寄存器中发送完毕,再延时1ms(具体时间多少根据实际应用定),最后关闭外围设备串口控制位。要对串口的底层工作机制有一定了解才行。
谢谢!