打印
[STM32F1]

STM32F107 can1通信引脚重映射到PB8,PB9,用USB_CAN助手发送数据失败,求大神

[复制链接]
2389|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
汤火|  楼主 | 2015-12-21 14:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void CAN1__Init(void)
{
RCC->APB1ENR&=0XFDFFFFFF;
RCC->APB1ENR|=1<<25;      //使能CAN1时钟
RCC->APB2ENR&=0XFFFFFFF7; //RCC->APB2ENR&=0XFFFFFFFB;
RCC->APB2ENR|=1<<3;       //RCC->APB2ENR|=1<<2;使能GPIOA时钟
RCC->APB2ENR|=0X00000001;//使能AFIO

GPIOB->CRH&=0XFFFFFF00;  //GPIOA->CRH&=0XFFF00FFF;
GPIOB->CRH|=0X000000B8;  //GPIOA->CRH|=0X000B8000;PA11(CAN1_RX)为上拉或下拉输入模式,PA12(CAN1_TX)为复用推挽输出模式
GPIOB->ODR|=3<<8;        //端口位清0或设置

AFIO->MAPR&=0XFFBF9FFF;  //第13,14位是CAN1-remap
AFIO->MAPR|=0x00004000;        //10:CAN1_RX映像到PB8,CAN1_TX映像到PB9;


/*设置CAN模式*/
CAN1->MCR&=0XFFFFFFFD;//请求退出睡眠模式
while((CAN1->MSR&0X00000002)==1);//确认退出睡眠模式
CAN1->MSR&=~(1<<3);//删除唤醒中断挂号标志位
CAN1->MCR|=1<<0;//进入初始化模式
while((CAN1->MSR&0X00000001)==0);//确认进入初始化模式

CAN1->BTR=0X00050011;//正常状态;禁止环回模式;SJW=0;TS2=0;TS1=5;BRP=44;波特率=36M/(1+6+1)/18=250K

CAN1->MCR&=0XFFFFFFFE;//CAN退出初始化模式
while((CAN1->MSR&0X00000001)==1);//确认CAN已经退出初始化模式,进入正常工作模式

/*设置CAN的过滤器组1*/
CAN1->FMR=1;//过滤器组工作在初始化模式
CAN1->FA1R&=0XFFFFFFFD;//过滤器组1被禁止激活
CAN1->FM1R&=0X000003FFD;//过滤器组1的2个32位寄存器工作在标识符屏蔽位模式
CAN1->FS1R|=1<<1;//过滤器组1的过滤器位宽为单个32位
CAN1->sFilterRegister[1].FR1=0X80200000;//数据帧,标准帧,ID:301--6020;401--8020
CAN1->sFilterRegister[1].FR2=0XFFFFFFFF;//1关心,0不关心,32位全部匹配,到来的标识符位必须与滤波器对应的标识符寄存器位相一致。
CAN1->FFA1R&=0XFFFFFFFD;//过滤器组1被关联到FIFO0
CAN1->FA1R|=1<<1;//激活过滤器组1
CAN1->FMR&=0XFFFFFFFE;//过滤器组退出初始化模式,进入正常工作模式
CAN1->IER|=1<<1;//FIFO0消息挂号中断允许(当FIFO0的FMP0[1:0]位被写入非0值时,产生中断)
}

沙发
汤火|  楼主 | 2015-12-21 21:32 | 只看该作者
大神在哪里????

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

22

帖子

1

粉丝