你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 8221|回复: 12

STM32F107 CAN收发问题(求助!)

[复制链接]

1

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-7-20 10:49:42 | 显示全部楼层 |阅读模式
最近在用107的板子在调试CAN,参考了网上的代码,用CAN1通讯,板子上对应的IO为PD0,PD1,已经remap,中断接收,轮循发送,自发自收没有问题,NORMAL模式下就无法收到CAN盒的数据帧,CAN盒也收不到板子发送的数据帧(追踪到发送状态一直是CAN_TxStatus_Pending),用示波器量过,发送和接收时总线上都是有差分信号出来的,检查了代码,发现好像也没啥问题,求指正!


void  can_configuration(void)
{
CAN_InitTypeDef         CAN_InitStructure;
CAN_FilterInitTypeDef  CAN_FilterInitStructure;
GPIO_InitTypeDef  GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

/* GPIOB Periph clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO |   RCC_APB2Periph_GPIOD ,  ENABLE);
/* Enable CAN1 clock  */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1 , ENABLE);

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);


/* Configure CAN1  pin(PB5): RX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);  
/* Configure  CAN1 pin(PB6): TX */
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed =  GPIO_Speed_50MHz;
GPIO_Init(GPIOD,  &GPIO_InitStructure);

/* Enable the USART2 Pins Software  Remapping */
GPIO_PinRemapConfig(GPIO_Remap2_CAN1,  ENABLE);


/* CAN1 register init */
CAN_DeInit(CAN1);
CAN_StructInit(&CAN_InitStructure);

/* CAN cell init */
CAN_InitStructure.CAN_TTCM =  DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART =  DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = ENABLE;  
CAN_InitStructure.CAN_Mode =  CAN_Mode_Normal;
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;      
CAN_InitStructure.CAN_BS1 = CAN_BS1_4tq;      
CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;   
CAN_InitStructure.CAN_Prescaler = 9;     //500kHz

CAN_Init(CAN1,&CAN_InitStructure);               

CAN_FilterInitStructure.CAN_FilterNumber=0;  
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=0;  
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);

CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);
}

发送:
void  CanWriteData(void)
{
CanTxMsg TxMessage;

/* transmit  */
TxMessage.StdId = 0x55;  
TxMessage.RTR = CAN_RTR_DATA;  
TxMessage.IDE = CAN_ID_STD;   
TxMessage.DLC = 8;            
TxMessage.Data[0] = 0x55;   
TxMessage.Data[1] = 0x55;     
TxMessage.Data[2] = 0x55;   
TxMessage.Data[3] = 0x55;     
TxMessage.Data[4] = 0x55;   
TxMessage.Data[5] = 0x55;      
TxMessage.Data[6] = 0x55;   
TxMessage.Data[7] = 0x55;      
CAN_Transmit(CAN1,&TxMessage);  
}

接收:
void  CAN1_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;

CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);  
recv_frame.id =  RxMessage.StdId;
recv_frame.data_buff[0] = RxMessage.Data[0];
recv_frame.data_buff[1] = RxMessage.Data[1];
recv_frame.data_buff[2] = RxMessage.Data[2];
recv_frame.data_buff[3] = RxMessage.Data[3];
recv_frame.data_buff[4] = RxMessage.Data[4];
recv_frame.data_buff[5] = RxMessage.Data[5];
recv_frame.data_buff[6] = RxMessage.Data[6];
recv_frame.data_buff[7] = RxMessage.Data[7];
can_recv_flag =  ENABLE;
}
<
回复

使用道具 举报

1

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-7-20 11:26:01 | 显示全部楼层

RE:STM32F107 CAN收发问题(求助!)

都没人回复啊。。。。
回复 支持 反对

使用道具 举报

4

主题

51

回帖

0

蝴蝶豆

中级会员

最后登录
1970-1-1
发表于 2012-7-20 11:44:30 | 显示全部楼层

RE:STM32F107 CAN收发问题(求助!)

RxMessage.DLC 接收的数据长度是不是需要设置啊!
回复 支持 反对

使用道具 举报

4

主题

51

回帖

0

蝴蝶豆

中级会员

最后登录
1970-1-1
发表于 2012-7-20 11:46:20 | 显示全部楼层

RE:STM32F107 CAN收发问题(求助!)

你调试CAN 是不是需要从设备啊,没有接收设备吗,还有你的波特率好像也没有设置啊
回复 支持 反对

使用道具 举报

1

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-7-20 11:57:26 | 显示全部楼层

RE:STM32F107 CAN收发问题(求助!)

接收数据长度是按标准帧来的,应该不用设置吧,现在是接收中断都没有进。。。
我是107的板子和周立功的USBCAN-II作通讯
波特率在这几句中设置了的
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = CAN_BS1_4tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
CAN_InitStructure.CAN_Prescaler = 9; //500kHz
/* CANbps= Fpclk/((BRP+1)*((Tseg1+1)+(Tseg2+1)+1)  此处计算为  CANbps=36000000/(9*(4+3+1))=500kHz */
回复 支持 反对

使用道具 举报

4

主题

51

回帖

0

蝴蝶豆

中级会员

最后登录
1970-1-1
发表于 2012-7-20 15:10:18 | 显示全部楼层

回复:STM32F107 CAN收发问题(求助!)

回复第 5 楼 于2012-07-20 11:57:26发表:
接收数据长度是按标准帧来的,应该不用设置吧,现在是接收中断都没有进。。。
我是107的板子和周立功的USBCAN-II作通讯
波特率在这几句中设置了的
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = CAN_BS1_4tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
CAN_InitStructure.CAN_Prescaler = 9; //500kHz
/* CANbps= Fpclk/((BRP+1)*((Tseg1+1)+(Tseg2+1)+1) 此处计算为 CANbps=36000000/(9*(4+3+1))=500kHz */ 

你现在就是中断不能进去吗,那就是中断设置的问题,你看看看中断都使能了,中断入口正确吗
 
回复 支持 反对

使用道具 举报

1

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-7-20 15:40:20 | 显示全部楼层

回复:STM32F107 CAN收发问题(求助!)

中断有使能了的,如果中断没使能的话,自闭环下,自发自收时,中断就收不到了
回复 支持 反对

使用道具 举报

1

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-7-20 15:56:05 | 显示全部楼层

RE:STM32F107 CAN收发问题(求助!)

进一步追踪接收的问题,当CAN盒发送出数据帧时,107这边中断没触发,查询CAN_FLAG_LEC,发现返回0x01,位填充错误。。。
请教位填充错误是哪里设置错误?如何解决?
回复 支持 反对

使用道具 举报

1

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-7-20 16:30:55 | 显示全部楼层

RE:STM32F107 CAN收发问题(求助!)

问题补充:现在出现位填充错误,不知道是不是跟我107板子上,CAN_H和CAN_L之间没有接120欧的终端电阻造成的?但我接上这个终端电阻,在传送数据帧时,总线上就没波形了。。。。求解!
回复 支持 反对

使用道具 举报

1

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-7-20 16:39:26 | 显示全部楼层

RE:STM32F107 CAN收发问题(求助!)

问题补充:上面说错了,刚才又测了一下,接上终端电阻,总线及107的CAN控制器管脚都是有波形的,但检测到的还是位填充错误。。。。郁闷哪
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版