打印
[AT32F413]

AT32F413RCT7替代STM32F105R8T6

[复制链接]
4430|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
北辰极界|  楼主 | 2021-6-5 09:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AT32F413RCT7替代STM32F105R8T6   主要使用双CAN功能  目前直接将代码烧录进去的情况下  CAN1是正常工作的  CAN2是无法工作的  能否指点一下如何解决呀  是不是有什么区别

使用特权

评论回复
沙发
hoop| | 2021-6-5 18:51 | 只看该作者
目前烧录的是原始105的程序吗?
105与413的CAN是有差异的,主要表现在105的两个CAN有主从关系共享28个过滤器,413是相互独立的各CAN配备14个过滤器。因此对应的驱动会有小部分差异。你可以去对比下,如果无法解决,可以提供精简的源码,我帮你看看

使用特权

评论回复
板凳
北辰极界|  楼主 | 2021-6-7 08:58 | 只看该作者
hoop 发表于 2021-6-5 18:51
目前烧录的是原始105的程序吗?
105与413的CAN是有差异的,主要表现在105的两个CAN有主从关系共享28个过滤 ...

好的  谢谢  我先试试看

使用特权

评论回复
地板
guijial511| | 2021-6-7 21:22 | 只看该作者
代码不是完全兼容的吧

使用特权

评论回复
5
北辰极界|  楼主 | 2021-6-8 14:17 | 只看该作者
guijial511 发表于 2021-6-7 21:22
代码不是完全兼容的吧

应该是不完全兼容 在找解决办法

使用特权

评论回复
6
便携手到老| | 2021-6-8 16:58 | 只看该作者
代码不能完全兼容的。

使用特权

评论回复
7
asmine| | 2021-6-10 08:53 | 只看该作者
先检查时钟和初始化配置

使用特权

评论回复
8
北辰极界|  楼主 | 2021-7-14 16:55 | 只看该作者
hoop 发表于 2021-6-5 18:51
目前烧录的是原始105的程序吗?
105与413的CAN是有差异的,主要表现在105的两个CAN有主从关系共享28个过滤 ...

void CAN1_Config(uint8_t sjw,uint8_t bs1,uint8_t bs2,uint16_t pres)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    CAN_InitTypeDef        CAN_InitStructure;
    CAN_FilterInitTypeDef  CAN_FilterInitStructure;
          NVIC_InitTypeDef NVIC_InitStructure;

    /* 打开GPIO时钟、AFIO时钟,CAN时钟 */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);


        /* CAN1 RX PB8 */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        /* CAN1 TX PB9 */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

       
    /* CAN1 Enabling interrupt */                                                                          
    NVIC_InitStructure.NVIC_IRQChannel=CAN1_RX0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);                                                                       
                                                                 
    /* CAN  BaudRate = RCC_APB1PeriphClock/(CAN_SJW+CAN_BS1+CAN_BS2)/CAN_Prescaler */
          CAN_DeInit(CAN1);
    CAN_StructInit(&CAN_InitStructure);   

    CAN_InitStructure.CAN_TTCM=DISABLE;
    CAN_InitStructure.CAN_ABOM=DISABLE;
    CAN_InitStructure.CAN_AWUM=DISABLE;
    CAN_InitStructure.CAN_NART=DISABLE;
    CAN_InitStructure.CAN_RFLM=DISABLE;
    CAN_InitStructure.CAN_TXFP=DISABLE;
    CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;   
    CAN_InitStructure.CAN_SJW=sjw;
    CAN_InitStructure.CAN_BS1=bs1;  
    CAN_InitStructure.CAN_BS2=bs2;       
    CAN_InitStructure.CAN_Prescaler=pres;
   

    CAN_Init(CAN1,&CAN_InitStructure);        // CAN1                                                                                       

    CAN_FilterInitStructure.CAN_FilterNumber=0;         
    CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;         // 标识符屏蔽位模式
    CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;   // 32位过滤器
    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;         // FIFO0指向过滤器
    CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);

    CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);  // CAN1

}

