完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
测试了 普通英文字符 ,都是正常的。
但是小括号符 就不行,程序就死掉了 ,例如 aaa(2,2“”) 串口输出 aaa( 然后就死了~~~~ 请问 小括号符 不能接收吗?? |
|
相关推荐
22个回答
|
|
|
在这之后发什么都不回复了是吗?如果是,可能是因为串口溢出导致,接收中断中要处理一下溢出。
|
|
|
|
|
|
不会的,串口是不区分字符的,你输入一长串英文字符看看
|
|
|
|
|
|
楼主你好,这个情况我也没有遇到过,你试试发送)看不会回当掉啊 还有就是(和2之间没有空格吧 还可是试试写一个字符串就是用“222”缀上“(”,发送试试
|
|
|
|
|
|
本帖最后由 toofree 于 2018-3-7 09:46 编辑
不能够。都能发。 不过,如果像你主楼帖子发的小括号的话,那是全角符号,占两个字节。 请区分"("和"(",这两个是不一样的。 你的程序只适合一个字节一个字节的发,不能两个字节一起发。就是说两个字节发送之间,得有一定的延时。 或者写成,中断中接收字符到数组,主程序中发送。发送不能影响接收中断。 |
|
|
|
|
|
好像真的是 溢出了~~~ 几个字符可以,但是一长串 字符就 挂了!!!! 请问 默认 串口的接收区 是多大? 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 } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
跨界F16 发表于 2019-3-15 20:45 谢谢你, 可能是溢出了!正在查看默认串口接收区是多大 |
|
|
|
|
|
串口的接收缓冲区应该是自己定义的一个数组之类的变量;看看实际应用时最大一次性能发多少字节,然后设定个最大值;每次接收完后,处理后,要清空接收字节数变量。
发字符是没问题的,在英文输入状态下。 |
|
|
|
|
|
普通的串口接收就一个字节
|
|
|
|
|
|
ST的串口没有硬件缓存区,你得用软件实现,譬如申请一个100字节的缓存区,在中断中把收到的数据放到缓存中,在主函数中进行回显操作,论坛里有很多这样的例程的 |
|
|
|
|
|
好的谢谢!
|
|
|
|
|
|
好的明白!
这样的话 关于软件缓存的动作我就有一个 疑问; 首选由于 ST 没有硬件缓存区,那么意味着 接收到一个完整的字节 后 中断触发。 中断触发后,串口是否还在工作呢? 比如发送端发过来 一个20字节的字符, 收到第一个字符之后 开始进入中断, 后面19个字符 是等中断出来, 然后下一个字节接收 触发中断 ,再进入中断接收? 还是, 在第一个字节进入中断后, 串口继续工作,后面的字符继续 “收” 进来? 如果是第二种情况 那么, 如果 发送端是不定时的话, 那软件上做缓存 会不会 出现 “断节” 的现象 比如 缓存区15个字节, 第一次 来了10个字符, 接收过程中又来了10个~~~ 只收后一个包的5个字符 |
|
|
1 条评论
|
|
|
中断产生后需要自己去把数据收到缓冲区,如果不收,这样就容易导致溢出。所有处理都是自己写代码解决。如果用DMA就不需要管理,接收到指定数量后会产生DMA中断。
|
|
|
|
|
TOPCB 发表于 2019-3-15 23:21 谢谢你! DMA 的工作机制 是 接收到指定数量后会产生DMA中断???? 那这样的不合适, 比如对应接收不定长 字符串的时候, 这个指定数量 就麻烦了。 可能接收了 其中的一般, 也可能接收了 未达到指定数量~~~~ |
|
|
|
|
|
|
|
|
|
|
|
是接收中断溢出问题,我也碰到了同样的问题,找了很久才发现,默认中断溢出是打开的,可以初始化的时候关闭掉
|
|
|
|
|
|
你要相信MCU的速度是很快的M级别的,而串口的速度是很慢的一般处于K级别,你处理完第一个字节时,第二个字节都有可能还没来到总线上呢,软件做的好的话一般不会出现你说的断节现象 |
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 09:50 , Processed in 1.349940 second(s), Total 123, Slave 102 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3220