Arduino直接使用IO模拟UART问题
最近因为调试一个小软件,需要使用电脑连接UART,同时使用一组UART连接WIFI模块发送数据,因此在做用IO口直接模拟UART时序,发送成功了,但是存在一点问题没想明白,发上来大家帮帮忙看看。主要代码如下 :uint frametime;
frametime=1000000/19200;//波特率19200,52us
void vuart_send_byte(char cbuf)
{
CLR_TX;
_delay_us(frametime);//拉低后保持1位时间,启动发送
for(int i=0;i<8;i++)
{
if(cbuf&0x01)
SET_TX;
else
CLR_TX;
cbuf>>=1;
_delay_us(frametime);
}
SET_TX;
_delay_us(frametime);//发送停止位
return;
}
代码这样发送不成功,能接收到数据,但是明显波特率不对,数据采样出来不对。修改frametime=52-4;后可正确接收到数据,问题是为什么要减4us,是否是因为除了操作IO口电平外的指令外的其它指令占用的CPU时钟周期?试了一下,-3,-4,-5都可以正常接收,-2,-1等会出现数据错误。
另外还有问题是,就算是52-4us,接收端接收时波特率也只是9600,用波特率19200也不能正确接收数据,为什么呢?这个UART发送每位时的电平持续时间应该怎么计算? 自己顶起来 为什么不用软串口库? 用1、2引脚 suoma 发表于 2015-6-11 00:03
用1、2引脚
1,2脚因为已经使用在另一个设备上了,要不就不用整这个IO直接操作了 mc.six 发表于 2015-6-10 22:03
为什么不用软串口库?
可以发个给我吗?还真没用过 本帖最后由 mc.six 于 2015-6-11 17:09 编辑
左手 发表于 2015-6-11 09:22 static/image/common/back.gif
可以发个给我吗?还真没用过
http://www.arduino.cc/en/Reference/SoftwareSerial
可以参考官方说明 左手 发表于 2015-6-11 09:22 static/image/common/back.gif
1,2脚因为已经使用在另一个设备上了,要不就不用整这个IO直接操作了
换回1、2,专用的RX、TX
页:
[1]