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

STM32F103RCT6中CAN重映射调不通

[复制链接]
电小龙 提问时间:2018-8-17 09:40 /
阅读主题, 点击返回1楼
收藏 评论23 发布时间:2018-8-17 09:40
23个回答
wenyangzeng 回答时间:2018-8-17 15:14:05
电小龙 发表于 2018-8-17 13:33
HAL_CAN_Receive(&CanHandle, CAN_FIFO0,10);
这个一加进去程序就卡住了

那就证明有进展了。检查中断函数:
在stm32f10xx_it.c里必须有CAN中断函数:
  1. void CAN1_RX1_IRQHandler(void)
  2. {
  3.   HAL_CAN_IRQHandler(&CanHandle);
  4. }

复制代码


评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

STM1024 回答时间:2018-8-17 16:54:07
本帖最后由 stm1024 于 2018-8-17 16:59 编辑

单看重映射的代码是没问题的,但是其他地方就不清楚了。
关于STM32的bxCAN,这方面我倒是有一些坑和你分享一下。

1.程序方面的问题。STM32的CAN模块,配置时,一定要加上过滤器。可能你觉得全接收不需要过滤啊,但是FilterMask和FilterID还是要配置,在初始化CAN的时候绑定,否则你打死都收不到数据

2.检查一下你的波特率设置和采样点。发送端和接收端的波特率肯定要一样,采样点一般在80%左右。

3.检查硬件。有些开发板的设计者水平明显不行,全板电源接进来就直接被AMS1117搞成都用3.3V,stm32是没问题了,但是CAN收发器可不一定。居然还想用这个电压去驱动TJA1050 CAN收发器,也不看看datasheet。当初学的时候没被这个坑死,调代码仿真没任何问题,用CAN盒子就是收发不了数据,最后发现居然是电压问题,一口老血。

4. 还是检查硬件。看看终端电阻的问题,软件调试不管有没有终端电阻都OK,所以根本发现不了这个问题。但是真运行起来,没个几十Ω(标准是总线两端一头跨接一个120Ω的电阻,相当于60Ω,实际上我们测试过,30~40Ω也能收发报文, 但是会有报文丢失)。



评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

梦笑真美 回答时间:2018-8-17 22:26:07
先用内部回环调,看配置是否正确

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

feixiang20 回答时间:2018-8-17 23:07:16
用PA11和PA12 用的是CAN的默认端口,而用PB8和PB9是用CAN的复用功能重映射端口。
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //复用功能时钟使能
//GPIO_PinRemapConfig(GPIO_Remap1_CAN1 , ENABLE); //重映射I/O CAN使能

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

电小龙 回答时间:2018-8-24 12:37:00
今天来结贴了,一直调不通的原因是因为我在配置系统时钟时配置成24MHz,但是我一直以为是配置成72MHz的,所以还是用72MHz来计算CAN的波特率的,所以出现了以上的问题。在这感谢大伙们的关注和帮助。
阳阳NO1 回答时间:2020-5-24 15:24:25
stm1024 发表于 2018-8-17 16:54
单看重映射的代码是没问题的,但是其他地方就不清楚了。
关于STM32的bxCAN,这方面我倒是有一些坑和你分享 ...

TJA1050是5v的,用3.3V当然驱动不起来,我现在用的是SN65HVD230,跟这个题主一样重定位到PB8和PB9上去了,也是用STM32cubx生成的代码,也参照这个配置了过滤器,波特率配成了250k,还是无法收发,我用的是can分析仪,真是搞不懂了。
阳阳NO1 回答时间:2020-5-24 15:25:06
电小龙 发表于 2018-8-24 12:37
今天来结贴了,一直调不通的原因是因为我在配置系统时钟时配置成24MHz,但是我一直以为是配置成72MHz的, ...

我遇到跟你一样的问题了,代码在吗  能给我测试下吗,非常感谢!
电小龙 回答时间:2020-5-28 11:40:43
阳阳NO1 发表于 2020-5-24 15:25
我遇到跟你一样的问题了,代码在吗  能给我测试下吗,非常感谢!

代码不在了,是系统时钟设置的不对,导致我的波特率算的不对
阳阳NO1 回答时间:2020-6-1 10:10:58
电小龙 发表于 2020-5-28 11:40
代码不在了,是系统时钟设置的不对,导致我的波特率算的不对

我的也已经调好了,是电路搞错了,想当然的以为跟RS485芯片一样,CPU的TX接485的RX。
CAN芯片是CPU的TX接CAN的D,CPU的Rx接CAN的R。
12

所属标签

相似问题

官网相关资源

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