OpenEdv-开源电子网

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

STM32的串口不停的收发数据帧,会把芯片写坏吗,谢谢

[复制链接]

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
发表于 2016-10-3 16:43:11 | 显示全部楼层 |阅读模式
1金钱
这是用串口助手模拟时抓的数据,实际使用中读写的频率很高也很快,有达到500K的,时间久了芯片会擦写坏吗?
DE11}LD2LZS9_02SHW}%RWO.png

最佳答案

查看完整内容[请看2#楼]

只是在RAM中接收,不会损坏ROM的。如果多接收了,你看看是不是波特率没有计算正确。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2014-8-15
在线时间
101 小时
发表于 2016-10-3 16:43:12 | 显示全部楼层
只是在RAM中接收,不会损坏ROM的。如果多接收了,你看看是不是波特率没有计算正确。
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2016-10-3 16:51:55 | 显示全部楼层
另外问一下,收到的数据,比发的数据多一到二个字节,而且都多在最低位的两个字节,是不是我时序上没有配合好
回复

使用道具 举报

29

主题

73

帖子

0

精华

高级会员

Rank: 4

积分
511
金钱
511
注册时间
2015-10-11
在线时间
102 小时
发表于 2016-10-3 20:46:45 | 显示全部楼层
顶起来
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2016-10-3 20:54:32 | 显示全部楼层
主战坦克 发表于 2016-10-3 20:45
只是在RAM中接收,不会损坏ROM的。如果多接收了,你看看是不是波特率没有计算正确。

谢谢,波特率我是库函数赋值的
USART2_InitStructure.USART_BaudRate=115200;  //2¨ìØÂê115200
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2016-10-3 21:18:47 | 显示全部楼层
主战坦克 发表于 2016-10-3 20:45
只是在RAM中接收,不会损坏ROM的。如果多接收了,你看看是不是波特率没有计算正确。

//我明明是发了8个字节,可 if(RCV_Num_Temp<9) 这句,把9换成8就不行,否则不返回数
//据,当换成9或比9 大的值时返回的数据字节数又会多起来

//接收中断函数
void USART2_IRQHandler(void)  //数据接收中断
{  
  if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收到数据
        {                 
                if(RCV_Num_Temp<9)
                {
                RCV_Buffer_Temp[RCV_Num_Temp]=USART_ReceiveData(USART2);         //读取接收到的数据
                RCV_Num_Temp++;                //接收数据增加1
                }
        }
}
回复

使用道具 举报

4

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2014-8-15
在线时间
101 小时
发表于 2016-10-3 22:18:21 | 显示全部楼层
2672751679 发表于 2016-10-3 21:18
//我明明是发了8个字节,可 if(RCV_Num_Temp

RCV_Num_Temp只是用于计数,你什么时候对它进行复位清零的呢?另外,你接收数据时,判断该变量是否小于9原因是什么?我编程一般是有数就接收,然后再根据协议对接收到的数据进行分析。
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2016-10-3 22:48:13 | 显示全部楼层
主战坦克 发表于 2016-10-3 22:18
RCV_Num_Temp只是用于计数,你什么时候对它进行复位清零的呢?另外,你接收数据时,判断该变量是否小于9 ...


//在接收完成后请的0,也试过放在其他地方清零,但不行
//数据帧接收函数
void RS485_Receive_Data(void)
{
        u8 i;         
  
if(USART_GetFlagStatus(USART2,USART_FLAG_IDLE) == SET)  //如果总线空闲,则开始接收
{
        RCV_Num=RCV_Num_Temp;        
  if(RCV_Num) LED0=0;  //接收指示
       
        delay_ms(10);                //等待10ms,连续超过10ms没有接收到一个数据,则认为接收结束
       
        if(RCV_Num==RCV_Num_Temp&&RCV_Num)//接收到了数据,且接收完成了
        {  

         for(i=0;i<RCV_Num;i++)
         {               
          RCV_Buffer=RCV_Buffer_Temp;          
         }

          LED0=1;  
          RCV_Num_Temp=0;  //清除数据帧字节长度缓存
         
          USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);  //关串口接收中断使能
                 
    RS485_TX_EN=1;        //设置为发送模式
         
          SEND_Complete_Temp=0;
          RCV_Complete_Temp=1;
          RCV_Complete=1;  //置位接收完成标志
          
   }
  }
}
回复

使用道具 举报

4

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2014-8-15
在线时间
101 小时
发表于 2016-10-4 07:54:26 | 显示全部楼层
本帖最后由 主战坦克 于 2016-10-4 08:06 编辑
2672751679 发表于 2016-10-3 22:48
//在接收完成后请的0,也试过放在其他地方清零,但不行
//数据帧接收函数
void RS485_Receive_Data(v ...

for(i=0;i<RCV_Num;i++)
         {               
          RCV_Buffer=RCV_Buffer_Temp;         
         }
大体看了一下。这句话是不是不对,为什么用循环呢?另外,你可以设置一个断点,查看一下RCV_Buffer保存的值和接收的数据是否是一致的。
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-10-4 15:58:08 | 显示全部楼层
话说楼主是有什么黑科技能让串口达到500K/S的?求分享,一般顶天就几十KB/S
回复

使用道具 举报

4

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2014-8-15
在线时间
101 小时
发表于 2016-10-4 16:31:57 | 显示全部楼层
yyx112358 发表于 2016-10-4 15:58
话说楼主是有什么黑科技能让串口达到500K/S的?求分享,一般顶天就几十KB/S

楼主的波特率设置是115200,说达到500k/s可能是笔误
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2016-10-5 14:46:03 | 显示全部楼层
yyx112358 发表于 2016-10-4 15:58
话说楼主是有什么黑科技能让串口达到500K/S的?求分享,一般顶天就几十KB/S

485波特率达到500K是没问题的,我们公司原来做了一个项目,上位机是PLC工控版(是他们厂自己定做的),带了18个汇川伺服,当时是研发在现场改的底层
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2016-10-5 15:08:23 | 显示全部楼层

你好,谢谢指点,仿真我不太熟悉,请问你说的方法是用STLIK在线仿真吗?
是要在 RCV_Buffer=RCV_Buffer_Temp; 这行设置一个断点,没执行一次(运行到断点处)后在软件上监控RCV_Buffer值的变化情况,你的意思大致是这样吗
回复

使用道具 举报

4

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2014-8-15
在线时间
101 小时
发表于 2016-10-5 17:50:50 | 显示全部楼层
2672751679 发表于 2016-10-5 15:08
你好,谢谢指点,仿真我不太熟悉,请问你说的方法是用STLIK在线仿真吗?
是要在 RCV_Buffer=RCV_Buffer_ ...

差不多这个意思吧。你的编程思路和我的不大一样。
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2016-10-5 22:37:19 | 显示全部楼层
主战坦克 发表于 2016-10-5 17:50
差不多这个意思吧。你的编程思路和我的不大一样。

我刚玩STM32,再加上C语言也不好,还请多指点
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 13:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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