电小龙 发表于 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官方例程可以参考,

电小龙 发表于 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中断函数:void CAN1_RX1_IRQHandler(void)
{
HAL_CAN_IRQHandler(&CanHandle);
}



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Ω也能收发报文, 但是会有报文丢失)。



不怕开水烫 发表于 2018-8-17 22:26:07

先用内部回环调,看配置是否正确

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使能

电小龙 发表于 2018-8-24 12:37:00

今天来结贴了,一直调不通的原因是因为我在配置系统时钟时配置成24MHz,但是我一直以为是配置成72MHz的,所以还是用72MHz来计算CAN的波特率的,所以出现了以上的问题。在这感谢大伙们的关注和帮助。
页: 1 [2] 3
查看完整版本: STM32F103RCT6中CAN重映射调不通