初级会员

- 积分
- 60
- 金钱
- 60
- 注册时间
- 2016-11-7
- 在线时间
- 9 小时
|
1金钱
本帖最后由 水龙王2016 于 2016-11-7 21:55 编辑
原子,你好:,我在学习STM32F103的CAN通信,我想设置我的板子ID为1,切只接收发送ID为1的邮件,应该怎么设置?我反复看了CAN通信例程,也搜索了论坛有关CAN的帖子,也没有搞懂,希望你能帮助我,谢谢!!
extern u8 table[20][8];
u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
{
u16 i=0;
if(tsjw==0||tbs2==0||tbs1==0||brp==0)return 1;
tsjw-=1;
tbs2-=1;
tbs1-=1;
brp-=1;
RCC->APB2ENR|=1<<2;
GPIOA->CRH&=0XFFF00FFF;
GPIOA->CRH|=0X000B8000;
GPIOA->ODR|=3<<11;
RCC->APB1ENR|=1<<25;
CAN->MCR=0x0000;
CAN->MCR|=1<<0;
while((CAN->MSR&1<<0)==0)
{
i++;
if(i>100)return 2;
}
CAN->MCR|=0<<7;
CAN->MCR|=0<<6;
CAN->MCR|=0<<5;
CAN->MCR|=1<<4;
CAN->MCR|=0<<3;
CAN->MCR|=0<<2;
CAN->BTR=0x00000000;
CAN->BTR|=mode<<30;
CAN->BTR|=tsjw<<24;
CAN->BTR|=tbs2<<20;
CAN->BTR|=tbs1<<16;
CAN->BTR|=brp<<0;
CAN->MCR&=~(1<<0);
while((CAN->MSR&1<<0)==1)
{
i++;
if(i>0XFFF0)return 3;
}
CAN->FMR|=1<<0;
CAN->FA1R&=~(1<<0);
CAN->FS1R|=1<<0;
CAN->FM1R|=0<<0;
CAN->FFA1R|=0<<0;
CAN->sFilterRegister[0].FR1=0x00000001; //32Î位ID,对吗?
CAN->sFilterRegister[0].FR2=0xffffffff; //32Î位MASK,对吗?
CAN->FA1R|=1<<0;
CAN->FMR&=0<<0;
#if CAN_RX0_INT_ENABLE
CAN->IER|=1<<1;
MY_NVIC_Init(1,0,USB_LP_CAN_RX0_IRQChannel,2);
#endif
return 0;
}
|
|