OpenEdv-开源电子网

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

stm32f103 不进入接收中断

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2019-3-23
在线时间
11 小时
发表于 2021-8-7 22:32:05 | 显示全部楼层 |阅读模式
1金钱
#include "CAN.h"
#include "delay.h"
#include "usart.h"
#include "lcd.h"
u8 CAN_Mode_Init(u8 sjw,u8 bs2,u8 bs1,u16 brp,u8 mode)
{  GPIO_InitTypeDef  GPIO_InitStruct;
         CAN_InitTypeDef    CAN_InitStruct;
         CAN_FilterInitTypeDef CAN_FilterInitStruct;
   NVIC_InitTypeDef   NVIC_InitStruct;
         RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1,ENABLE);//PINA 时钟
         RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,ENABLE);// CAN 时钟
         
        //  GPIO 设置
         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_11;
         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;  //上拉输入
         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
         GPIO_Init(GPIOA,&GPIO_InitStruct);
         
         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12;
         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;// 复用推挽
         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
         GPIO_Init(GPIOA,&GPIO_InitStruct);
         CAN_DeInit(CAN1);
        // CAN 设置
         CAN_InitStruct.CAN_TTCM=DISABLE;  //非时间触发
         CAN_InitStruct.CAN_ABOM=DISABLE;  //软件自动离线管理
         CAN_InitStruct.CAN_AWUM=DISABLE;  //睡眠模式通过软件唤醒
         CAN_InitStruct.CAN_NART=ENABLE;  //发送失败时候,一直发送直至成功
         CAN_InitStruct.CAN_RFLM=DISABLE;  //接收报文未被读出时,下一个报文会覆盖原来的报文
         CAN_InitStruct.CAN_TXFP=DISABLE;  //发送由id决定
         CAN_InitStruct.CAN_Mode=mode;     //CAN 模式为正常模式
       
         CAN_InitStruct.CAN_SJW=sjw;
         CAN_InitStruct.CAN_BS1=bs1;
         CAN_InitStruct.CAN_BS2=bs2;
         CAN_InitStruct.CAN_Prescaler=brp;
         CAN_Init(CAN1, &CAN_InitStruct);
        // CAN 滤波器0
         CAN_FilterInitStruct.CAN_FilterNumber=0;  //滤波器0
         CAN_FilterInitStruct.CAN_FilterMode=CAN_FilterMode_IdMask; //指定iD
         CAN_FilterInitStruct.CAN_FilterScale=CAN_FilterScale_32bit;//32位 扩展id
         CAN_FilterInitStruct.CAN_FilterIdHigh=0x08C1;
         CAN_FilterInitStruct.CAN_FilterIdLow=0xEF21;  //  转速 转矩 档位 id
         CAN_FilterInitStruct.CAN_FilterMaskIdHigh=0xFFFF;
         CAN_FilterInitStruct.CAN_FilterMaskIdLow=0xFFFF;   // id必须一致
         CAN_FilterInitStruct.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0; //关系到fifo0
         CAN_FilterInitStruct.CAN_FilterActivation=ENABLE;  //使能滤波器0
         CAN_FilterInit(&CAN_FilterInitStruct);
         
         //CAN 滤波器1
         CAN_FilterInitStruct.CAN_FilterNumber=1;  //滤波器1
         CAN_FilterInitStruct.CAN_FilterMode=CAN_FilterMode_IdMask; //指定iD
         CAN_FilterInitStruct.CAN_FilterScale=CAN_FilterScale_32bit;//32位 扩展id
         CAN_FilterInitStruct.CAN_FilterIdHigh=0x0CFF;
         CAN_FilterInitStruct.CAN_FilterIdLow=0xC7EF;  //  控制器温度 电机温度  id
         CAN_FilterInitStruct.CAN_FilterMaskIdHigh=0xFFFF;  
         CAN_FilterInitStruct.CAN_FilterMaskIdLow=0xFFFF;   // id必须一致
         CAN_FilterInitStruct.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0; //关系到fifo0
         CAN_FilterInitStruct.CAN_FilterActivation=ENABLE;  //使能滤波器0
         CAN_FilterInit(&CAN_FilterInitStruct);
         
         //CAN 滤波器2
         CAN_FilterInitStruct.CAN_FilterNumber=2;  //滤波器2
         CAN_FilterInitStruct.CAN_FilterMode=CAN_FilterMode_IdMask; //指定iD
         CAN_FilterInitStruct.CAN_FilterScale=CAN_FilterScale_32bit;//32位 扩展id
         CAN_FilterInitStruct.CAN_FilterIdHigh=0x1860;
         CAN_FilterInitStruct.CAN_FilterIdLow=0x40F3;  //  电池总电压 SOC 电流 id
         CAN_FilterInitStruct.CAN_FilterMaskIdHigh=0xFFFF;  
         CAN_FilterInitStruct.CAN_FilterMaskIdLow=0xFFFF;   // id必须一致
         CAN_FilterInitStruct.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0; //关系到fifo0
         CAN_FilterInitStruct.CAN_FilterActivation=ENABLE;  //使能滤波器0
         CAN_FilterInit(&CAN_FilterInitStruct);

         CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);
         NVIC_InitStruct.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
         NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =0;
         NVIC_InitStruct.NVIC_IRQChannelSubPriority =0;
         NVIC_InitStruct.NVIC_IRQChannelCmd =ENABLE;
         NVIC_Init(&NVIC_InitStruct);

   return 0;
         
}         

