OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5283|回复: 4

串口试验问题

[复制链接]

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2016-6-26
在线时间
29 小时
发表于 2016-7-5 16:42:18 | 显示全部楼层 |阅读模式
作为一个新人,只会模仿,学习,程序中的任何一点不理解都会带来一连串的问号,导致步履维艰。

问题可能很幼稚,但是经过了思考,希望能得到解答。(帮忙看看,这四个思考对不对

对这个协议还是有点堵得慌。


为了方便有同样问题的人搜索到,这里贴出源代码。

主要看图,图里面有很多标记。


#define USART_REC_LEN                          200          //定义最大接收字节数 200    ???小于2^14就行(16384)  
                                                                //????只存储200个“字节数”,与可以存储16384个“字节数”相比,是不是太小了?
                                                                                                                                       
                                                                                                                                       
#define EN_USART1_RX                         1                //使能(1)/禁止(0)串口1接收
                 
extern u8  USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符  
                                                                //???这里应该是最大缓冲 USART_REC_LEN 个“字节数”而非“字节”
                                                                                                                                                               
                                                                                                                                                               
extern u16 USART_RX_STA;                         //接收状态标记       
//如果想串口中断接收,请不要注释以下宏定义
void uart_init(u32 bound);
#endif




void USART1_IRQHandler(void)                        //串口1中断服务程序
        {
        u8 Res;
#if SYSTEM_SUPPORT_OS                 //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
                {
                Res =USART_ReceiveData(USART1);        //读取接收到的数据
               
                if((USART_RX_STA&0x8000)==0)//接收未完成
                        {
                        if(USART_RX_STA&0x4000)//接收到了0x0d
                                {
                                if(Res!=0x0a)
                                        USART_RX_STA=0;//接收错误,重新开始
                                else
                                        USART_RX_STA|=0x8000;        //接收完成了
                                }
                        else //还没收到0X0D
                                {       
                                if(Res==0x0d)
                                        USART_RX_STA|=0x4000;
                                else
                                        {
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                                        USART_RX_STA++;
                                        if(USART_RX_STA>(USART_REC_LEN-1))  // ???“USART_REC_LEN-1”,因为末字节为换行符。
                                                USART_RX_STA=0;//接收数据错误,重新开始接收          
                                        }                 
                                }
                        }                    
     }


搜狗截图20160705163658.jpg
搜狗截图20160705163726.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2016-6-26
在线时间
29 小时
 楼主| 发表于 2016-7-5 20:39:50 | 显示全部楼层
本帖最后由 zzsj1990 于 2016-7-6 08:29 编辑

容我稍微把帖子顶上去:):):):):):)

我自己回复一下自己的第4个问题
这是关于数组的知识
定义数组的成员有200个,但是按照语法编号是0-199
所以需要“-1”

这样理解应该对吧???


回复 支持 反对

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2016-6-26
在线时间
29 小时
 楼主| 发表于 2016-7-6 08:28:02 | 显示全部楼层
我自己回复一下自己的第4个问题,
这是关于数组的知识
定义数组的成员有200个,但是按照语法编号是0-199
所以需要“-1”

这样理解应该对吧???
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-7-6 08:33:00 | 显示全部楼层
回完这个帖子开始工作,容我对楼主娓娓道来:
1.这只是个例程,最多接收多少可以自己定(不超过2^14),定义太多而不用会浪费RAM;
2.不知道问题是什么;
3.楼主处女座,强迫症?对字节、字节数咬文嚼字,不过,以我个人感觉,这里还是用字节顺畅、合适;
4.“USART_REC_LEN-1”,不是因为末字节为换行符,末字节不计在内,接收缓冲区作为接收数组下标最大为USART_REC_LEN-1。
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2016-6-26
在线时间
29 小时
 楼主| 发表于 2016-7-6 16:53:45 | 显示全部楼层
龙之谷 发表于 2016-7-6 08:33
回完这个帖子开始工作,容我对楼主娓娓道来:
1.这只是个例程,最多接收多少可以自己定(不超过2^14),定 ...

谢谢,
今天把C语言的书翻出来,第四个问题,自己理解的确实有误。

十分感谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 19:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表