CAN 程序请教

2019-03-23 16:01发布

CAN 程序请教
CAN 使用 不丢包 多机通信 程序应该怎样设计,收发确认机制应该怎么做 需要运行什么协议吗?
新手 STM32刚学不久 请大神指点下 谢谢!!
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
huadao
2019-03-24 00:12
huo_hu 发表于 2017-12-14 11:07
这个只能自己设计了呀

可否指点下 CAN 发送中断程序
/*---------------------------------------------------------------------------------------
//CAN1 发送数据//
----------------------------------------------------------------------------------------*/
int CAN_tx_msg(CanTxMsg TxMessage)
{
    uint8_t TransmitMailbox = 0;
    //OS_CPU_SR  cpu_sr = 0;
    TransmitMailbox = CAN_Transmit(CAN1, TxMessage);
    if(CAN_NO_MB == TransmitMailbox)//没有提供空邮箱//
    {
        printf("tx can fail ");//打印邮箱错误//
        return 0;
    }
    else
    {
        //OS_ENTER_CRITICAL();         
        CAN_msg_num[TransmitMailbox] = 1;//被使用的邮箱标记//
       // OS_EXIT_CRITICAL();
    }
   
    CAN_ITConfig(CAN1, CAN_IT_TME, ENABLE);//被使用的邮箱标记//
    return 1;
}
/*---------------------------------------------------------------------------------------
//CAN1  发送中断//
----------------------------------------------------------------------------------------*/
void USB_HP_CAN1_TX_IRQHandler(void)
{
    if(CAN_msg_num[0])//发送邮箱0空中断//
    {
        if(SET == CAN_GetITStatus(CAN1,CAN_IT_RQCP0))//发送邮箱空中断//
        {
            CAN_ClearITPendingBit(CAN1,CAN_IT_RQCP0);//清除CANx的中断位//
            CAN_ITConfig(CAN1, CAN_IT_TME, DISABLE);//发送邮箱空中断//
            CAN_msg_num[0] = 0;
        }
    }
   
    if(CAN_msg_num[1])//发送邮箱1空中断//
    {
        if(SET == CAN_GetITStatus(CAN1,CAN_IT_RQCP1))//发送邮箱空中断//
        {
            CAN_ClearITPendingBit(CAN1,CAN_IT_RQCP1);//清除CANx的中断位//
            CAN_ITConfig(CAN1, CAN_IT_TME, DISABLE);//启用或禁用指定的CANx中断//
            CAN_msg_num[1] = 0;
        }
    }
   
    if(CAN_msg_num[2])//发送邮箱2空中断//
    {
        if(SET == CAN_GetITStatus(CAN1,CAN_IT_RQCP2))//发送邮箱空中断//
        {
            CAN_ClearITPendingBit(CAN1,CAN_IT_RQCP2);//清除CANx的中断位//
            CAN_ITConfig(CAN1, CAN_IT_TME, DISABLE);//启用或禁用指定的CANx中断//
            CAN_msg_num[2] = 0;
        }
    }
   
}
这段程序在网上看到的 怎么感觉3个邮箱和一个用法没区别,每个邮箱空的中断区分不开
#define CAN_IT_RQCP0   CAN_IT_TME
#define CAN_IT_RQCP1   CAN_IT_TME
#define CAN_IT_RQCP2   CAN_IT_TME
都是CAN_IT_TME

一周热门 更多>