amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 182|回复: 10

请教关于STC15W4K串口参数不要起始位的设置方法

[复制链接]
发表于 2019-8-26 10:56:08 | 显示全部楼层 |阅读模式
void        UART3_config(u8 brt)        // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer3做波特率.
{
        u8        i;
        /*********** 波特率固定使用定时器2 *****************/
        if(brt == 2)
        {
                S3CON &= ~(1<<6);        //BRT select Timer2
                SetTimer2Baudraye(65536UL - (MAIN_Fosc / 4) / UART_BaudRate3);
        }
        /*********** 波特率使用定时器3 *****************/
        else
        {
                S3CON |= (1<<6);        //BRT select Timer3
                T4T3M &= 0xf0;                //停止计数, 清除控制位
                IE2  &= ~(1<<5);        //禁止中断
                T4T3M |=  (1<<1);        //1T
                T4T3M &= ~(1<<2);        //定时
                T4T3M &= ~1;                //不输出时钟
                TH3 = (65536UL - (MAIN_Fosc / 4) / UART_BaudRate3) / 256;
                TL3 = (65536UL - (MAIN_Fosc / 4) / UART_BaudRate3) % 256;
                T4T3M |=  (1<<3);        //开始运行
        }
       
        S3CON &= ~(1<<5);        //禁止多机通讯方式
        S3CON &= ~(1<<7);        // 8位数据, 1位起始位, 1位停止位, 无校验

//        IE2   &= ~(1<<3);        //串口3禁止中断
                IE2   |=  (1<<3);        //串口3允许中断
        S3CON |=  (1<<4);        //串口3允许接收

       
        P_SW2 &= ~2;                //切换到 P0.0 P0.1
//        P_SW2 |= 2;                        //切换到 P5.0 P5.1

        for(i=0; i<RX3_Length; i++)                RX3_Buffer[i] = 0;
        B_TX3_Busy  = 0;
        TX3_read    = 0;
        RX3_write   = 0;
}


各位兄弟,买了一个串口输出测距模块,资料上是9600波特率,一位停止位,不校验,特意问了卖家说没有起始位,STC官方的这个参数设置是带一个起始位的,用的STC15W4K56S4,这里这个串口3参数怎么配置可以配置为8位数据位,不要起始位,一位停止位,不校验?
现在的问题是用电脑串口助手按照那个模块数据格式模拟发送数据送到STC15的串口3可以正常接收显示,那个模块接到串口助手发出的数据也是对的,说明模块没问题,但直接把模块接到STC15的串口3上就接收不到数据,不知道是不是和这个起始位有关?

发表于 2019-8-26 11:51:06 | 显示全部楼层
不要启始位,那么0xFF怎么办?
0xFE和0xFD有什么区别?

不如用SPI?
 楼主| 发表于 2019-8-26 11:54:40 | 显示全部楼层
lcw_swust 发表于 2019-8-26 11:51
不要启始位,那么0xFF怎么办?
0xFE和0xFD有什么区别?

模块是串口接口,模块和程序分别用串口助手测试正常,把它们连起来串口3就收不到模块发出的的数据,其它原因找不到了,就想着会不会是卖家说的这个模块没有起始位的问题?
发表于 2019-8-26 12:05:56 | 显示全部楼层
本帖最后由 lcw_swust 于 2019-8-26 12:11 编辑
newywx 发表于 2019-8-26 11:54
模块是串口接口,模块和程序分别用串口助手测试正常,把它们连起来串口3就收不到模块发出的的数据,其它 ...


没启始位是不可能的,估计卖家不懂。
单片机与模块通信要注意是否需要串电阻,是否需要上拉,注意RXD、TXD是否交叉。
分享下我的代码:
  1. typedef unsigned char  U8;  
  2. typedef signed   char  S8;
  3. typedef unsigned int   U16;
  4. typedef signed   int   S16;
  5. typedef unsigned long  U32;
  6. typedef signed   long  S32;
  7. #define BIT(x)    (1<<(x))
  8. //IOSET(PORTB,BIT(0));//将端口在X为1的位置1
  9. #define IOSET(port,x)  (port)|=(x)
  10. //IOCLR(PORTB,BIT(0));//将端口在X为1的位清0
  11. #define IOCLR(port,x)  (port)&=~(x)
  12. //系统时钟定义,用于计算波特率
  13. #define FOSC 20000000
  14. //串口3,T3作为波特率  //uart3_init(9600,1)
  15. void uart3_init(U32 baud,U8 es)
  16. {
  17.         U16 v;
  18.         IOSET(T4T3M,BIT(1));//T3x12
  19.         v=65536-((FOSC*2/4/baud+1)/2);//+1)/2为四舍五入
  20.         //也可以用这个:v=65536-FOSC/4/baud
  21.         T3H=v>>8;
  22.         T3L=v;
  23.         IOSET(T4T3M,BIT(3));//T3R=1;
  24.         S3CON=0X50;                //T3为波特率,允许接收
  25.         if(es)//允许中断
  26.                 IOSET(IE2,BIT(3));//ES3
  27.         else
  28.                 IOCLR(IE2,BIT(3));//ES3       
  29. }
复制代码
 楼主| 发表于 2019-8-26 13:42:00 | 显示全部楼层
lcw_swust 发表于 2019-8-26 12:05
没启始位是不可能的,估计卖家不懂。
单片机与模块通信要注意是否需要串电阻,是否需要上拉,注意RXD、TX ...

谢兄弟回复,我STC15w是5V供电的,电路上串口3的发送接收脚分别串了200多欧的电阻后接到模块的发送接收脚,因为模块资料上也是写的5v供电的,手上示波器坏了没量模块信号电平,刚和卖家确认了,模块出来的信号电平是3.3v的,不知道会不会是这个原因,但理论上3.3v的信号5V单片机也应该能识别的
发表于 2019-8-26 13:49:49 | 显示全部楼层
newywx 发表于 2019-8-26 13:42
谢兄弟回复,我STC15w是5V供电的,电路上串口3的发送接收脚分别串了200多欧的电阻后接到模块的发送接收脚 ...

哦,一般5V与3.3V串200欧是没问题的。
那就再检查一下吧,或者交换一下TXD、RXD。
 楼主| 发表于 2019-8-26 14:21:22 | 显示全部楼层
lcw_swust 发表于 2019-8-26 13:49
哦,一般5V与3.3V串200欧是没问题的。
那就再检查一下吧,或者交换一下TXD、RXD。 ...

我再试试看
 楼主| 发表于 2019-8-28 09:30:14 | 显示全部楼层
lcw_swust 发表于 2019-8-26 12:05
没启始位是不可能的,估计卖家不懂。
单片机与模块通信要注意是否需要串电阻,是否需要上拉,注意RXD、TX ...

忘了反馈了,加了10k上拉后接上模块串口3可以收到模块发来的数据了
发表于 2019-8-28 09:32:30 | 显示全部楼层
newywx 发表于 2019-8-28 09:30
忘了反馈了,加了10k上拉后接上模块串口3可以收到模块发来的数据了  ...

      
发表于 2019-8-28 22:28:20 | 显示全部楼层
串口不要起始位,第一次听说,没起始位、停止位,串口不能正确接收的。
 楼主| 发表于 2019-8-29 08:50:57 | 显示全部楼层
小李非刀 发表于 2019-8-28 22:28
串口不要起始位,第一次听说,没起始位、停止位,串口不能正确接收的。

我看他模块资料上没提到,就特意又问了一次,说没起始位,然后正好收不到数据,就想着是不是这个问题了
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-9-15 14:52

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表