/*****************************************
  CAN2 Config
  FIFO_1          
  返回:
*****************************************/
void CAN2_Config(uint8_t sjw,uint8_t bs1,uint8_t bs2,uint16_t pres)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    CAN_InitTypeDef        CAN_InitStructure;
    CAN_FilterInitTypeDef  CAN_FilterInitStructure;
          NVIC_InitTypeDef NVIC_InitStructure;

    /* 打开GPIO时钟、AFIO时钟,CAN时钟 */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);

       
        /* CAN2 RX PB5 */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        /* CAN2 TX PB6 */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);               
       
  GPIO_PinRemapConfig(GPIO_Remap_CAN2,ENABLE);
       
        /* CAN2 Enabling interrupt */                                                                           
    NVIC_InitStructure.NVIC_IRQChannel=CAN2_RX1_IRQn;        // FIFO_1
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);                                                                         

    /* CAN  BaudRate = RCC_APB1PeriphClock/(CAN_SJW+CAN_BS1+CAN_BS2)/CAN_Prescaler */
          CAN_DeInit(CAN2);
    CAN_StructInit(&CAN_InitStructure);   

    CAN_InitStructure.CAN_TTCM=DISABLE;
    CAN_InitStructure.CAN_ABOM=DISABLE;
    CAN_InitStructure.CAN_AWUM=DISABLE;
    CAN_InitStructure.CAN_NART=DISABLE;
    CAN_InitStructure.CAN_RFLM=DISABLE;
    CAN_InitStructure.CAN_TXFP=DISABLE;
    CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;   
    CAN_InitStructure.CAN_SJW=sjw;
    CAN_InitStructure.CAN_BS1=bs1;  
    CAN_InitStructure.CAN_BS2=bs2;       
    CAN_InitStructure.CAN_Prescaler=pres;

    CAN_Init(CAN2,&CAN_InitStructure);   // CAN2                                                                                                       

    CAN_FilterInitStructure.CAN_FilterNumber=14;        //
    CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;         // 标识符屏蔽位模式
    CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;   // 32位过滤器
    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_FIFO1;         // FIFO1指向过滤器
    CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);

        CAN_ITConfig(CAN2,CAN_IT_FMP1,ENABLE);  // CAN2
}

使用特权

评论回复
9
北辰极界|  楼主 | 2021-7-14 16:56 | 只看该作者
hoop 发表于 2021-6-5 18:51
目前烧录的是原始105的程序吗?
105与413的CAN是有差异的,主要表现在105的两个CAN有主从关系共享28个过滤 ...

大神帮忙看看应该如何修改  不知道如何操作

使用特权

评论回复
10
hoop| | 2021-7-16 19:59 | 只看该作者
你现在是有什么具体问题呢?
代码里面暂时就只看到CAN_FilterInitStructure.CAN_FilterNumber=14; 这一句的14需要改成0或任意一个小于14的值

使用特权

评论回复
11
北辰极界|  楼主 | 2021-7-19 17:57 | 只看该作者
hoop 发表于 2021-7-16 19:59
你现在是有什么具体问题呢?
代码里面暂时就只看到CAN_FilterInitStructure.CAN_FilterNumber=14; 这一句的 ...

现在的问题是这样配置的情况下CAN2不工作 只有CAN1能正常发送接收   将滤波器的14改为1也是一样的

使用特权

评论回复
12
林堪堪| | 2021-7-19 18:18 | 只看该作者
之前有用户也遇到这个问题,有以下几种原因。你可以看看你这边有没有这些原因:
1、库函数关于CAN2时钟使能的宏定义有误(改为 #define RCC_APB1Periph_CAN2              ((uint32_t)0x80000000)),
同时断言判断需要更改(改为 #define IS_RCC_APB1_PERIPH(PERIPH) ((((PERIPH) & 0x41003600) == 0x00) && ((PERIPH) != 0x00)));
2、103的库配置filter是默认选择了CAN1,库函数需要更改;
3、413仅支持filter number 0~13,客户选择了14.

使用特权

评论回复
13
林堪堪| | 2021-7-19 18:27 | 只看该作者
可以参考下附件的配置

Sxx32F103_For_AT32F4xx_V4.0.7_ok.rar

2.5 MB

使用特权

评论回复
14
北辰极界|  楼主 | 2021-7-19 20:11 | 只看该作者
林堪堪 发表于 2021-7-19 18:18
之前有用户也遇到这个问题,有以下几种原因。你可以看看你这边有没有这些原因:
1、库函数关于CAN2时钟使能 ...

我先尝试修改一下试下  到时候有问题发代码出来

使用特权

评论回复
15
北辰极界|  楼主 | 2021-7-20 09:19 | 只看该作者
林堪堪 发表于 2021-7-19 18:27
可以参考下附件的配置

我将初始化配置改的和您那边一模一样 结果还是CAN2不能正常使用 CAN1是正常的    我是在105的双CAN代码上改的

STM32_CAN500K_AT32F413RCT7.zip

2.35 MB

使用特权

评论回复
16
北辰极界|  楼主 | 2021-7-20 09:37 | 只看该作者
林堪堪 发表于 2021-7-19 18:27
可以参考下附件的配置

方便的话加个微信  方便请教学习 15001879389

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

141

帖子

0

粉丝