你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32两点通信有波形,接收不到数据

[复制链接]
zhangakun0 提问时间:2014-3-9 22:18 /
 我用STM32103RE与红牛开发板(STM32103ZE)进行CAN总线2点通信,一块应用例程程序,另一块应用修改程序,各自LoopBack模式,没问题。CAN总线正常模式下,可以检测到HL引脚有周期的波形,但是收不到正确的数据请问是怎么回事。
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         //CAN_RX,上拉输入
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
      
       GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;           //CAN_TX,复用推挽输出
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure); 
144STM32103ZE  
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|                        /*  使能相关CAN引脚时钟         */
                           RCC_APB2Periph_AFIO,ENABLE);   
    GPIO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE);                       /*  重映射CAN引脚               */
 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed =    GPIO_Speed_10MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
CAN配置部分
void CAN_Configuration(void)
{
 CAN_InitTypeDef CAN_InitStructure;
 CAN_FilterInitTypeDef  CAN_FilterInitStructure; 
 CAN_DeInit();
 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;   //     0x0020
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;        // 0x0002
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;//为过滤器分配缓存 此处到//fifo 因为 CAN_FilterInitStructure.CAN_FilterNumber=0;
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
 CAN_InitStructure.CAN_TTCM = DISABLE;
 CAN_InitStructure.CAN_ABOM = DISABLE;
 CAN_InitStructure.CAN_AWUM = DISABLE;
 CAN_InitStructure.CAN_NART = DISABLE;
 CAN_InitStructure.CAN_RFLM = DISABLE;
 CAN_InitStructure.CAN_TXFP = DISABLE;
 CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack ;              //      CAN_Mode_LoopBack,CAN_Mode_Normal
 CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;                    //重新同步跳跃宽度1个时间单位,在每位中可以延长或缩短多少个时间单位的上限
 CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;                    //时间段14个时间单位
 CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;                    // 时间段23个时间单位
 CAN_InitStructure.CAN_Prescaler=4.5;                           //CAN_Prescaler设定了一个时间
 CAN_Init(&CAN_InitStructure);                            //CAN_APS=PCLK1/((1+5+2)*3)=1MBPS
  CAN_ITConfig(CAN_IT_FMP0, ENABLE);
}
CAN接受中断
void UserCAN_NVIC_Config(void)
{
  NVIC_InitTypeDef  NVIC_InitStructure;
 
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
 
  NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN_RX0_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
void USB_LP_CAN_RX0_IRQHandler(void)
{
INT32U i;
    i=CAN_GetITStatus(CAN_IT_FMP0);
 
      if(CAN_GetITStatus(CAN_IT_FMP0)!= RESET)
        {
       INT16U ch;
       CanRxMsg RxMessage;
       CAN_ClearITPendingBit(CAN_IT_FMP0); 
     CAN_Receive(CAN_FIFO0,&RxMessage);                        

<span lang="EN-US" style="font-size:12.0pt">                ch=(RxMessage.Data[1]
收藏 评论2 发布时间:2014-3-9 22:18

举报

2个回答
zhangakun0 回答时间:2014-3-10 14:10:02

RE:STM32两点通信有波形,接收不到数据

求大神指点!!!!
整了两周了,小女子都快崩溃了。。。。
fengye5340 回答时间:2014-3-10 15:36:38

回复:STM32两点通信有波形,接收不到数据

回复第 2 楼 于2014-03-10 14:10:02发表:
求大神指点!!!!
整了两周了,小女子都快崩溃了。。。。 

看了下你的程序,这段程序:
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;                    //重新同步跳跃宽度1个时间单位,在每位中可以延长或缩短多少个时间单位的上限
 CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;                    //时间段14个时间单位
 CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;                    // 时间段23个时间单位
 CAN_InitStructure.CAN_Prescaler=4.5;                           //CAN_Prescaler设定了一个时间
要改改的。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
CAN_InitStructure.CAN_BS2=CAN_BS2_3tq;               
 CAN_InitStructure.CAN_Prescaler=4;        
波特率不对,出现错误了
              
 
 

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版