OpenEdv-开源电子网

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

STM32F103ZET6串口通讯

[复制链接]

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
发表于 2013-7-12 14:23:34 | 显示全部楼层 |阅读模式
我这边有个高速射频读取模块  接口为串行接口
命令格式"EF"<CHCK><ETX>
42 46 88 03
响应格式<Status><Data><CHCK><ETX>
例如卡号:30 1D 00 9D CF B9 72 03


用战舰开发板如何编写程序啊  谢谢
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
 楼主| 发表于 2013-7-12 14:40:32 | 显示全部楼层
主要是读取卡号  进行识别是否与程序定义一致  不一致继续执行程序  一致就停止
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-12 19:19:22 | 显示全部楼层
回复【楼主位】龙胜阳子:
---------------------------------
实现数据接收,就简单了.
利用超时方法做数据接收处理比较好.当然,如果你的命令总是固定格式,固定长度,那么直接判断数据长度,也可以.
只要能正常接收数据了,处理就很简单了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
 楼主| 发表于 2013-10-4 13:59:42 | 显示全部楼层

问题已经解决
void USART2_IRQHandler(void)                 //串口2中断服务程序
 {
 u8 Res;
#ifdef OS_TICKS_PER_SEC   //如果时钟节拍数定义了,说明要使用ucosII了.
 OSIntEnter();   
#endif
 if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断
  {
  Res =USART_ReceiveData(USART2);//(USART2->DR); //读取接收到的数据
  

   if((Res==0x55)&&(USART2_begin==0))//接收到了包头0x55
    {
    USART2_len=0;
    USART2_begin=1;
    }
   if((Res==0xaa)&&(USART2_len<USART_REC_LEN)&&(USART2_begin==1))  //接收到了包尾0xaa
    { 
    USART2_end=1;
    USART2_begin=0;
    }
   if(USART2_len>(USART_REC_LEN))
       {
    USART2_end=1;
    USART2_begin=0;
    USART2_overflow=1;
    }  
    USART_RX_BUF[USART2_len]=Res ;
    USART2_len++;
        }      
 




////////////////////////////RFID地标读取模块///////////////////////////////////////////////
 if((USART2_end==1))                              //串口数据接收完成
  { 
   unsigned char dq[USART_REC_LEN];         //定义读取的数组
   unsigned char flag=0;         //射频标记
   unsigned char flag1=0;
   USART2_end=0;        //串口2包尾标记复位
   len=(USART2_len-1);                      //得到此次接收到的数据长度((USART2_len-1)排除包尾)
   memcpy(dq,USART_RX_BUF,len);     //
  if(USART_RX_BUF[1]+1!=len)         //长度校验
   {
   OINT_COLOR=RED;
   Show_Str(160,36,200,16,"读卡失败  长度",16,0);
   //Show_Str(325,167.5,200,16,"故障停车",16,0);
   goto jjstop;
   }
  else if(motor==1)
   {
   LCD_ShowString(40,36,200,16,16,"                      ");
   }
  if(USART_RX_BUF[len-1]!=bcc_cal(len-1,USART_RX_BUF))
   {
   OINT_COLOR=RED;
   Show_Str(160,36,200,16,"读卡失败  校验码",16,0);
   //Show_Str(325,167.5,200,16,"故障停车",16,0);
   goto jjstop;
   }
  else if(motor==1)
   {
   LCD_ShowString(40,36,200,16,16,"                        ");
   } 
  ////////////////////////////////////当前站点////////////////////////////////////////////////////////
 for(q=0;q<20;q++)
 { 
   for(t=4;t<len-1;t++)     //t=4除去包头、长度、命令码、状态标记
   {      
     if(SD[q][t-4]!=dq[t])            //二维数据组和读取数据组比较
   {
    flag1=0;
    break;
   }
     else
   {
    flag1=1;
   }
   }
     if(flag1==1)
   {
    num1=q+1;
    flag1=0;
   }
 }
    POINT_COLOR=BRED;
          //Show_Str(40,140,200,16,"前一站点:",16,0);  
          POINT_COLOR=BLUE;
          LCD_ShowxNum(85,75,num1,3,16,0);
///////////////////////////////////////站点比较////////////////////////////////////////////////////////
    for(t=4;t<len-1;t++)     //t=4除去包头、长度、命令码、状态标记
   {   
    //memcpy(dq,USART_RX_BUF,len);       //   
    if(SD[num-1][t-4]!=dq[t])            //二维数据组和读取数据组比较
    {
    flag=0;
    break;
    }
    else
    {
    flag=1;
    }
   }
    if(flag==1)
    {
    flag=0;
    POINT_COLOR=RED;
    Show_Str(325,167.5,200,16,"停车  ",16,0);         //小车停止
    goto stop;
    }
     USART2_end=0;
   }

回复 支持 反对

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
 楼主| 发表于 2013-10-4 14:03:12 | 显示全部楼层
我这个弄得是理想通讯协议 包头+长度+数据+校验码(异或)+包尾
包头包尾互为反码
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-4 22:25:45 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-12 11:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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