OpenEdv-开源电子网

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

STM32F4 can1正常 can2无法发送

[复制链接]

3

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2014-4-17
在线时间
0 小时
发表于 2014-4-17 21:05:06 | 显示全部楼层 |阅读模式
用的是F407的片子,can1可以正常收发,用同样的方法配制can2,却发现无法发送,CAN_ESR寄存器是0X00F80057,也就是说LEC位是0101显性位错,但是我实在搞不清楚为什么会出现这种问题。can1的filternumber我配置的0,can2的filternumber我配置的14,can1都能工作,按说can2应该没什么问题了,难道是我的硬件电路的问题?希望原子哥能给小弟解惑
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
发表于 2017-3-8 14:31:58 | 显示全部楼层
最近我用了429的两个can,刚开始也是遇到了同样的问题。
同样的配置,就下面的区别。  429是这样搞的,407我不太清楚
CAN1_FilerConf.FilterNumber=0;          //过滤器0
CAN2_FilerConf.FilterNumber=14;          //CAN2的过滤器号从14开始
回复 支持 1 反对 0

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2014-4-17
在线时间
0 小时
 楼主| 发表于 2014-4-17 21:55:49 | 显示全部楼层
顶起~!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-17 22:05:36 | 显示全部楼层
还没搞过F4的CAN呢,可能没法帮你解决。
你对比下CAN1,CAN2配置后寄存器的值吧。或许可以找出区别。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

29

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
968
金钱
968
注册时间
2014-10-9
在线时间
95 小时
发表于 2014-11-26 08:59:56 | 显示全部楼层
楼主,能不能给我看一下can1的配置,我can1都没弄成功
淘宝小店,没事可以点一下增加点流量http://shop69767205.taobao.com/
回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-3-20
在线时间
0 小时
发表于 2015-5-18 18:49:58 | 显示全部楼层
楼主有没有写成功呢?能分享点资料吗?
回复 支持 反对

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
发表于 2015-12-1 16:59:07 | 显示全部楼层
楼主成功了吗?我听说407只用CAN2的时候也要配置CAN1才行
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2017-3-7
在线时间
0 小时
发表于 2017-3-7 21:37:57 | 显示全部楼层
我也是
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2017-3-7
在线时间
0 小时
发表于 2017-3-7 21:38:14 | 显示全部楼层
原子哥呢求救
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2016-12-17
在线时间
12 小时
发表于 2017-3-14 17:42:39 | 显示全部楼层
@hi我歌月徘徊 我也在用429的can,但是问题是:设置回环模式和正常模式工作状态正好相反,且正常模式下不能接收。请指教
回复 支持 反对

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
发表于 2017-3-18 16:26:51 | 显示全部楼层
qfggg 发表于 2017-3-14 17:42
@hi我歌月徘徊 我也在用429的can,但是问题是:设置回环模式和正常模式工作状态正好相反,且正常模式下不能 ...

回环模式如果都不行的话 肯定就是配置的问题了吧
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2016-12-17
在线时间
12 小时
发表于 2017-3-23 15:03:16 | 显示全部楼层
hi我歌月徘徊 发表于 2017-3-18 16:26
回环模式如果都不行的话 肯定就是配置的问题了吧

回环模式很正常,正常模式只能发不能收.
回复 支持 反对

使用道具 举报

10

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
306
金钱
306
注册时间
2016-3-25
在线时间
37 小时
发表于 2017-4-22 22:22:47 | 显示全部楼层
qfggg 发表于 2017-3-23 15:03
回环模式很正常,正常模式只能发不能收.

同样的问题,求救
回复 支持 反对

使用道具 举报

3

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-3-8
在线时间
36 小时
发表于 2017-4-23 12:21:23 | 显示全部楼层
#include <stm32f4xx_usart.h>
#include <stm32f4xx_gpio.h>
#include <stm32f4xx_rcc.h>
#include <misc.h>
#include <system_stm32f4xx.h>
#include <stm32f4xx_spi.h>

void USART1_Init(u32 bound){
   //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟

        //串口1对应引脚复用映射
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1
       
        //USART1端口配置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //速度50MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
        GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10

   //USART1 初始化设置
        USART_InitStructure.USART_BaudRate = bound;//波特率设置
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
        USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收发模式
  USART_Init(USART1, &USART_InitStructure); //初始化串口1
       
  USART_Cmd(USART1, ENABLE);  //使能串口1
       
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断

        //Usart1 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中断通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器、

}

