調(diào)試STM32F107的CAN模塊
花了兩天的時(shí)間,調(diào)試了開發(fā)板的CAN模塊,先是調(diào)試CAN1、CAN2,最后讓CAN1和CAN2通信。期間遇到了很多問題,還有很多問題沒解決。
1、使用擴(kuò)展模式,但是TxMessage.StdId接收到始終是00,其他的TxMessage.IDE TxMessage.DLC都是對的,包括數(shù)據(jù)。不知道為什么,網(wǎng)上查了一下,有位仁兄和我遇到的問題一樣,如果有人看到此貼,還望不吝賜教。所以我最后都是只用標(biāo)準(zhǔn)格式。
2、CAN2的CAN_FilterNumber必須設(shè)置為14,CAN_FilterFIFOAssignment=CAN_FIFO0;也不知為什么,呵呵,還要好好看書啊。
3、對于中斷,代碼如下:
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel=CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
居然也可以,NVIC_InitStructure.NVIC_IRQChannel怎么可以同時(shí)賦予不同的值呢,還沒搞懂。
不管怎么說,二者可以通信,拔掉線子收不到數(shù)據(jù),線子一插上,就可以收到數(shù)據(jù),通信果然很穩(wěn)定啊。