OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6436|回复: 7

关于STM32F407ZGT6最小系统板子使用CAN通信

[复制链接]

16

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2020-11-4
在线时间
121 小时
发表于 2021-4-11 13:44:45 | 显示全部楼层 |阅读模式
2金钱
我用的是STM32F407的最小系统板,用的是PA11和PA12 CAN1_RX和CAN1_TX,外接了某宝的TJA1050CAN模块CAN1初始化如下:
uint8_t CAN1_mode_init(uint8_t tsjw, uint8_t tbs2, uint8_t tbs1, uint16_t brp, uint8_t mode)
{

    GPIO_InitTypeDef GPIO_InitStructure;
    CAN_InitTypeDef CAN_InitStructure;
    CAN_FilterInitTypeDef CAN_FilterInitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

    RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, ENABLE);
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, DISABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_CAN1);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_CAN1);

    CAN_InitStructure.CAN_TTCM = DISABLE;
    CAN_InitStructure.CAN_ABOM = ENABLE;
    CAN_InitStructure.CAN_AWUM = DISABLE;
    CAN_InitStructure.CAN_NART = DISABLE;
    CAN_InitStructure.CAN_RFLM = DISABLE;
    CAN_InitStructure.CAN_TXFP = DISABLE;
    CAN_InitStructure.CAN_Mode = mode;
    CAN_InitStructure.CAN_SJW = tsjw;
    CAN_InitStructure.CAN_BS1 = tbs1;
    CAN_InitStructure.CAN_BS2 = tbs2;
    CAN_InitStructure.CAN_Prescaler = brp;
    CAN_Init(CAN1, &CAN_InitStructure);

    CAN_FilterInitStructure.CAN_FilterNumber = 3;
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    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_Filter_FIFO0;
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);

    CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);//FIFO0消息挂号中断允许,每接收一次进一次中断            

    NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    return 0;

}
CAN发送如下:

void CAN_CMD_CHASSIS(int16_t motor1, int16_t motor2, int16_t motor3, int16_t motor4)
{
    CanTxMsg TxMessage;
    TxMessage.StdId = 0x200;
    TxMessage.IDE = CAN_ID_STD;
    TxMessage.RTR = CAN_RTR_DATA;
    TxMessage.DLC = 0x08;
    TxMessage.Data[0] = motor1 >> 8;
    TxMessage.Data[1] = motor1;
    TxMessage.Data[2] = motor2 >> 8;
    TxMessage.Data[3] = motor2;
    TxMessage.Data[4] = motor3 >> 8;
    TxMessage.Data[5] = motor3;
    TxMessage.Data[6] = motor4 >> 8;
    TxMessage.Data[7] = motor4;

   CAN_Transmit(CHASSIS_CAN, &TxMessage);
}


通过DEBUG看到的CAN_Transmit(CHASSIS_CAN, &TxMessage)返回的是 transmit_mailbox = CAN_TxStatus_NoMailBox;

请问应该如何解决,TJA硬件电路是正常能用的已在阿波罗板子测试过。一到407最小系统板子上就出现了这个错误






最佳答案

查看完整内容[请看2#楼]

是邮箱问题的话建议如下处理,避免用delay: TransmitMailbox=CAN_Transmit(CAN1,&CanTxMessage); i = 0; while((CAN_TransmitStatus(CAN1,TransmitMailbox) != CANTXOK) && (i < 0xFF)) { i++; }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2019-11-15
在线时间
7 小时
发表于 2021-4-11 13:44:46 | 显示全部楼层
是邮箱问题的话建议如下处理,避免用delay:
TransmitMailbox=CAN_Transmit(CAN1,&CanTxMessage);
      i = 0;
      while((CAN_TransmitStatus(CAN1,TransmitMailbox) != CANTXOK) && (i < 0xFF))
      {
        i++;
      }
回复

使用道具 举报

16

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2020-11-4
在线时间
121 小时
 楼主| 发表于 2021-4-11 13:56:05 | 显示全部楼层
自己顶自己,新人求助
回复

使用道具 举报

16

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2020-11-4
在线时间
121 小时
 楼主| 发表于 2021-4-11 17:46:27 | 显示全部楼层
有人嘛球球
回复

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2019-11-15
在线时间
7 小时
发表于 2021-4-12 15:44:03 | 显示全部楼层
用回环模式看一下,OK的话是硬件问题
回复

使用道具 举报

16

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2020-11-4
在线时间
121 小时
 楼主| 发表于 2021-4-14 14:43:08 | 显示全部楼层
shao0129 发表于 2021-4-12 15:44
用回环模式看一下,OK的话是硬件问题

谢谢老哥的帮忙,看了一下是我没延时的问题,一直发导致没空嫌邮箱
回复

使用道具 举报

16

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2020-11-4
在线时间
121 小时
 楼主| 发表于 2021-4-14 14:43:32 | 显示全部楼层
解决了解决了兄弟们,记得加delayooooo
回复

使用道具 举报

3

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2021-11-12
在线时间
44 小时
发表于 2021-11-24 14:39:29 | 显示全部楼层
在哪里加的delay ?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 14:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表