这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » wenyangzeng ARM DIY进程贴 红外解码

共107条 6/11 |‹ 4 5 6 7 8 9 ›| 跳转至
高工
2012-05-07 22:55:18     打赏
51楼
谢谢,弄成双屏的,那才爽呢!我现在有一个屏了

工程师
2012-05-08 18:32:32     打赏
52楼
楼主能不能给我分享下CAN的调试经验啊,我最近一直搞,搞了好几天了,可发送程序总是被挂起。我想看看楼主是怎么设置的啊。

工程师
2012-05-08 19:49:19     打赏
53楼

CAN双机通信经验分享

楼上:如果你只有一部STM32,那么是没有必要使用中断的。这时。主程序大概是这样的:在进入for()前CAN_Polling()只执行1次,然后你判断返回的标志位去显示LED.如果要不断发送,就把该函数移到循环中。
int main(void)

  //片内硬件初始化

 
    FAG=CAN_Polling(); //如果没有节点通信,则使用自发自收通信 FAG是预先定义的标志位
// CAN_Interrupt();//如果有节点通信,则使用节点通信

 for(;;)

 {
          //FAG=CAN_Polling();移到这里就可以反复发送接收。

        
          //这里加入你要显示结果的函数


 }
}

bool CAN_Polling(void)
{
 CAN_InitTypeDef         CAN_InitStructure;
 CAN_FilterInitTypeDef   CAN_FilterInitStructure;

 CanTxMsg TxMessage;
 CanRxMsg RxMessage;
 u16 i=0;
 u8 TransmitMailbox;
 
 /* CAN register init */
 CAN_DeInit(CAN1);
 CAN_StructInit(&CAN_InitStructure);
 
 /* CAN cell init */
 CAN_InitStructure.CAN_TTCM=DISABLE;  //时间触发
 CAN_InitStructure.CAN_ABOM=DISABLE;  //自动离线管理
 CAN_InitStructure.CAN_AWUM=DISABLE;  //自动唤醒
 CAN_InitStructure.CAN_NART=ENABLE;  //自动重传(注意,DISABLE才是自动重传)
 CAN_InitStructure.CAN_RFLM=DISABLE;  //失能FIFO锁定模式
 CAN_InitStructure.CAN_TXFP=ENABLE;  //失能FIFO优先级
 CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;     //环回模式,自发自收
 CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
 CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
 CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
 CAN_InitStructure.CAN_Prescaler=5;
 CAN_Init(CAN1,&CAN_InitStructure);
 
 /* CAN 过滤器设置 */
 CAN_FilterInitStructure.CAN_FilterNumber=0;      //过滤器编号(0-13)
 CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //过滤方式
 CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //位宽
CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;//CAN_FIFO0;
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
/* transmit */
TxMessage.StdId=0x11;
//TxMessage.ExtId=0x34;
TxMessage.RTR=CAN_RTR_DATA;
TxMessage.IDE=CAN_ID_STD;
TxMessage.DLC=2;
TxMessage.Data[0]=send_adc&0xff;;              //这里传送的已经是ADC的数据了。
TxMessage.Data[1]=send_adc8;
TransmitMailbox=CAN_Transmit(CAN1,&TxMessage);//这句是发送
i=0;
while((CAN_TransmitStatus(CAN1,TransmitMailbox)!=CANTXOK)&&(i!=0xFF))  i++;
i=0;
 while((CAN_MessagePending(CAN1,CAN_FIFO0)

 RxMessage.StdId=0x00;
 RxMessage.IDE=CAN_ID_STD;  //标准包
 RxMessage.DLC=2;

 RxMessage.Data[0]=0x00;
 RxMessage.Data[1]=0x00;

 

 CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);//这里是接收
 if (RxMessage.StdId!=0x11) return FALSE;
 
 if (RxMessage.IDE!=CAN_ID_STD) return FALSE;
 
 if (RxMessage.DLC!=2) return FALSE;
 
 if ((RxMessage.Data[0]<<8|RxMessage.Data[1])!=0xAAAA) return FALSE;
  return TRUE;
}

如果你使用单机进行调试,又打开了CAN中断,则有可能因为没有节点,使中断程序一直挂起。


高工
2012-05-08 19:56:06     打赏
54楼

学习了


工程师
2012-05-08 20:17:46     打赏
55楼
麻烦告知QQ,详细谈谈,我的QQ382392838。我有两个板子

工程师
2012-05-08 20:28:56     打赏
56楼
你最好是单机先自循环能成功后,再用中断方式连接2台机器。因为2台机器如果其中1台硬件或软件问题,都会造成不联机。这时你比较难判断到底问题出在哪里。

工程师
2012-05-08 20:32:15     打赏
57楼
忘了1点:板上R51和R52要对调1下,VD230第8脚平时要低电平。

写错了:是R50和R51。

或如下图


工程师
2012-05-08 22:50:48     打赏
58楼
已经自测完成了,希望楼主能把你的源代码给我分享下,便于我的进一步测试,好吧。

工程师
2012-05-08 22:59:09     打赏
59楼
应该是R50和R51对调吧?

工程师
2012-05-09 11:22:53     打赏
60楼
    对不起,一时粗心了。楼上说的对,是R50和R51。
    我把自循环的源代码整个工程都上传大家共享。 下载后解压缩,编译后执行,ADC我是设定在原来超声波的接口通道9,你可以在代码中修改到你所需要的通道。
点击进入下载CAN自测试.rar

共107条 6/11 |‹ 4 5 6 7 8 9 ›| 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]