发表于 2015-7-13 16:28:43

还是溢出了。你在外部判断接受完以后,再一块输出吧

youyexinyu 发表于 2015-7-13 16:43:45

安 发表于 2015-7-13 16:28
还是溢出了。你在外部判断接受完以后,再一块输出吧

邮箱 我把代码发给你 你帮忙试一下

ningzb 发表于 2015-7-13 16:51:50

应该是接受处理不及时,数据溢出了,中断处理函数不要做太复杂,越短越好,接受完,再外面处理

JackieLaura 发表于 2015-7-13 17:00:11

串口调试助手的波特率跳到57600接收试试看。。

youyexinyu 发表于 2015-7-13 17:33:26

JackieLaura 发表于 2015-7-13 17:00
串口调试助手的波特率跳到57600接收试试看。。

呵呵 不是配置的原因 应该是程序的问题吧

发表于 2015-7-14 08:56:41

youyexinyu 发表于 2015-7-13 16:43
邮箱 我把代码发给你 你帮忙试一下

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

星辰一方 发表于 2015-7-14 09:02:38

楼主个人觉得你这有两个问题:
1、是没有理解中断调用的机制,USART2_IRQHandler(void)是一个句柄,个人认为不应该把串口发送放在句柄里执行,应该找到回调函数放到回调函数里进行收发(发送完成或接收完成回调函数)。
2、为什么HAL库里有串口发送函数,封装好的,你不用,你还要自己写串口发送呢?

星辰一方 发表于 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);
}
}
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库里都有对应的函数,可以试下,使用中断方式,应该没问题的

youyexinyu 发表于 2015-7-14 09:29:22

星辰一方 发表于 2015-7-14 09:02
楼主个人觉得你这有两个问题:
1、是没有理解中断调用的机制,USART2_IRQHandler(void)是一个句柄,个人认 ...

刚学习这芯片 能力不足啊

星辰一方 发表于 2015-7-14 11:09:16

youyexinyu 发表于 2015-7-14 09:29
刚学习这芯片 能力不足啊

建议去掉自己写的收发函数,使用库里的试下,最好使用中断方式收发的那组
页: 1 [2] 3
查看完整版本: STM32F303RE 串口中断通信问题