完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在尝试从usart到stm8l获取一个字符串,但是当我得到2byte char时,RXNE很清楚,我不能再得到char。
我的代码是: 主要 { int8_t count = 0; getdata =''''; 而(1) { getdata [count ++] = getchar(); 如果(的GetData [0] == 0X0D&安培;&安培;的GetData [1] ==的0x0A) { 的GetData [0] =的GetData [1] = NULL;计数= 0; } 如果(的GetData [计数-1] ==的0x0A) { 的GetData [计数-1] = NULL; 的GetData [COUNT] = NULL; 打破; } } } GETCHAR_PROTOTYPE { char c = 0; / * ??????? * / while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)== RESET); / * ??????? * / c = USART_ReceiveData8(USART1); USART_ClearFlag(USART1,USART_FLAG_RXNE); 返回(c); } 如果您有任何想法,请帮忙! 非常感谢! 以上来自于谷歌翻译 以下为原文 I'm trying to get a string from usart to stm8l, but when i got 2byte char, the RXNE is clear, and i can't get anymore char. My code is: main { int8_t count = 0; getdata = ''''; while(1) { getdata[count++] = getchar(); if(getdata[0]==0x0D&&getdata[1]==0x0A) { getdata[0]=getdata[1]=NULL; count=0; } if(getdata[count-1]==0x0A) { getdata[count-1]=NULL; getdata[count]=NULL; break; } } } GETCHAR_PROTOTYPE { char c = 0; /* ??????? */ while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); /* ??????? */ c = USART_ReceiveData8(USART1); USART_ClearFlag(USART1, USART_FLAG_RXNE); return (c); } Please help if you have any idea! Thanks so much! |
|
相关推荐
6个回答
|
|
c = USART_ReceiveData8(USART1);
USART_ClearFlag(USART1,USART_FLAG_RXNE); 我认为你在这里两次清除RXNE标志,因为读取数据reg也会清除它。 这可能会导致一些问题。 编辑: 如果(的GetData [0] == 0X0D&安培;&安培;的GetData [1] ==的0x0A) { 的GetData [0] =的GetData [1] = NULL;计数= 0; } 如果(的GetData [计数-1] ==的0x0A) { 的GetData [计数-1] = NULL; 上面的代码实际上可以尝试访问getdata [-1],这真的不太好。 以上来自于谷歌翻译 以下为原文 c = USART_ReceiveData8(USART1); USART_ClearFlag(USART1, USART_FLAG_RXNE); I think you clear the RXNE flag twice here as reading data reg also clears it. It may cause some problem. Edit: if(getdata[0]==0x0D&&getdata[1]==0x0A) { getdata[0]=getdata[1]=NULL; count=0; } if(getdata[count-1]==0x0A) { getdata[count-1]=NULL; The above code can actually try to access getdata[-1], it's really not good. |
|
|
|
我在GETCHAR原型中删除了行''USART_ClearFlag(USART1,USART_FLAG_RXNE);''。
使用代码: 如果(的GetData [0] == 0X0D&安培;&安培;的GetData [1] ==的0x0A) { 的GetData [0] =的GetData [1] = NULL;计数= 0; } 如果(的GetData [计数-1] ==的0x0A) { 的GetData [计数-1] = NULL; 我尝试获取breakpage符号,并在行''getdata [count ++] = getchar();'' 我增加了计数变量,所以我不会访问''getdata [-1]错误''。 我非常努力,即使我不关心RXNE旗帜,但我总是只得到2个字符。 如果你能帮我把字符串写成stm8l,我将非常感激。 以上来自于谷歌翻译 以下为原文 I have deleted line '' USART_ClearFlag(USART1, USART_FLAG_RXNE);'' in GETCHAR prototype. With code: if(getdata[0]==0x0D&&getdata[1]==0x0A) { getdata[0]=getdata[1]=NULL; count=0; } if(getdata[count-1]==0x0A) { getdata[count-1]=NULL; I try to get the breakpage symbol, and in line ''getdata[count++] = getchar();'' I have increased count variable, so i won't get access ''getdata[-1] error''. I try very much, evenwhen i dont care about RXNE flag, but I always get only 2 char. I'm very grateful if you can help me get a string to stm8l. |
|
|
|
int8_t count = 0;
getdata =''''; getdata缓冲区的实际大小是什么,在哪里声明。如果它不是缓冲区问题那么我不知道是什么。带代码: 如果(的GetData [0] == 0X0D&安培;&安培;的GetData [1] ==的0x0A) { 的GetData [0] =的GetData [1] = NULL;计数= 0; } 如果(的GetData [计数-1] ==的0x0A) { 的GetData [计数-1] = NULL;} 我尝试获取breakpage符号,并在行''getdata [count ++] = getchar();'' 我增加了计数变量,所以我不会访问''getdata [-1]错误''。 好的,但是当你得到0x0d + 0x0a时,count被重置为零,然后你访问getdata [0-1]。但它应该是: 以上来自于谷歌翻译 以下为原文 int8_t count = 0; getdata = ''''; What is the actual size of getdata buffer, where declared.If it's not the buffer problem then I don't know what.With code: if(getdata[0]==0x0D&&getdata[1]==0x0A) { getdata[0]=getdata[1]=NULL; count=0; } if(getdata[count-1]==0x0A) { getdata[count-1]=NULL;} I try to get the breakpage symbol, and in line ''getdata[count++] = getchar();'' I have increased count variable, so i won't get access ''getdata[-1] error''. OK, but when you get 0x0d+0x0a, count is reset to zero ant then you access getdata[0-1].Baybe it should be:
|
|
|
|
非常感谢knik,你是如此亲切!
我宣布了char getdata [32]。我在while(1)中删除除了''getdata [count ++] = getchar();''之外的所有代码来获取数据,但是当我调试时我只得到2个字符。 你有任何想法解决这个问题。 以上来自于谷歌翻译 以下为原文 Thank you so much knik, you're so gracious! I declared char getdata[32]. And i deleted all of code except line ''getdata[count++] = getchar();'' in while(1) to get data, but i just got 2 char when I debug. Do u have any idea to resolve this problem. |
|
|
|
也许波特率设置不正确,请确保收到正确的字符。
当数据速率不匹配时,您可能会收到一些垃圾。 以上来自于谷歌翻译 以下为原文 Maybe baud rate is not set correctly, make sure you receive correct chars. It may happen that you receive some garbage when data rates don't match. |
|
|
|
是的,我收到了正确的字符。波特率有效。
我认为stm8l的数据缓冲区只有2byte。但如果它是正确的,如何从usart收到一个字符串!这么困难! 以上来自于谷歌翻译 以下为原文 Yes, I recieve the correct char. Baudrate is valid. I think the data buffer of stm8l just only 2byte. But if it's right, how to recieve a string from usart! So difficult! |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2448 浏览 1 评论
3157 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1724 浏览 1 评论
3542 浏览 6 评论
5902 浏览 21 评论
882浏览 4评论
1258浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
526浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1242浏览 3评论
1297浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-27 20:17 , Processed in 1.146710 second(s), Total 89, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号