CAN的波特率的计算参照我的另一篇博客 https://blog.csdn.net/chenwenyang0/article/details/83378556
CAN初始化流程:
1.查询是否进入初始化状态,如不是,进入初始化状态,此处需设置CANCTL0,CANCTL1寄存器
2.设置CAN波特率,此处需设置CANBTR0,CANBTR1寄存器,具体计算过程可参照我的另一篇博客 https://blog.csdn.net/chenwenyang0/article/details/83378556
3.关闭相应CAN口滤波器,此处需设置CANIDMR寄存器。
4.使能MSCAN模块,进入一般模式,选择时钟,此处需设置CANCTL0,CANCTL1寄存器
5.设置接收或者发送中断使能
/*************************************************************/
/* 初始化CAN0 */
/*************************************************************/
void INIT_CAN0(void)
{
if(CAN0CTL0_INITRQ==0) // 查询是否进入初始化状态
CAN0CTL0_INITRQ =1; // 进入初始化状态
while (CAN0CTL1_INITAK==0); //等待进入初始化状态
CAN0BTR0_SJW = 0; //设置同步
CAN0BTR0_BRP = 8-1; //设置波特率,32M总线时钟
CAN0BTR1 = 0x1c; //设置时段1和时段2的Tq个数 ,总线频率为250kb/s
// 关闭滤波器
CAN0IDMR0 = 0xFF;
CAN0IDMR1 = 0xFF;
CAN0IDMR2 = 0xFF;
CAN0IDMR3 = 0xFF;
CAN0IDMR4 = 0xFF;
CAN0IDMR5 = 0xFF;
CAN0IDMR6 = 0xFF;
CAN0IDMR7 = 0xFF;
CAN0CTL1 = 0xC0; //使能MSCAN模块,设置为一般运行模式、使用总线时钟源
CAN0CTL0 = 0x00; //返回一般模式运行
while(CAN0CTL1_INITAK); //等待回到一般运行模式
while(CAN0CTL0_SYNCH==0); //等待总线时钟同步
CAN0RIER_RXFIE = 0; //禁止接收中断
}