你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
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