你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8l052c6t6 模拟串口 接收异常

[复制链接]
小小步伐 提问时间:2017-4-28 10:06 /
现在我的模拟串口和PC端通信正常, 和我们的光电模块终端通信的时候,接收的数据有问题, 但是截取报文, pc解析正常,说明还是我的串口解析的问题。
以下是pc 解析的数据(正确的)
FE FE FE 68 10 14 00 00 00 00 00 00 81 09 90 1F 00 00 07 01 00 00 FF CC 16
我的串口解析的数据:
FE FE FE 68 10 14 00 00 00 00 00 00 81 4B 90 FB 1C 00 07 01 00 00 FF 63 B3 FC

我的思路是接收引脚外部中断,进入中断后关闭中断, 延时一段时间, 开启定时器, 依次检测引脚电平, 读完8个数据位后,开始时钟同步,即检测一个下降沿,开始下一个字节的读取。
以下是我的时钟同步部分代码
/*
* 同步串口时钟
*/
unsigned long my_count = 0;

void    sync_clock(void)
{
   BitStatus old_val, new_val;
   disableInterrupts();
   old_val = read_rx_line();
   disableInterrupts();
    while(my_count< 5000)
    {
       new_val = read_rx_line();
      
        //  检测到下降沿,即起始位
        if(old_val == SET && new_val== RESET)
          break;
        old_val = new_val;
        my_count++;
    }
  
    my_count = 0;
    enableInterrupts();
    rx_flag = 0;
    //stop timer
    TIM3->CR1 &= (uint8_t)(~TIM_CR1_CEN);
    TIM3->CR1 &= ~TIM_CR1_CEN;
    TIM3->CNTRH = 0;//timer3_val >> 8;
    TIM3->CNTRL = 5;//timer3_val & 0xff;
    TIM3->CR1 |=  TIM_CR1_CEN;
}

我有以下疑问, 异步通信每一个字节都是相互独立的,每个字节停止位都进行了时钟同步,不存在累积误差,前面的数据正常, 中间的数据突然异常, 初步断定是中断引起的, 但是除了用于产生接收中断的定时器3 以外, 我没有开其他中断啊,降低波特率也不行, 搞了好多天, 求大神们给我支支招啊,万分感谢!!!!
收藏 2 评论4 发布时间:2017-4-28 10:06

举报

4个回答
大林林 回答时间:2017-7-10 10:00:45
别模拟了
串口不够就换芯片
wudianjun2001 回答时间:2017-7-10 12:07:09
模拟的比较耗时间,要中断全部关闭,最好还是用自带的串口

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

fafa1 回答时间:2017-7-10 12:09:02
有时后换芯片不是好办法啊,譬如我有一个应用需要7个串口,哪有这么多的?

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

无薪税绵 回答时间:2017-7-10 13:20:51
尝试一下,把数据包分成8个字节为一组,
每次只发一组,然后延时一段时间,大约20ms吧,
再继续发下一组,看看能不能解决问题。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版