感觉STC8A8K是个假的多串口,因为u3,u4不能同时在一个...
我感觉STC8A8K是个假的多串口,因为u3,u4不能同时在一个工程中使用,代码在PxMx寄存器上出了问题。比如:当P0M0&=~0x03;P0M1&=~0x03;时,可以使用u3;P0M0&=~0x0c,P0M1&=~0x0c;时可以使用u4,但我想P0m0=0x0f,p0m1=0x0f来同时启用u3,u4就不行了,非常杯具。 Uart3_Init();
delay(100000);
Uart4_Init();
delay(100000);我想要的效果是这两个串口都启用,但始终卡在P0Mx的设置上,好纠结。。 P0M0&=~0x03;P0M1&=~0x03 把低2位清零了
P0M0&=~0x0c,P0M1&=~0x0c; 把.2、.3位清零了
这两合一起等价于
P0m0=0x0f,p0m1=0x0f?
自己的问题去质疑别人,还那么理直气壮?
难道不应该是
P0M0&=~0x0F,P0M1&=~0x0F; 大放假的都还在工作学习,辛苦了 低级错误常常犯,芯片不背傻傻锅。 takashiki 发表于 2018-10-1 16:34
P0M0&=~0x03;P0M1&=~0x03 把低2位清零了
P0M0&=~0x0c,P0M1&=~0x0c; ...
P0M0&=~0x0F,P0M1&=~0x0F;中的~是我着急出门,发帖的时候忘敲了,然而加上也并没什么暖用。 1a2b3c 发表于 2018-10-1 18:10
大放假的都还在工作学习,辛苦了
吊丝没有假期,假期只属于成功人士。 我再把情形描述清晰一点,只要写成P0M0&=~0x03;
P0M1&=~0x03;这种情况是单开U3,结果就正常,但我要是写成P0M0&=~0x0f;
P0M1&=~0x0f;的话(我的本意是U3,4能同时使用在一个Prjoect中),U3直接不能用了。 四个窜口可以同时用啊, LM1876 发表于 2018-10-1 19:39
四个窜口可以同时用啊,
先不说4个,就u3,u4能同时使用就行,
Uart3_Init();
delay(100000);
// P0M0&=~(0x03|0x0C);
// P0M1&=~(0x03|0x0c);
P0M0&=~0x0f;
P0M1&=~0x0f;
实验已证明这不行,写成这样u3直接不工作。 直接位操作不行么? 90999 发表于 2018-10-1 20:18
直接位操作不行么?
你的意思是,P0Mx寄存器能直接位操作? 我直接贴上关键部位代码吧,以证明事实的真实性:
P1M0 &= ~0xFF; // P0.0、P0.1_U3之必备操作,不然不进串口中断
P1M1 |=0xFF;
P0M0 &= ~0xFF;
P0M1 |=0xFF;
P0M0&=~0x0f; // 改成0x03,U3立即正常、稳定、可用
P0M1&=~0x0f; //
Uart3_Init();
delay(100000);
Uart4_Init();
delay(100000);
P_SW2&=0x00; 应该问题不是在P0M0和P0M1上面,加一行:P0|=0x0f;把P00~P03置高 wmm20031015 发表于 2018-10-1 21:07
应该问题不是在P0M0和P0M1上面,加一行:P0|=0x0f;把P00~P03置高
从情怀上说,十分感谢这位兄台充满正能量的回答,但结果还是不行。 P0M0,P0M1 拉低只是IO配置准双向口,跟串口无关,按你的说法这几个IO不能同时配置准双向口?
P0M0 = 0x00; //设置P0.0~P0.7为双向口模式
P0M1 = 0x00; STC的例程说的很明白:
P_SW2 &= ~2;P0n_push_pull(0x02); //串口3使用 P0.0 P0.1
P_SW2 &= ~4;P0n_push_pull(0x08); //串口4使用 P0.2 P0.3
4个串口同可以时用,仔细看代码 su33691 发表于 2018-10-2 15:28
STC的例程说的很明白:
P_SW2 &= ~2;P0n_push_pull(0x02); //串口3使用 P0.0 P0.1
P_SW2 &= ~4;P0 ...
你说的这个早试过了。 X-h-p 发表于 2018-10-2 16:17
4个串口同可以时用,仔细看代码
不仅看了,还亲自实践了,给你说个更诡异的事情吧,P0上的U3按理说与P1口(U2)的设置无关,但我要是注释掉P1口的设置,U3照样嗝屁。 最新测试结果出来了,U1,3,4共存,U2不共存,之前U3,4不共存的原因是杜邦线内部接触不好(眼睛看不出来,用手捂紧没事)。 感谢各位热心回复。 U3,4共存的关键是:P1M0 &= ~0xFF;
P1M1 |=0xFF;有它们,U3,4正常,U2不通,没它们U2正常,U3,4不通。 P0M1 = 0x00;
P0M0 = 0x0a;
TXD口推挽输出,RXD口准双向口
void UART3_config(void) //使用Timer3做波特率.
{
u8 i;
/*********** 波特率使用定时器3 *****************/
S3CON |= (1<<6); //BRT select Timer3
T4T3M &= 0xf0; //停止计数, 清除控制位
IE2&= ~(1<<5); //禁止中断
T4T3M |=(1<<1); //1T
T4T3M &= ~(1<<2); //定时
T4T3M &= ~1; //不输出时钟
T3L = 0xD0; //设定定时初值
T3H = 0xFF; //设定定时初值
T4T3M |=(1<<3); //开始运行
S3CON &= ~(1<<5); //禁止多机通讯方式
S3CON &= ~(1<<7); // 8位数据, 1位起始位, 1位停止位, 无校验
IE2 |=(1<<3); //允许中断
S3CON |=(1<<4); //允许接收
P_SW2 &= ~2; //切换到 P0.0 P0.1
}
void UART4_config(void) //使用Timer4做波特率.
{
u8 i;
/*********** 波特率使用定时器4*****************/
S4CON |= (1<<6); //BRT select Timer4
T4T3M &= 0x0f; //停止计数, 清除控制位
IE2 &= ~(1<<6); //禁止中断
T4T3M |=(1<<5); //1T
T4T3M &= ~(1<<6); //定时
T4T3M &= ~(1<<4); //不输出时钟
TH4 = 0xff;
TL4=0xD0; ;
T4T3M |=(1<<7); //开始运行
S4CON &= ~(1<<5); //禁止多机通讯方式
S4CON &= ~(1<<7); // 8位数据, 1位起始位, 1位停止位, 无校验
IE2 |=(1<<4); //允许中断
S4CON |=(1<<4); //允许接收
P_SW2 &= ~4; //切换到 P0.2 P0.3
} X-h-p 发表于 2018-10-3 15:54
P0M1 = 0x00;
P0M0 = 0x0a;
多谢,最后曲线救国了。。 4个串口同时使用肯定是没问题的,只是后面两个不支持中优先级设置 ,实时性不高。 tjx0512 发表于 2018-10-5 13:55
4个串口同时使用肯定是没问题的,只是后面两个不支持中优先级设置 ,实时性不高。 ...
多谢,决定画个板试试。 杜邦线……这种错误也算是经典了 No.5 发表于 2018-10-6 06:48
杜邦线……这种错误也算是经典了
不说了,推荐个电影《大师兄》感觉还不错http://www.xlp2.com/html/47204.html。。 myemcu 发表于 2018-10-2 20:31
最新测试结果出来了,U1,3,4共存,U2不共存,之前U3,4不共存的原因是杜邦线内部接触不好(眼睛看不出来,用 ...
莫非楼主调试都不用示波器?不然也不会被杜邦线给害了 zmh169 发表于 2018-10-9 08:11
莫非楼主调试都不用示波器?不然也不会被杜邦线给害了
两个字,穷。。 我们的板子四个串口都在同时用呀。没发现什么问题。 我验证过,4个串口可以同时用,没有问题啊。是不是你代码有问题 bs1234 发表于 2018-10-9 09:40
我验证过,4个串口可以同时用,没有问题啊。是不是你代码有问题
目前只有个小问题,就是P0上的u3,u4受P1口的配置影响,如果不配置P1,则U3,4不能用。 myemcu 发表于 2018-10-10 08:48
目前只有个小问题,就是P0上的u3,u4受P1口的配置影响,如果不配置P1,则U3,4不能用。 ...
你这个确实不叫问题,记得DATASHEET上有描述,属于说明书阅读不仔细{:lol:} makesoft 发表于 2018-10-10 10:47
你这个确实不叫问题,记得DATASHEET上有描述,属于说明书阅读不仔细
恩,板打回来再试试。 楼主你联系过STC客服吗?
你可以联系STC客服要一个4串口同时中断收发的程序,4个全双工串口工作于不同的波特率,115200,57600,38400,19200,然后你可以接4台电脑的串口助手,同时测试,程序会数据原样返回,你可以每个串口测试1M字节看看,没有问题的。 小李非刀 发表于 2018-10-10 17:34
楼主你联系过STC客服吗?
你可以联系STC客服要一个4串口同时中断收发的程序,4个全双工串口工作于不同的波 ...
懂,等板打回来再说。。 4串口可以同时用,没问题的,我已经在项目中实践过了
页:
[1]