OpenEdv-开源电子网

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

UCOSIII+f427 can接收中断无法进入

[复制链接]

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-9-21
在线时间
7 小时
发表于 2019-10-20 23:05:49 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 yanjianxiang 于 2019-10-20 23:09 编辑

f427的板子,在Ucosiii下,can发送中断总是不进入,且数据也没有发出去。裸机就可以正常运行

这是初始化
void CAN1_InitConfig(void)
{
    GPIO_InitTypeDef      GPIO_InitStruct;
    NVIC_InitTypeDef      NVIC_InitStruct;
    CAN_InitTypeDef       CAN_InitStruct;
    CAN_FilterInitTypeDef CAN_FilterInitStruct;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

    GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_CAN1);
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_CAN1);

    GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_0 ;
    GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AF;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;
    GPIO_Init(GPIOD,&GPIO_InitStruct);

    GPIO_InitStruct.GPIO_Pin   =  GPIO_Pin_1;
    GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AF;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;
    GPIO_Init(GPIOD,&GPIO_InitStruct);

    NVIC_InitStruct.NVIC_IRQChannel                    = CAN1_RX0_IRQn;             //注意与中断向量表区别  refer to stm32f4xx.h file
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority  = 2;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority         = 0;
    NVIC_InitStruct.NVIC_IRQChannelCmd                 = ENABLE ;
    NVIC_Init(&NVIC_InitStruct);

    NVIC_InitStruct.NVIC_IRQChannel                    = CAN1_TX_IRQn;              //注意与中断向量表区别  refer to stm32f4xx.h file
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority  = 1;

    NVIC_InitStruct.NVIC_IRQChannelSubPriority         = 1;
    NVIC_InitStruct.NVIC_IRQChannelCmd                 = ENABLE ;
    NVIC_Init(&NVIC_InitStruct);

    CAN_DeInit(CAN1);
    CAN_StructInit(&CAN_InitStruct);

    CAN_InitStruct.CAN_Prescaler = 3;                                               //CAN BaudRate 42/(1+9+4)/3=1Mbps  //分频系数(Fdiv)为3+1
    CAN_InitStruct.CAN_Mode      = CAN_Mode_Normal;                                 //模式设置
    CAN_InitStruct.CAN_SJW       = CAN_SJW_1tq;                                     //重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位 CAN_SJW_1tq~CAN_SJW_4tq
    CAN_InitStruct.CAN_BS1       = CAN_BS1_9tq;                                     //Tbs1范围CAN_BS1_1tq ~CAN_BS1_16tq
    CAN_InitStruct.CAN_BS2       = CAN_BS2_4tq;                                     //Tbs2范围CAN_BS2_1tq ~        CAN_BS2_8tq
    CAN_InitStruct.CAN_TTCM      = DISABLE;                                         //非时间触发通信模式
    CAN_InitStruct.CAN_ABOM      = DISABLE;                                         //软件自动离线管理
    CAN_InitStruct.CAN_AWUM      = DISABLE;                                         //睡眠模式通过软件唤醒(清除CAN->MCR的SLEEP位)
    CAN_InitStruct.CAN_NART      = DISABLE;                                                //禁止报文自动传送
    CAN_InitStruct.CAN_RFLM      = DISABLE;                                         //报文不锁定,新的覆盖旧的
    CAN_InitStruct.CAN_TXFP      = ENABLE;                                                //优先级由报文标识符决定
    CAN_Init(CAN1,&CAN_InitStruct);

    CAN_FilterInitStruct.CAN_FilterIdHigh         = 0x0000;                         //32位ID
    CAN_FilterInitStruct.CAN_FilterIdLow          = 0x0000;                         //32位ID
    CAN_FilterInitStruct.CAN_FilterMaskIdHigh     = 0x0000;
    CAN_FilterInitStruct.CAN_FilterMaskIdLow      = 0x0000;
    CAN_FilterInitStruct.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;               //过滤器0关联到FIFO0;
    CAN_FilterInitStruct.CAN_FilterNumber         = 0;                              //过滤器0,范围0---13
    CAN_FilterInitStruct.CAN_FilterMode           = CAN_FilterMode_IdMask;
    CAN_FilterInitStruct.CAN_FilterScale          = CAN_FilterScale_32bit;
    CAN_FilterInitStruct.CAN_FilterActivation     = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStruct);

    CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);                                          //FIFO0消息挂号中断允许,打开接收中断
    CAN_ITConfig(CAN1,CAN_IT_TME,ENABLE);                                           //打开发送中断
}


这是中断函数
void CAN1_TX_IRQHandler(void)                                                     
{
                OSIntEnter(); //进入中断
          LED_RED_ON;  
    if (CAN_GetITStatus (CAN1,CAN_IT_TME)!=RESET)                                 //发送邮箱空中断
    {

        CAN1_Tx_Message_Flag=1;
        CAN_ClearITPendingBit(CAN1,CAN_IT_TME);
    }
                OSIntExit(); //触发任务切换软中断
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-9-21
在线时间
7 小时
 楼主| 发表于 2019-10-20 23:06:48 | 显示全部楼层
本帖最后由 yanjianxiang 于 2019-10-20 23:10 编辑

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-5 09:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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