你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
自己奋战了2周,STM32的CAN还是不明白,希望高人指点
[复制链接]
a605932016
提问时间:2010-8-27 10:42 /
STM32的CAN 自己弄了2星期了,还是一点进展没有。买了一个USB-CAN的模块用来调试,可是还是没有任何进展
我用的是万利的STM32310B-LK1开发板,哪位老师能提供一个可以用的文件啊,自己是在是山穷水尽了
赞
0
收藏
0
评论
6
分享
发布时间:2010-8-27 10:42
举报
请先
登录
后回复
6个回答
废鱼
回答时间:2010-8-27 14:52:02
a0a.1 0b0c
RE:自己奋战了2周,STM32的CAN还是不明白,希望高人指点
1、检查CAN配置
2、buffer设置
3、可以使用例程,看看USB-CAN是否能够接收到数据
4、CAN使用流程:配置CAN总线->发送或者接收buffer->开启中断->判断接收buffer->读取数据。
赞
0
评论
回复
支持
反对
a605932016
回答时间:2010-9-8 14:41:56
a0a.1 0b0c
回复:自己奋战了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上看不到也接受不到数据,请教一下还有什么疏漏吗
赞
0
评论
回复
支持
反对
a605932016
回答时间:2010-9-10 15:28:31
a0a.1 0b0c
问题找到了
原来是我使用早期的库函数,
#define GPIO_Remap1_CAN ((u32)0x001D4000) /* CAN Alternate Function mapping */
早期的函数定义成0x001D2000了
赞
0
评论
回复
支持
反对
wangzhecumt-154
回答时间:2011-1-12 15:10:16
a0a.1 0b0c
回复:自己奋战了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[0]=0xDE;
TxMessage.Data[1]=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
赞
0
评论
回复
支持
反对
wangzhecumt-154
回答时间:2011-1-12 15:11:31
a0a.1 0b0c
RE:自己奋战了2周,STM32的CAN还是不明白,希望高人指点
亟待您的解决,谢谢哦
赞
0
评论
回复
支持
反对
von81
回答时间:2011-1-19 13:22:52
a0a.1 0b0c
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
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
RE:自己奋战了2周,STM32的CAN还是不明白,希望高人指点
2、buffer设置
3、可以使用例程,看看USB-CAN是否能够接收到数据
4、CAN使用流程:配置CAN总线->发送或者接收buffer->开启中断->判断接收buffer->读取数据。
回复:自己奋战了2周,STM32的CAN还是不明白,希望高人指点
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还是不明白,希望高人指点
我的程序如下,你帮我看看,好不好,谢谢
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[0]=0xDE;
TxMessage.Data[1]=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还是不明白,希望高人指点
/* 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