OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4741|回复: 4

STM8AF5288串口接收一帧数据丢失00数据

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2019-9-14
在线时间
5 小时
发表于 2020-3-11 18:10:48 | 显示全部楼层 |阅读模式
配置程序
void  Uart1_Configuration(void)
{  
  GPIO_Init(GPIOA, GPIO_PIN_4, GPIO_MODE_IN_PU_IT);
  GPIO_Init(GPIOA, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST);  //需要配置GIPO
//  GPIO_ExternalPullUpConfig(GPIOA, GPIO_PIN_4, ENABLE);
//  GPIO_ExternalPullUpConfig(GPIOA, GPIO_PIN_5, ENABLE);
//--配置外设时钟使能   
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1,ENABLE);  //开启外设时钟  
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

  UART1_DeInit();
  UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, \
    UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);  //发送接收使能  偏差 中文资料 P279 表49

  UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);  
  UART1_Cmd(ENABLE);
  enableInterrupts();
}
中断程序如下
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
   if(UART1_GetITStatus(UART1_IT_RXNE) != RESET) //检查指定的UART1中断是否发生。
   {
     UART1_SendData8(UART1_ReceiveData8());      //将接收的数据再用串口发送出去
     UART1_ClearITPendingBit(UART1_IT_RXNE);     //清除UART1挂起标志
   }   

UART1_ClearITPendingBit(UART1_IT_RXNE);   
}

其它外设均未使用

主要问题: 波特率115200(使用内部晶振16M或外部16M均出现如下结果)以下上位机按一次性发送完8个数据
1:上位机发送数据(16进制数据)00 00 00 00 00 00 00 00   无法通过测试        上位机接收到数据: 00 00 00 00      共4个byte   与在线调试数据一致  丢失4个00数据
2:上位机发送数据(16进制数据)10 00 00 00 00 00 00 01   无法通过测试        上位机接收到数据: 10 00 00 00 01  共5个byte    丢失3个00数据
3:上位机发送数据(16进制数据)00 01 02 03 04 05 06 07   通过测试              上位机接收到数据:  00 01 02 03 04 05 06 07   正常
4:上位机发送数据(16进制数据)01 01 01 01 01 01 01 01   通过测试              上位机接收到数据: 01 01 01 01 01 01 01 01   正常
5:上位机发送数据(16进制数据)02 02 02 02 02 02 02 02   通过测试              上位机接收到数据:  02 02 02 02 02 02 02 02  正常
6:上位机发送数据(16进制数据)07 06 05 04 03 02 01 00   无法通过测试       上位机接收到数据:07 06 05 04 03 02 01         第8个byte丢失
7:上位机单独一个一个数据发送,任意数据均不存在丢失;
8    一帧式发送,将波特率修改为9600,上位机接收数据同上述一致。


有遇到相同问题有大神位,有何解决办法?





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6681
金钱
6681
注册时间
2017-4-12
在线时间
1254 小时
发表于 2020-3-11 22:25:22 | 显示全部楼层
UART1_SendData8(UART1_ReceiveData8());      //将接收的数据再用串口发送出去  
你能确定发送出去了吗。不查询发送完成的状态?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-3-12
在线时间
3 小时
发表于 2020-3-12 16:04:47 | 显示全部楼层
好奇问个问题,你是做汽车电子吗?为什么要挑STM8A这个系列?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2020-6-19
在线时间
5 小时
发表于 2020-6-19 09:01:29 | 显示全部楼层
楼主是怎么解决的?  我也遇到啦这个问题,我用的也是stm8A这类芯片。串口助手发送 ( 0xaa  0x01 0x00 0xcc )       单片机接收( 0xaa  0x01 0xcc )少啦0x00这一组数据
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2020-6-19
在线时间
5 小时
发表于 2020-6-19 13:49:42 | 显示全部楼层
将停止位设置2位,试试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 13:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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