void CAN1_Init()
{
                GPIO_InitTypeDef GPIO_InitStructure;
          CAN_InitTypeDef        CAN_InitStructure;
          CAN_FilterInitTypeDef  CAN_FilterInitStructure;
           NVIC_InitTypeDef  NVIC_InitStructure;

    //使能相关时钟
          RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能PORTA时钟                                                                                                                    

          RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟       
       
    //初始化GPIO
          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;//100MHz
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA11,PA12
       
          //引脚复用映射配置
          GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_CAN1); //GPIOA11复用为CAN1
          GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_CAN1); //GPIOA12复用为CAN1
          
          //CAN单元设置
           CAN_InitStructure.CAN_TTCM=DISABLE;        //非时间触发通信模式
          CAN_InitStructure.CAN_ABOM=DISABLE;        //软件自动离线管理
          CAN_InitStructure.CAN_AWUM=DISABLE;//睡眠模式通过软件唤醒(清除CAN->MCR的SLEEP位)
          CAN_InitStructure.CAN_NART=ENABLE;        //禁止报文自动传送
          CAN_InitStructure.CAN_RFLM=DISABLE;        //报文不锁定,新的覆盖旧的  
          CAN_InitStructure.CAN_TXFP=DISABLE;        //优先级由报文标识符决定
          CAN_InitStructure.CAN_Mode= CAN_Mode_Normal;         //模式设置
          CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;        //重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位 CAN_SJW_1tq~CAN_SJW_4tq
          CAN_InitStructure.CAN_BS1=CAN_BS2_6tq; //Tbs1范围CAN_BS1_1tq ~CAN_BS1_16tq
          CAN_InitStructure.CAN_BS2=CAN_BS1_7tq;//Tbs2范围CAN_BS2_1tq ~        CAN_BS2_8tq
          CAN_InitStructure.CAN_Prescaler=6;  //分频系数(Fdiv)为brp+1       
          CAN_Init(CAN1, &CAN_InitStructure);   // 初始化CAN1
   
                //配置过滤器
          CAN_FilterInitStructure.CAN_FilterNumber=0;          //过滤器0
          CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
          CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位
          CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32位ID
          CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
          CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
          CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
           CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//过滤器0关联到FIFO0
          CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器0
          CAN_FilterInit(&CAN_FilterInitStructure);//滤波器初始化
               
          CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息挂号中断允许.                    
  
          NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;     // 主优先级为1
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;            // 次优先级为0
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);

}

void CAN2_Init()
{
                GPIO_InitTypeDef                          GPIO_InitStructure;
          CAN_InitTypeDef        CAN_InitStructure;
          CAN_FilterInitTypeDef  CAN_FilterInitStructure;
           NVIC_InitTypeDef                   NVIC_InitStructure;

    //使能相关时钟
          RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能PORTA时钟                                                                                                                    

          RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);//使能CAN1时钟       
       
    //初始化GPIO
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5| GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化PA11,PA12
       
          //引脚复用映射配置
          GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_CAN2); //GPIOA11复用为CAN1
          GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_CAN2); //GPIOA12复用为CAN1
          
          //CAN单元设置
           CAN_InitStructure.CAN_TTCM=DISABLE;        //非时间触发通信模式
          CAN_InitStructure.CAN_ABOM=DISABLE;        //软件自动离线管理
          CAN_InitStructure.CAN_AWUM=DISABLE;//睡眠模式通过软件唤醒(清除CAN->MCR的SLEEP位)
          CAN_InitStructure.CAN_NART=ENABLE;        //禁止报文自动传送
          CAN_InitStructure.CAN_RFLM=DISABLE;        //报文不锁定,新的覆盖旧的  
          CAN_InitStructure.CAN_TXFP=DISABLE;        //优先级由报文标识符决定
          CAN_InitStructure.CAN_Mode= CAN_Mode_Normal;         //模式设置
          CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;        //重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位 CAN_SJW_1tq~CAN_SJW_4tq
          CAN_InitStructure.CAN_BS1=CAN_BS2_6tq; //Tbs1范围CAN_BS1_1tq ~CAN_BS1_16tq
          CAN_InitStructure.CAN_BS2=CAN_BS1_7tq;//Tbs2范围CAN_BS2_1tq ~        CAN_BS2_8tq
          CAN_InitStructure.CAN_Prescaler=6;  //分频系数(Fdiv)为brp+1       
          CAN_Init(CAN2, &CAN_InitStructure);   // 初始化CAN1
   
                //配置过滤器
          CAN_FilterInitStructure.CAN_FilterNumber=14;          //过滤器0
          CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
          CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位
          CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32位ID
          CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
          CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
          CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
           CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//过滤器0关联到FIFO0
          CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器0
          CAN_FilterInit(&CAN_FilterInitStructure);//滤波器初始化
               
          CAN_ITConfig(CAN2,CAN_IT_FMP0,ENABLE);//FIFO0消息挂号中断允许.                    
  
          NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;     // 主优先级为1
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;            // 次优先级为0
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);

}

