自己奋战了2周,STM32的CAN还是不明白,希望高人指点
STM32的CAN 自己弄了2星期了,还是一点进展没有。买了一个USB-CAN的模块用来调试,可是还是没有任何进展我用的是万利的STM32310B-LK1开发板,哪位老师能提供一个可以用的文件啊,自己是在是山穷水尽了
RE:自己奋战了2周,STM32的CAN还是不明白,希望高人指点
1、检查CAN配置2、buffer设置
3、可以使用例程,看看USB-CAN是否能够接收到数据
4、CAN使用流程:配置CAN总线->发送或者接收buffer->开启中断->判断接收buffer->读取数据。
回复:自己奋战了2周,STM32的CAN还是不明白,希望高人指点
回复第 2 楼 安 于2010-08-27 06:52:02发表:1、检查CAN配置
2、buffer设置
3、可以使用例程,看看USB-CAN是否能够接收到数据
4、CAN使用流程:配置CAN总线->发送或者接收buffer->开启中断->判断接收buffer->读取数据。
谢谢,终于在实验板上调通了,用USB-CAN和万利的实验板,可是又遇到新的问题了
万利的实验板CAN用的是PD0,PD1,我自己做的板子上用的是PB8 PB9
PD0 PD1是可以通信的,但是我想映射到PB8 PB9,做了如下的更改
1.配置PB8 PB9
2.打开B口的时钟
3打开映射 GPIO_Remap1_CAN
但是在PB8 9上看不到也接受不到数据,请教一下还有什么疏漏吗
问题找到了
原来是我使用早期的库函数,#define GPIO_Remap1_CAN ((u32)0x001D4000) /* CAN Alternate Function mapping */
早期的函数定义成0x001D2000了
回复:自己奋战了2周,STM32的CAN还是不明白,希望高人指点
你好啊,我也是pb8 pb9端口进行can通信,就是发送失败不知道是什么问题;我的程序如下,你帮我看看,好不好,谢谢
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
CanTxMsg TxMessage;
u8 TransmitMailbox;
u8 i=0;
u8 test;
GPIO_PinRemapConfig(GPIO_Remap1_CAN, ENABLE);// remap
/* Configure CAN pin: RX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure CAN pin: TX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* CAN register init */
//CAN_DeInit();
CAN_StructInit(&CAN_InitStructure);
/* CAN cell init */
CAN_InitStructure.CAN_TTCM=DISABLE; //禁止时间触发通信;
CAN_InitStructure.CAN_ABOM=DISABLE; //离线退出是在中断置位清零后退出;
CAN_InitStructure.CAN_AWUM=DISABLE; //自动唤醒模式:清零SLEEP;
CAN_InitStructure.CAN_NART=ENABLE; //自动重新传送报文,直到发送成功;
CAN_InitStructure.CAN_RFLM=DISABLE; //FIFO没有锁定,新报文覆盖旧报文;
CAN_InitStructure.CAN_TXFP=DISABLE; //发送报文优先级确定;标识符;
CAN_InitStructure.CAN_Mode=CAN_Mode_Normal; //can 模式选择;
//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=7; //250k;
CAN_Init(&CAN_InitStructure);
/*
波特率=1/(3+bs1+bs2)tq;
tq=tpclk*(prescaler+1)
*/
/* CAN filter init */
CAN_FilterInitStructure.CAN_FilterNumber=1;
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=CAN_FIFO0;
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
/* CAN FIFO0 message pending interrupt enable */
//CAN_ITConfig(CAN_IT_FMP0, ENABLE);
/* transmit 1 message */
//while(1)
{
TxMessage.StdId=0x11;
TxMessage.ExtId=0x1234;
TxMessage.IDE=CAN_ID_STD;
TxMessage.RTR=CAN_RTR_DATA;
TxMessage.DLC=2;
TxMessage.Data=0xDE;
TxMessage.Data=0xCA;
TransmitMailbox=CAN_Transmit(&TxMessage);
i = 0;
test=CAN_TransmitStatus(TransmitMailbox) ;
while((test!= CANTXOK) && (i != 0xFF))
{
i++;
test=CAN_TransmitStatus(TransmitMailbox) ; }
}
if(test== CANTXOK)
{
UART1_Putchar('\n');
UART1_Putchar('o');
UART1_Putchar('k');
UART1_Putchar('\n');
}
else if(test==0)
{
UART1_Putchar('F');
}
else if(test==2)
{
UART1_Putchar('p');
}
}
发送后是是失败的,输出 F
RE:自己奋战了2周,STM32的CAN还是不明白,希望高人指点
亟待您的解决,谢谢哦RE:自己奋战了2周,STM32的CAN还是不明白,希望高人指点
GPIO_PinRemapConfig(GPIO_Remap1_CAN, ENABLE);// remap/* Configure CAN pin: RX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure CAN pin: TX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
改成
/* Configure CAN pin: RX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure CAN pin: TX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_Remap1_CAN, ENABLE);// remap
页:
[1]