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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版