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

STM32F103RCT6中CAN重映射调不通

[复制链接]
电小龙 提问时间:2018-8-17 09:40 /
阅读主题, 点击返回1楼
收藏 评论23 发布时间:2018-8-17 09:40
23个回答
电小龙 回答时间:2018-8-17 12:35:57
butterflyspring 发表于 2018-8-17 11:58
你初始化过了吗?你有接终端吗?

初始化了,终端电阻也接了
电小龙 回答时间:2018-8-17 12:36:18
电子星辰 发表于 2018-8-17 11:06
不一定是重映射的问题,也有可能是和其它外设功能哪里冲突了

有可能,现在找不到是哪里出了问题
wenyangzeng 回答时间:2018-8-17 13:04:17
电小龙 发表于 2018-8-17 10:49
CAN_Handler.Instance = CAN1;
        CAN_Handler.Init.Prescaler = 8;
        CAN_Handler.Init.Mode = CAN_MODE_NORM ...

发送、接收需要软件干预:
HAL_CAN_Receive(&CanHandle, CAN_FIFO0,10);


ST官方例程可以参考,
CAN_LoopBack.rar (61.14 KB, 下载次数: 22)

评分

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

查看全部评分

电小龙 回答时间:2018-8-17 13:33:47
wenyangzeng 发表于 2018-8-17 13:04
发送、接收需要软件干预:
HAL_CAN_Receive(&CanHandle, CAN_FIFO0,10);

HAL_CAN_Receive(&CanHandle, CAN_FIFO0,10);
这个一加进去程序就卡住了
回答时间:2018-8-17 15:07:51
楼主,是否有CAN接收工具?
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的波特率的,所以出现了以上的问题。在这感谢大伙们的关注和帮助。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版