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

求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!

[复制链接]
傻小孩b 提问时间:2014-4-5 10:29 /
 申明下:我发的字符串格式是这样的:    “F0AF”
两个‘F’是用来判断数据的正确性的   ‘A’这个数据就是我需要的。求人帮忙!!!谢谢!!
void USART1_IRQHandler(void)                        //串口1中断服务程序
        {
        int i=0;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是‘F’,'F'结尾)
                {
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);     //清除中断标志       
                USART_RX_BUF[Usart1_Rx_Num]=USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
                Usart1_Rx_Num++;}
                //判断数据的正确性
                if((USART_RX_BUF[0]==0x46)&&(USART_RX_BUF[Usart1_Rx_Num-1]==0x46)) //数据时'F' 'F'开头与结尾 例如'F0AF'
                         USART_RX_STA=1;//接收标志位
               
                if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)//清除溢出错误标志位
                {
                        USART_ClearFlag(USART1,USART_FLAG_ORE);//清除
                        USART_ReceiveData(USART2);//读DR
                }
                if(USART_RX_STA)
                        {                   switch (USART_RX_BUF[2])        {
                                                                case 0x41:run();break;
                                                                case 0x42:right();break;
                                                                case 0x43:left();break;
                                                                case 0x44:back();break;                }

                for(;i
收藏 评论11 发布时间:2014-4-5 10:29

举报

11个回答
傻小孩b 回答时间:2014-4-5 10:31:18

RE:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!

求路过的帮忙下,谢谢
那片清茶 回答时间:2014-4-5 10:52:01

回复:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!

你先在  USART_RX_STA=1;//接收标志位设一个断点看看,程序会不会进来,如果不进来,那就把后面的注释掉,然后把进来的数据直接放到数组里面看看,确保你的接收数据是没问题的。
pythonworld 回答时间:2014-4-5 11:21:12

RE:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!

Usart1_Rx_Num=1时就有问题了.
傻小孩b 回答时间:2014-4-5 11:24:32

回复:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!

回复第 3 楼 于2014-04-05 10:52:01发表:
你先在  USART_RX_STA=1;//接收标志位设一个断点看看,程序会不会进来,如果不进来,那就把后面的注释掉,然后把进来的数据直接放到数组里面看看,确保你的接收数据是没问题的。
 
我不知道怎么断点调试T T
 
傻小孩b 回答时间:2014-4-5 11:24:52

回复:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!

回复第 4 楼 于2014-04-05 11:21:12发表:
Usart1_Rx_Num=1时就有问题了.
 
 
怎么说?
 
pythonworld 回答时间:2014-4-5 11:30:21

回复:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!

(USART_RX_BUF[0]==0x46)&&(USART_RX_BUF[Usart1_Rx_Num-1]==0x46)指向同一个值.
dzc2001 回答时间:2014-4-9 11:01:01

回复:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!

 不建议在中断里做处理,建议挪到外面去,中断里面只保留标记。
有缘于你 回答时间:2014-4-10 22:07:07

RE:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!

//判断数据的正确性
    if ((USART_RX_BUF[0] == 0x46) && (USART_RX_BUF[Usart1_Rx_Num - 1] == 0x46)) //数据时'F' 'F'开头与结尾 例如'F0AF'
    {
        USART_RX_STA = 1;    //接收标志位
    }
修改为
    //判断数据的正确性
    if (Usart1_Rx_Num > 2)
    {
        if ((USART_RX_BUF[0] == 0x46) && (USART_RX_BUF[Usart1_Rx_Num - 1] == 0x46)) //数据时'F' 'F'开头与结尾 例如'F0AF'
        {
            USART_RX_STA = 1;    //接收标志位
        }
    }
feiante-155820 回答时间:2014-4-12 23:35:49

RE:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!

首先你应该说明下你这段程序在板子上跑,现象是什么?
你可以连上仿真器设个断点看看,能不能收到数据,数据个数对不对,然后在考虑后面的比较问题
fengye5340 回答时间:2014-4-19 12:34:45

RE:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!

楼主的程序有个很大问题,
USART_RX_BUF[Usart1_Rx_Num]=USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
这个语句是返回的16位数值,你得进行数据转换,要不然你接收的数据时错误的。
修改为:
USART_RX_BUF[Usart1_Rx_Num]=(unsigned char)USART_ReceiveData(USART1);
你这个功能很容易实现,最好把字符判断的放在while()中进行。
天外之客 回答时间:2014-4-22 13:07:19

RE:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!

USART_ClearFlag(USART1,USART_FLAG_ORE);//清除
                        USART_ReceiveData(USART2);//读DR
楼主你使用的USART1,读的怎么是USART2的数据

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版