su-409464 发表于 2018-3-7 08:52:53

关于STM32F030F4P6 串口接收发送问题

做了一个 STM32的串口模块, 开启了接收中断, 在中断中做了以下操作,
想实现: 将串口接收的内容 通过串口再发出去
<div> void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
    USART1_SendByte((uint8_t)(USART1->RDR));   
}</div><div>}
</div>

测试了 普通英文字符 ,都是正常的。

但是小括号符 就不行,程序就死掉了 ,例如    aaa(2,2“”)

串口输出 aaa(    然后就死了~~~~


请问 小括号符 不能接收吗??


发表于 2018-3-7 11:10:22

普通的串口接收就一个字节

发表于 2018-3-7 09:30:48

在这之后发什么都不回复了是吗?如果是,可能是因为串口溢出导致,接收中断中要处理一下溢出。

anobodykey 发表于 2018-3-7 09:19:46

不会的,串口是不区分字符的,你输入一长串英文字符看看

bargagebaobei 发表于 2018-3-7 09:37:04

楼主你好,这个情况我也没有遇到过,你试试发送)看不会回当掉啊 还有就是(和2之间没有空格吧 还可是试试写一个字符串就是用“222”缀上“(”,发送试试

toofree 发表于 2018-3-7 09:37:36

本帖最后由 toofree 于 2018-3-7 09:46 编辑

不能够。都能发。
不过,如果像你主楼帖子发的小括号的话,那是全角符号,占两个字节。
请区分"("和"(",这两个是不一样的。





你的程序只适合一个字节一个字节的发,不能两个字节一起发。就是说两个字节发送之间,得有一定的延时。
或者写成,中断中接收字符到数组,主程序中发送。发送不能影响接收中断。

su-409464 发表于 2018-3-7 10:53:55

anobodykey 发表于 2018-3-7 09:19
不会的,串口是不区分字符的,你输入一长串英文字符看看

好像真的是 溢出了~~~
几个字符可以,但是一长串 字符就 挂了!!!!

请问 默认 串口的接收区 是多大?

void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
/******************************************************************
USART²ÎÊý³õʼ»¯:²¨ÌØÂÊ   ´«ÊäλÊý   Í£Ö¹Î»ÊýУÑéλÊý
                  115200         8         1      0(NO)
*******************************************************************/
USART_InitStructure.USART_BaudRate = 115200;                     //É趨´«ÊäËÙÂÊ
USART_InitStructure.USART_WordLength = USART_WordLength_8b;      //É趨´«ÊäÊý¾ÝλÊý
USART_InitStructure.USART_StopBits = USART_StopBits_1;             //É趨ֹͣλ¸öÊý
USART_InitStructure.USART_Parity = USART_Parity_No ;               //²»ÓÃУÑéλ
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//²»ÓÃÁ÷Á¿¿ØÖÆ
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    //ʹÓýÓÊպͷ¢Ë͹¦ÄÜ
USART_Init(USART1, &USART_InitStructure);                        //³õʼ»¯USART1
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                     //ʹÄÜUSART1½ÓÊÕÖжÏ
USART_Cmd(USART1, ENABLE);                                       //ʹÄÜUSART1
}

su-409464 发表于 2018-3-7 10:54:57

安 发表于 2018-3-7 09:30
在这之后发什么都不回复了是吗?如果是,可能是因为串口溢出导致,接收中断中要处理一下溢出。 ...

是的,可能是溢出了, 我配置串口的时候 只设置了一些普通的常数, 不知道默认的串口接收区是多大?

void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;

/******************************************************************
USART²ÎÊý³õʼ»¯:²¨ÌØÂÊ   ´«ÊäλÊý   Í£Ö¹Î»ÊýУÑéλÊý
                  115200         8         1      0(NO)
*******************************************************************/
USART_InitStructure.USART_BaudRate = 115200;                     //É趨´«ÊäËÙÂÊ
USART_InitStructure.USART_WordLength = USART_WordLength_8b;      //É趨´«ÊäÊý¾ÝλÊý
USART_InitStructure.USART_StopBits = USART_StopBits_1;             //É趨ֹͣλ¸öÊý
USART_InitStructure.USART_Parity = USART_Parity_No ;               //²»ÓÃУÑéλ
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//²»ÓÃÁ÷Á¿¿ØÖÆ
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    //ʹÓýÓÊպͷ¢Ë͹¦ÄÜ
USART_Init(USART1, &USART_InitStructure);                        //³õʼ»¯USART1

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                     //ʹÄÜUSART1½ÓÊÕÖжÏ

USART_Cmd(USART1, ENABLE);                                       //ʹÄÜUSART1
}

su-409464 发表于 2018-3-7 10:55:50

toofree 发表于 2018-3-7 09:37
不能够。都能发。
不过,如果像你主楼帖子发的小括号的话,那是全角符号,占两个字节。
请区分"("和"(", ...

可能是溢出了!!!
初次配置, 不知道 串口的接收区如何设置, 没有配置到,

void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;

/******************************************************************
USART²ÎÊý³õʼ»¯:²¨ÌØÂÊ   ´«ÊäλÊý   Í£Ö¹Î»ÊýУÑéλÊý
                  115200         8         1      0(NO)
*******************************************************************/
USART_InitStructure.USART_BaudRate = 115200;                     //É趨´«ÊäËÙÂÊ
USART_InitStructure.USART_WordLength = USART_WordLength_8b;      //É趨´«ÊäÊý¾ÝλÊý
USART_InitStructure.USART_StopBits = USART_StopBits_1;             //É趨ֹͣλ¸öÊý
USART_InitStructure.USART_Parity = USART_Parity_No ;               //²»ÓÃУÑéλ
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//²»ÓÃÁ÷Á¿¿ØÖÆ
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    //ʹÓýÓÊպͷ¢Ë͹¦ÄÜ
USART_Init(USART1, &USART_InitStructure);                        //³õʼ»¯USART1

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                     //ʹÄÜUSART1½ÓÊÕÖжÏ

USART_Cmd(USART1, ENABLE);                                       //ʹÄÜUSART1
}

su-409464 发表于 2018-3-7 10:56:24

bargagebaobei 发表于 2018-3-7 09:37
楼主你好,这个情况我也没有遇到过,你试试发送)看不会回当掉啊 还有就是(和2之间没有空格吧 还可是试试 ...

谢谢你, 可能是溢出了!正在查看默认串口接收区是多大

hello_bug 发表于 2018-3-7 11:03:47

串口的接收缓冲区应该是自己定义的一个数组之类的变量;看看实际应用时最大一次性能发多少字节,然后设定个最大值;每次接收完后,处理后,要清空接收字节数变量。
发字符是没问题的,在英文输入状态下。
页: [1] 2 3
查看完整版本: 关于STM32F030F4P6 串口接收发送问题