//can发送一组数据(固定格式:ID为0X12,标准帧,数据帧)       
//len:数据长度(最大为8)                                     
//msg:数据指针,最大为8个字节.
//返回值:0,成功;
//                 其他,失败;
u8 CAN1_Send_Msg(u8* msg,u8 len)
{       
  u8 mbox;
  u16 i=0;
  CanTxMsg TxMessage;
  TxMessage.StdId=0x12;         // 标准标识符为0
  TxMessage.ExtId=0x12;         // 设置扩展标示符(29位)
  TxMessage.IDE=CAN_Id_Standard;// 使用扩展标识符
  TxMessage.RTR=CAN_RTR_Data;                  // 消息类型为数据帧,一帧8位
  TxMessage.DLC=len;                                                         // 发送两帧信息
  for(i=0;i<=len;i++)
  TxMessage.Data[i]=msg[i];                                 // 第一帧信息         
  mbox= CAN_Transmit(CAN1, &TxMessage);   
  i=0;
  while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;        //等待发送结束
  if(i>=0XFFF)return 1;
  return 0;               
}

u8 CAN2_Send_Msg(u8* msg,u8 len)
{       
  u8 mbox;
  u16 i=0;
  CanTxMsg TxMessage;
  TxMessage.StdId=0x12;         // 标准标识符为0
  TxMessage.ExtId=0x12;         // 设置扩展标示符(29位)
  TxMessage.IDE=CAN_Id_Standard;// 使用扩展标识符
  TxMessage.RTR=CAN_RTR_Data;                  // 消息类型为数据帧,一帧8位
  TxMessage.DLC=len;                                                         // 发送两帧信息
  for(i=0;i<=len;i++)
  TxMessage.Data[i]=msg[i];                                 // 第一帧信息         
  mbox= CAN_Transmit(CAN2, &TxMessage);   
  i=0;
  while((CAN_TransmitStatus(CAN2, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;        //等待发送结束
  if(i>=0XFFF)return 1;
  return 0;               
}

u32 RxMessage_DLC_CAN1=0;
u32 RxMessage_DLC_CAN2=0;

//can口接收数据查询
//buf:数据缓存区;         
//返回值:0,无数据被收到;
//                 其他,接收的数据长度;
u8 CAN1_Receive_Msg(u8 *buf)
{                                     
        u32 i;
        RxMessage_DLC_CAN1=0;
        CanRxMsg RxMessage;
  if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)return 0;                //没有接收到数据,直接退出
  CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);//读取数据       
  for(i=0;i<=RxMessage.DLC;i++)
  buf[i]=RxMessage.Data[i];
        RxMessage_DLC_CAN1 = RxMessage.DLC;
        return RxMessage_DLC_CAN1;       
}

u8 CAN2_Receive_Msg(u8 *buf)
{                                     
        u32 i;
        RxMessage_DLC_CAN2=0;
        CanRxMsg RxMessage;
  if( CAN_MessagePending(CAN2,CAN_FIFO0)==0)return 0;                //没有接收到数据,直接退出
  CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);//读取数据       
  for(i=0;i<=RxMessage.DLC;i++)
  buf[i]=RxMessage.Data[i];
        RxMessage_DLC_CAN2 = RxMessage.DLC;
        return RxMessage_DLC_CAN2;       
}

