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

stm8s103串口多接收到数据

[复制链接]
于平 提问时间:2015-4-1 10:29 /
大家好,我最近用stm8S103接收串口数据时,任何大小的数据包末尾的数据总是会重复接收到最后一个字节,比如我发送 01 02 03,单片机会接收到01 02 03 03,我发送01 02 03 04 05 06,单片机会接收到01 02 03 04 05 06 06。请问有没有遇到过类似问题的?
我的程序关键部分如下:
时钟部分:
CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV2);
串口初始化部分:
UART1_DeInit();
UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1,
     UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_RX_ENABLE);
    UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);



串口中断部分:
u8         x, ch;
UART1_ClearITPendingBit(UART1_IT_RXNE);
x         =  UART1->SR;

  ch         =  UART1->DR;
    //test_counter++;

    GPIO_WriteReverse(GPIOA, GPIO_PIN_3);
    if (RxCounter == 0)
    {
        if (ch == 0x55)
        {
            RxBuffer[0] = ch;
            RxCounter = 1;
        }
        else
        {
            RxCounter = 0;
        }
    }
    else


    .
    .
    .

收藏 评论9 发布时间:2015-4-1 10:29

举报

9个回答
数码小叶 回答时间:2015-4-1 10:36:23
波特率。。。。
于平 回答时间:2015-4-1 10:40:15

你好,你的意思是波特率需要自己再调整一下吗?固件库设置出来的可能有偏差?
数码小叶 回答时间:2015-4-1 11:13:11
于平 发表于 2015-4-1 10:40
你好,你的意思是波特率需要自己再调整一下吗?固件库设置出来的可能有偏差? ...

我的意思是说,你设置的波特率和软件之间是否一样
于平 回答时间:2015-4-1 11:16:23
数码小叶 发表于 2015-4-1 11:13
我的意思是说,你设置的波特率和软件之间是否一样

波特率是一样的,上位机发送的数据格式与单片机也一样!
数码小叶 回答时间:2015-4-1 11:19:17
于平 发表于 2015-4-1 11:16
波特率是一样的,上位机发送的数据格式与单片机也一样!

难道是哪块计数出错了
拼命三郎 回答时间:2015-4-4 17:05:56
1.jpg
小槑槑 回答时间:2015-4-5 18:47:19
// 接收数据寄存器非空或溢出错误中断 ?
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
应该用
UART1_ITConfig(UART1_IT_RXNE, ENABLE);
于平 回答时间:2015-4-7 15:20:32
小槑槑 发表于 2015-4-5 18:47
// 接收数据寄存器非空或溢出错误中断 ?
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
应该用

你好,这个地方我之前也这样改过,也是不行,问题还是存在啊!
小槑槑 回答时间:2015-4-7 20:46:59
发送和中断无关,或者你对比一下我的代码:

cUART1::cUART1(uint32_t BaudRate)
{
  // 波特率 数据位:8  停止位:1  无检验位  
  UART1_Init(BaudRate, UART1_WORDLENGTH_8D, UART1_STOPBITS_1,
    UART1_PARITY_NO,UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_TXRX_ENABLE);
  
  // 中断类型设置:接收和发送中断类型使能
  UART1_ITConfig(UART1_IT_RXNE, ENABLE);
  // 中断使能
  UART1_Cmd(ENABLE);
}

void cUART1::SendByte(uint8_t c)
{
  UART1_SendData8(c);
  while (RESET == UART1_GetFlagStatus(UART1_FLAG_TXE));
}

所属标签

相似问题

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