你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
每日签到
STM32团队2
论坛吐槽优化专区
升级测试
stm32 串口接收字符串的问题
[复制链接]
wuhong377
提问时间:2014-3-24 15:59 /
阅读主题, 点击返回1楼
赞
0
收藏
1
评论
16
分享
发布时间:2014-3-24 15:59
请先
登录
后回复
16个回答
wkuang
回答时间:2014-3-25 22:35:50
a0a.1 0b0c
RE:stm32 串口接收字符串的问题
if(USART_GetITStatus(USART1, USART_IT_RXNE)==SET)
{
uart1_buf[count1++] = USART_ReceiveData(USART1);
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
if(count1 > 5)
{
Flag = 1;
count1 = 0;
}
}
你一次性收了6个字节的数据,当Count =5时, 你使用了uart1_buf[5],这个时候你的数据已经越界了, 访问了非法内存,内存越界,但是输出的时候你只输出了5个byte的数据, 导致最后一个数据没有输出。
代码有两个问题:1)踩内存,访问了非法内存,可能导致软件异常或者复位导致其他功能异常; 2)数据丢失。
代码功底有待加强
赞
0
评论
回复
支持
反对
wuhong377
回答时间:2014-3-26 15:34:35
a0a.1 0b0c
回复:stm32 串口接收字符串的问题
回复第 11 楼 于2014-03-25 22:35:50发表:
if(USART_GetITStatus(USART1, USART_IT_RXNE)==SET)
{
uart1_buf[count1++] = USART_ReceiveData(USART1);
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
if(count1 > 5)
{
Flag = 1;
count1 = 0;
}
}
你一次性收了6个字节的数据,当Count =5时, 你使用了uart1_buf[5],这个时候你的数据已经越界了, 访问了非法内存,内存越界,但是输出的时候你只输出了5个byte的数据, 导致最后一个数据没有输出。
代码有两个问题:1)踩内存,访问了非法内存,可能导致软件异常或者复位导致其他功能异常; 2)数据丢失。
代码功底有待加强
谢谢您的指导,我已经改了if(count1 > 4) 就是说接五个字节的数据了。这样子的时候,我串口助手发五个数据给单片机在返回,出现第一次返回的数据和发送的一致。但是第二次开始就不同了,如我发送的是 03 C8 C8 D7 96,手动发送的时候第二次开始就都是C8 C8 D7 96 96。 如果自动循环的发送 的话 后面稳定的返回数据是 C8 C8 D7 96 03也就是说移动了一位? 请问这是什么原因。每次复位的时候 返回的数据都是正确的。
赞
0
评论
回复
支持
反对
有缘于你
回答时间:2014-3-27 15:16:25
a0a.1 0b0c
RE:stm32 串口接收字符串的问题
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
赞
0
评论
回复
支持
反对
wuhong377
回答时间:2014-3-27 17:41:16
a0a.1 0b0c
回复:stm32 串口接收字符串的问题
回复第 13 楼 于2014-03-27 15:16:25发表:
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
我觉得是接收的问题,因为我自己定义一个数组,让单片机发送到串口助手的话,一直发都没问题。不懂怎么看单片机收到的是不是正确,所以我这个程序就是将接受到的数据返回到串口来观察和验证。
赞
0
评论
回复
支持
反对
深秋独影
回答时间:2014-3-30 19:28:18
a0a.1 0b0c
回复:stm32 串口接收字符串的问题
回复第 14 楼 于2014-03-27 17:41:16发表:
回复第 13 楼 于2014-03-27 15:16:25发表:
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
我觉得是接收的问题,因为我自己定义一个数组,让单片机发送到串口助手的话,一直发都没问题。不懂怎么看单片机收到的是不是正确,所以我这个程序就是将接受到的数据返回到串口来观察和验证。
用调试就可以看到收到的数据了,设置断点
赞
0
评论
回复
支持
反对
dzc2001
回答时间:2014-4-2 16:41:18
a0a.1 0b0c
RE:stm32 串口接收字符串的问题
固件库的参考代码里面有现成的啊,这部分程序可以参考那些的。
赞
0
评论
回复
支持
反对
feiante-155820
回答时间:2014-4-12 21:41:40
a0a.1 0b0c
RE:stm32 串口接收字符串的问题
NVIC_Configuration(); 没有声明,自然是进不了中断了
赞
0
评论
回复
支持
反对
1
2
/ 2 页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
RE:stm32 串口接收字符串的问题
{
uart1_buf[count1++] = USART_ReceiveData(USART1);
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
if(count1 > 5)
{
Flag = 1;
count1 = 0;
}
}
你一次性收了6个字节的数据,当Count =5时, 你使用了uart1_buf[5],这个时候你的数据已经越界了, 访问了非法内存,内存越界,但是输出的时候你只输出了5个byte的数据, 导致最后一个数据没有输出。
代码有两个问题:1)踩内存,访问了非法内存,可能导致软件异常或者复位导致其他功能异常; 2)数据丢失。
代码功底有待加强
回复:stm32 串口接收字符串的问题
if(USART_GetITStatus(USART1, USART_IT_RXNE)==SET)
{
uart1_buf[count1++] = USART_ReceiveData(USART1);
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
if(count1 > 5)
{
Flag = 1;
count1 = 0;
}
}
你一次性收了6个字节的数据,当Count =5时, 你使用了uart1_buf[5],这个时候你的数据已经越界了, 访问了非法内存,内存越界,但是输出的时候你只输出了5个byte的数据, 导致最后一个数据没有输出。
代码有两个问题:1)踩内存,访问了非法内存,可能导致软件异常或者复位导致其他功能异常; 2)数据丢失。
代码功底有待加强
谢谢您的指导,我已经改了if(count1 > 4) 就是说接五个字节的数据了。这样子的时候,我串口助手发五个数据给单片机在返回,出现第一次返回的数据和发送的一致。但是第二次开始就不同了,如我发送的是 03 C8 C8 D7 96,手动发送的时候第二次开始就都是C8 C8 D7 96 96。 如果自动循环的发送 的话 后面稳定的返回数据是 C8 C8 D7 96 03也就是说移动了一位? 请问这是什么原因。每次复位的时候 返回的数据都是正确的。
RE:stm32 串口接收字符串的问题
回复:stm32 串口接收字符串的问题
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
我觉得是接收的问题,因为我自己定义一个数组,让单片机发送到串口助手的话,一直发都没问题。不懂怎么看单片机收到的是不是正确,所以我这个程序就是将接受到的数据返回到串口来观察和验证。
回复:stm32 串口接收字符串的问题
回复第 13 楼 于2014-03-27 15:16:25发表:
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
我觉得是接收的问题,因为我自己定义一个数组,让单片机发送到串口助手的话,一直发都没问题。不懂怎么看单片机收到的是不是正确,所以我这个程序就是将接受到的数据返回到串口来观察和验证。
用调试就可以看到收到的数据了,设置断点
RE:stm32 串口接收字符串的问题
RE:stm32 串口接收字符串的问题