int main(void)
{        
        u8 canbuf[8];
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        USART1_Init(115200);        //初始化串口波特率为115200
        CAN1_Init();
        CAN2_Init();
        //CAN1_Mode_Init(CAN_SJW_1tq,CAN_BS2_6tq,CAN_BS1_7tq,6,CAN_Mode_LoopBack);//CAN初始化环回模式,波特率500Kbps   
       
                                                                          
        while(1)
        {

        }
       
}

void USART1_IRQHandler(void)                        //串口1中断服务程序
{
        u8 Res[1];

        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
        {
                Res[0] =USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
                CAN1_Send_Msg(Res,1);
                //CAN2_Send_Msg(Res,1);
                //CAN SendData
  }
}


//中断服务函数                            
u8 CAN1_RX0_IRQHandler(void)
{
  //CanRxMsg RxMessage;
        int i=0;
        if(CAN_GetITStatus(CAN1,CAN_IT_FMP0)==SET)
        {
                USART_SendData(USART1, 0x31);
                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                u32 i;
                RxMessage_DLC_CAN2=0;
                CanRxMsg RxMessage;
                if( CAN_MessagePending(CAN1,CAN_FIFO0)==0) return 0;                //没有接收到数据,直接退出
                CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);//读取数据       
                for(i=0;i<=RxMessage.DLC;i++)
                //buf[i]=RxMessage.Data[i];
                RxMessage_DLC_CAN2 = RxMessage.DLC;
                return RxMessage_DLC_CAN2;       
                /*for(i=0;i<=RxMessage_DLC_CAN2;i++)
                {
                        USART_SendData(USART1, RxMessage.Data[i]);
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                }*/
                        CAN_ClearITPendingBit(CAN1,CAN_IT_FF0);
                //printf("rxbuf[%d]:%d\r\n",i,RxMecssage.Data[i]);
        }
}

u8 CAN2_RX0_IRQHandler(void)
{
  //CanRxMsg RxMessage;
        int i=0;
        if(CAN_GetITStatus(CAN2,CAN_IT_FMP0)==SET)
        {
                u32 i;
                RxMessage_DLC_CAN2=0;
                CanRxMsg RxMessage;
                if( CAN_MessagePending(CAN2,CAN_FIFO0)==0) return 0;                //没有接收到数据,直接退出
                CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);//读取数据       
                for(i=0;i<=RxMessage.DLC;i++)
                //canbuf[i]=RxMessage.Data[i];
               
                RxMessage_DLC_CAN2 = RxMessage.DLC;
                //return RxMessage_DLC_CAN2;       
                for(i=0;i<RxMessage_DLC_CAN2;i++)
                {
                        USART_SendData(USART1, RxMessage.Data[i]);
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                }
                        CAN_ClearITPendingBit(CAN1,CAN_IT_FF0);
                //printf("rxbuf[%d]:%d\r\n",i,RxMecssage.Data[i]);
        }
}
回复 支持 反对

使用道具 举报

3

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-3-8
在线时间
36 小时
发表于 2017-4-23 12:56:57 | 显示全部楼层
我的代码已测试过,确实能通。 实际功能大概就是由串口助手发一信息出去,探索者的USART接收到,接着USART在接收中断内透过CAN1或者CAN2发出去,此时互相呼应的CAN1或者CAN2接收器就会接收到信号,并且藉由CAN1或者CAN2的中断函数将信息透过USART1发出去
回复 支持 反对

使用道具 举报

31

主题

130

帖子

0

精华

高级会员

Rank: 4

积分
790
金钱
790
注册时间
2015-6-28
在线时间
139 小时
发表于 2017-6-14 10:31:07 | 显示全部楼层
Morgan 发表于 2017-4-23 12:56
我的代码已测试过,确实能通。 实际功能大概就是由串口助手发一信息出去,探索者的USART接收到,接着USART ...

为什么初始化函数没有参数也不是void,为什么中断函数可以加了u8返回,请教下
回复 支持 反对

使用道具 举报

1

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
531
金钱
531
注册时间
2015-10-16
在线时间
65 小时
发表于 2017-11-22 22:48:18 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-13 04:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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