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

楼主: youyexinyu

[STM32F3] STM32F303RE 串口中断通信问题

[复制链接]

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2015-7-13 16:28:43 | 显示全部楼层
还是溢出了。你在外部判断接受完以后,再一块输出吧
回复 支持 反对

使用道具 举报

1

主题

7

回帖

0

蝴蝶豆

初级会员

最后登录
2015-8-15
 楼主| 发表于 2015-7-13 16:43:45 | 显示全部楼层
安 发表于 2015-7-13 16:28
还是溢出了。你在外部判断接受完以后,再一块输出吧

邮箱 我把代码发给你 你帮忙试一下
回复 支持 反对

使用道具 举报

1

主题

83

回帖

0

蝴蝶豆

初级会员

最后登录
2018-10-12
发表于 2015-7-13 16:51:50 | 显示全部楼层
应该是接受处理不及时,数据溢出了,中断处理函数不要做太复杂,越短越好,接受完,再外面处理
回复 支持 反对

使用道具 举报

7

主题

912

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-7-4
发表于 2015-7-13 17:00:11 | 显示全部楼层
串口调试助手的波特率跳到57600接收试试看。。
回复 支持 反对

使用道具 举报

1

主题

7

回帖

0

蝴蝶豆

初级会员

最后登录
2015-8-15
 楼主| 发表于 2015-7-13 17:33:26 | 显示全部楼层
JackieLaura 发表于 2015-7-13 17:00
串口调试助手的波特率跳到57600接收试试看。。

呵呵 不是配置的原因 应该是程序的问题吧
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2015-7-14 08:56:41 | 显示全部楼层
youyexinyu 发表于 2015-7-13 16:43
邮箱 我把代码发给你 你帮忙试一下

不是不帮你改,我这没有303的板子。。。。自己改一下,大家一块帮你分析。
回复 支持 反对

使用道具 举报

26

主题

845

回帖

0

蝴蝶豆

金牌会员

最后登录
2018-9-27
发表于 2015-7-14 09:02:38 | 显示全部楼层
楼主个人觉得你这有两个问题:
1、是没有理解中断调用的机制,USART2_IRQHandler(void)是一个句柄,个人认为不应该把串口发送放在句柄里执行,应该找到回调函数放到回调函数里进行收发(发送完成或接收完成回调函数)。
2、为什么HAL库里有串口发送函数,封装好的,你不用,你还要自己写串口发送呢?
回复 支持 反对

使用道具 举报

26

主题

845

回帖

0

蝴蝶豆

金牌会员

最后登录
2018-9-27
发表于 2015-7-14 09:04:43 | 显示全部楼层
void HW_USART_SendOneChar(USART_TypeDef* usartnum, uint8_t data)
{
  USART_SendData(usartnum, data);

   /* wait until transmission is complete */  
    while (!(USART_GetFlagStatus(usartnum, USART_FLAG_TC))) {
      ;
  }  
}
void HW_USART_SendChars(USART_TypeDef* usartnum, uint16_t len, void *buff)
{
   uint16_t i;
    uint8_t *ptr = (uint8_t *)buff;
   
   for (i = 0; i < len; i++) {
       HW_USART_SendOneChar(usartnum, ptr[i]);
  }
}
void HW_USART_SendString(USART_TypeDef* usartnum, void *buff)
{
   uint8_t *ptr = (uint8_t *)buff;
   
   while (*ptr != '\0') {
      HW_USART_SendOneChar(usartnum, *ptr++);
   }
}
uint16_t HW_USART_ReceOneChar(USART_TypeDef* usartnum)
{
   /* Wait until data to be received */
    while (!(USART_GetFlagStatus(usartnum, USART_FLAG_RXNE))) {
      ;
  }
  return USART_ReceiveData(usartnum);
}


以上这几种发送在HAL库里都有对应的函数,可以试下,使用中断方式,应该没问题的
回复 支持 反对

使用道具 举报

1

主题

7

回帖

0

蝴蝶豆

初级会员

最后登录
2015-8-15
 楼主| 发表于 2015-7-14 09:29:22 | 显示全部楼层
星辰一方 发表于 2015-7-14 09:02
楼主个人觉得你这有两个问题:
1、是没有理解中断调用的机制,USART2_IRQHandler(void)是一个句柄,个人认 ...

刚学习这芯片 能力不足啊
回复 支持 反对

使用道具 举报

26

主题

845

回帖

0

蝴蝶豆

金牌会员

最后登录
2018-9-27
发表于 2015-7-14 11:09:16 | 显示全部楼层
youyexinyu 发表于 2015-7-14 09:29
刚学习这芯片 能力不足啊

建议去掉自己写的收发函数,使用库里的试下,最好使用中断方式收发的那组
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版