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

关于STM32F030F4P6 串口接收发送问题

[复制链接]
su-409464 提问时间:2018-3-7 08:52 /
做了一个 STM32的串口模块, 开启了接收中断, 在中断中做了以下操作,
想实现: 将串口接收的内容 通过串口再发出去
  1. <div> void USART1_IRQHandler(void)
  2. {
  3.   if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  4.   {
  5.     USART1_SendByte((uint8_t)(USART1->RDR));     
  6.   }</div><div>}
  7. </div>
复制代码


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

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

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


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


收藏 评论22 发布时间:2018-3-7 08:52

举报

22个回答
回答时间:2018-3-7 11:10:22
普通的串口接收就一个字节
回答时间:2018-3-7 09:30:48
在这之后发什么都不回复了是吗?如果是,可能是因为串口溢出导致,接收中断中要处理一下溢出。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

anobodykey 回答时间:2018-3-7 09:19:46
不会的,串口是不区分字符的,你输入一长串英文字符看看

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

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

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

toofree 回答时间:2018-3-7 09:37:36
本帖最后由 toofree 于 2018-3-7 09:46 编辑

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

傲游截图20180307093536.png

傲游截图20180307093612.png


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

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

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

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

  1. void USART_Configuration(void)
  2. {
  3.   USART_InitTypeDef USART_InitStructure;

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

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

  16.   USART_Cmd(USART1, ENABLE);                                         //ʹÄÜUSART1
  17. }
复制代码
su-409464 回答时间:2018-3-7 10:55:50
toofree 发表于 2018-3-7 09:37
不能够。都能发。
不过,如果像你主楼帖子发的小括号的话,那是全角符号,占两个字节。
请区分"("和"(", ...

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

  1. void USART_Configuration(void)
  2. {
  3.   USART_InitTypeDef USART_InitStructure;

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

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

  16.   USART_Cmd(USART1, ENABLE);                                         //ʹÄÜUSART1
  17. }
复制代码

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

谢谢你, 可能是溢出了!正在查看默认串口接收区是多大
hello_bug 回答时间:2018-3-7 11:03:47
串口的接收缓冲区应该是自己定义的一个数组之类的变量;看看实际应用时最大一次性能发多少字节,然后设定个最大值;每次接收完后,处理后,要清空接收字节数变量。
发字符是没问题的,在英文输入状态下。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

123下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版