还是溢出了。你在外部判断接受完以后,再一块输出吧
安 发表于 2015-7-13 16:28
还是溢出了。你在外部判断接受完以后,再一块输出吧
邮箱 我把代码发给你 你帮忙试一下
应该是接受处理不及时,数据溢出了,中断处理函数不要做太复杂,越短越好,接受完,再外面处理
串口调试助手的波特率跳到57600接收试试看。。
JackieLaura 发表于 2015-7-13 17:00
串口调试助手的波特率跳到57600接收试试看。。
呵呵 不是配置的原因 应该是程序的问题吧
youyexinyu 发表于 2015-7-13 16:43
邮箱 我把代码发给你 你帮忙试一下
不是不帮你改,我这没有303的板子。。。。自己改一下,大家一块帮你分析。
楼主个人觉得你这有两个问题:
1、是没有理解中断调用的机制,USART2_IRQHandler(void)是一个句柄,个人认为不应该把串口发送放在句柄里执行,应该找到回调函数放到回调函数里进行收发(发送完成或接收完成回调函数)。
2、为什么HAL库里有串口发送函数,封装好的,你不用,你还要自己写串口发送呢?
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库里都有对应的函数,可以试下,使用中断方式,应该没问题的
星辰一方 发表于 2015-7-14 09:02
楼主个人觉得你这有两个问题:
1、是没有理解中断调用的机制,USART2_IRQHandler(void)是一个句柄,个人认 ...
刚学习这芯片 能力不足啊
youyexinyu 发表于 2015-7-14 09:29
刚学习这芯片 能力不足啊
建议去掉自己写的收发函数,使用库里的试下,最好使用中断方式收发的那组