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

楼主: 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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版