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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版