关于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( 然后就死了~~~~
请问 小括号符 不能接收吗??
普通的串口接收就一个字节 在这之后发什么都不回复了是吗?如果是,可能是因为串口溢出导致,接收中断中要处理一下溢出。 不会的,串口是不区分字符的,你输入一长串英文字符看看 楼主你好,这个情况我也没有遇到过,你试试发送)看不会回当掉啊 还有就是(和2之间没有空格吧 还可是试试写一个字符串就是用“222”缀上“(”,发送试试 本帖最后由 toofree 于 2018-3-7 09:46 编辑
不能够。都能发。
不过,如果像你主楼帖子发的小括号的话,那是全角符号,占两个字节。
请区分"("和"(",这两个是不一样的。
你的程序只适合一个字节一个字节的发,不能两个字节一起发。就是说两个字节发送之间,得有一定的延时。
或者写成,中断中接收字符到数组,主程序中发送。发送不能影响接收中断。
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
}
安 发表于 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
} 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
}
bargagebaobei 发表于 2018-3-7 09:37
楼主你好,这个情况我也没有遇到过,你试试发送)看不会回当掉啊 还有就是(和2之间没有空格吧 还可是试试 ...
谢谢你, 可能是溢出了!正在查看默认串口接收区是多大 串口的接收缓冲区应该是自己定义的一个数组之类的变量;看看实际应用时最大一次性能发多少字节,然后设定个最大值;每次接收完后,处理后,要清空接收字节数变量。
发字符是没问题的,在英文输入状态下。