//中断服务函数

void USB_LP_CAN1_RX0_IRQHandler(void)
         {  CanRxMsg RxMessage;
                  int MOTOR_SPEED;
                  int MOTOR_TORQUE;
                  int BAT_SOC;
                  int BAT_VOL;
                  int BAT_CUR;
                  int MOTOR_TEMP;
                  int MCU_TEMP;          
      CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);
                  if(RxMessage.ExtId==0x08C1EF21)
                        { MOTOR_SPEED=1000;  //转速
                          MOTOR_TORQUE=((u16)(RxMessage.Data[3]<<8)|RxMessage.Data[2])*0.01;                                //转矩
        LCD_ShowxNum(156,220,MOTOR_SPEED,4,16,0X80);
        LCD_ShowxNum(164,260,MOTOR_TORQUE,4,16,0X80);       
            }
                  else if(RxMessage.ExtId==0x0CFFC7EF)
                        {  MOTOR_TEMP=RxMessage.Data[0]-50;  //电机温度
                           MCU_TEMP=RxMessage.Data[1]-50;  //控制器温度
         LCD_ShowxNum(148,300,MOTOR_TEMP,4,16,0X80);
                           LCD_ShowxNum(132,340,MCU_TEMP,3,16,0X80);       
       }
                        else if(RxMessage.ExtId==0x186040F3)
                        {  BAT_VOL=((u16)(RxMessage.Data[0]<<8)|RxMessage.Data[1])*0.1;    //电池电压
                           BAT_CUR=(((u16)(RxMessage.Data[2]<<8)|RxMessage.Data[3])*0.1)-1000;   //电池电流
                           BAT_SOC=RxMessage.Data[4]; //  电池容量
                           LCD_ShowxNum(124,400,BAT_VOL,3,16,0X80);
                           LCD_ShowxNum(124,110,BAT_CUR,3,16,0X80);
         LCD_ShowxNum(124,70,BAT_SOC,3,16,0X80);
                        }
                 CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);
        }


#include "led.h"
#include "lcd.h"
#include "can.h"
#include "usart.h"
#include "delay.h"
#include "sys.h"
#include "adc.h"
#include "key.h"


extern void Adc_init(void);
extern u16 get_imd_adc(u8 ch);
extern u16 get_bms_adc(u8 ch);

int main(void)       
{
        int imd_adc;
        int bms_adc;
        int imd_zs;
        int bms_zs;
        float imd_vol;
        float bms_vol;
        delay_init();
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        uart_init(115200);
        LED_Init();
        LCD_Init();
        Adc_init();
        KEY_Init();
        CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,8,CAN_Mode_Normal);        //设置波特率  250kbps    36000/(7+8+1)*9=250kbps
        LCD_Display_Dir(1);
        POINT_COLOR=RED;
        LCD_ShowString(60,70,400,16,16,"BAT_SOC=000%");
        LCD_ShowString(60,110,400,16,16,"BAT_CUR=0000A");
        LCD_ShowString(60,140,400,16,16,"IMD_VOL=00.000V");             
        LCD_ShowString(60,180,400,16,16,"BMS_VOL=00.000V");
  LCD_ShowString(60,220,400,16,16,"MOTOR_SPEED=0000r/min");
        LCD_ShowString(60,260,400,16,16,"MOTOR_TORQUE=0000%");
        LCD_ShowString(60,300,400,16,16,"MOTOR_TEMP=000℃");
        LCD_ShowString(60,340,400,16,16,"MCU_TEMP=000℃");
        LCD_ShowString(60,380,400,16,16,"BAT_VOL=000V");
                while(1)
        {  
                // imd电压
                imd_adc=get_imd_adc(ADC_Channel_6);
                imd_vol=imd_adc*(3.3/4096)*4;
                imd_zs=imd_vol;
                LCD_ShowxNum(124,140,imd_zs,2,16,0X80);
                imd_vol-=imd_zs;
                imd_vol*=1000;
                LCD_ShowxNum(148,140,imd_vol,3,16,0X80);
                //bms电压
                bms_adc=get_bms_adc(ADC_Channel_7);
                bms_vol=bms_adc*(3.3/4096)*4;
                bms_zs=bms_vol;
                LCD_ShowxNum(124,180,bms_zs,2,16,0X80);
                bms_vol-=bms_zs;
                bms_vol*=1000;
                LCD_ShowxNum(148,180,bms_vol,3,16,0X80);
}



上面can配置的函数和can接收中断服务函数
目前不知道怎么解决 ,有大佬吗

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

使用道具 举报

4

主题

912

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4508
金钱
4508
注册时间
2019-9-4
在线时间
914 小时
发表于 2021-8-9 10:47:19 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 02:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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