OpenEdv-开源电子网

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

两块板Can通信疑问

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-8-14
在线时间
0 小时
发表于 2018-8-14 14:51:18 | 显示全部楼层 |阅读模式
4金钱
我在做两块板f103的的通信,回环模式两块板都正常,现在正常模式下无法通信,作用是一块板的按键按下后另一块板的灯亮,程序如下
#include "stm32f10x.h"
#include "can.h"
#include "led.h"

void Delay(vu32 nCount)
{
  for(; nCount != 0; nCount--);//延时
}
void KeyInit(void)//按键初始化
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_15 ;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

}

void  GetKey(void)
{  
        if(Bit_RESET == GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_15))
        {
                Delay(1000000);
                if(Bit_RESET==GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15))
                {
                 while(Bit_RESET==GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)){ ; }                    
                        can_tx(0X55,0X77);
                }
        }

        if(Bit_RESET == GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1))
        {
                 Delay(1000000);               
if(Bit_RESET == GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1))
                {
             while(Bit_RESET==GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)){ ; }                     
                        can_tx(0X99,0Xbb);                                
                }
        }            
}

#include "can.h"
#include "led.h"
#include "stdio.h"

typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;
__IO uint32_t ret = 0;

volatile TestStatus TestRx;       

/*CAN RX0 ÖD¶ÏóÅÏè¼¶ÅäÖà */
void CAN_NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;

          /* Configure the NVIC Preemption Priority Bits */  
          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

        #ifdef  VECT_TAB_RAM  
          /* Set the Vector Table base location at 0x20000000 */
          NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
        #else  /* VECT_TAB_FLASH  */
          /* Set the Vector Table base location at 0x08000000 */
          NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
        #endif

        /* enabling interrupt */
          NVIC_InitStructure.NVIC_IRQChannel=USB_LP_CAN1_RX0_IRQn;;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);
}

void CAN_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB, ENABLE);                                                                                                                         
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

  /* Configure CAN pin: RX */         // PB8
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Configure CAN pin: TX */   // PB9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);




}

void CAN_INIT(void)
{
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  CanTxMsg TxMessage;  

  /* CAN register init */
  CAN_DeInit(CAN1);       
  CAN_StructInit(&CAN_InitStructure);

  /* CAN cell init */
  CAN_InitStructure.CAN_TTCM=DISABLE;
  CAN_InitStructure.CAN_ABOM=DISABLE;
  CAN_InitStructure.CAN_AWUM=DISABLE;
  CAN_InitStructure.CAN_NART=ENABLE;
  CAN_InitStructure.CAN_RFLM=DISABLE;
  CAN_InitStructure.CAN_TXFP=DISABLE;
  CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;
  CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
  CAN_InitStructure.CAN_BS1=CAN_BS1_9tq;
  CAN_InitStructure.CAN_BS2=CAN_BS2_8tq;
  CAN_InitStructure.CAN_Prescaler=4;
  CAN_Init(CAN1,&CAN_InitStructure);

  /* CAN filter init */
  CAN_FilterInitStructure.CAN_FilterNumber=1;  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;  CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;       
  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);

  /* CAN FIFO0 message pending interrupt enable */
CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);

}  
void can_tx(u8 Data1,u8 Data2)
{
  CanTxMsg TxMessage;  
  TxMessage.StdId=0x00;       
  TxMessage.ExtId=0x0000;
  TxMessage.IDE=CAN_ID_EXT;
  TxMessage.RTR=CAN_RTR_DATA;
  TxMessage.DLC=2;
  TxMessage.Data[0]=Data1;
  TxMessage.Data[1]=Data2;
  CAN_Transmit(CAN1,&TxMessage);
}
void USB_LP_CAN1_RX0_IRQHandler(void)
{

  CanRxMsg RxMessage;

  RxMessage.StdId=0x00;
  RxMessage.ExtId=0x00;       
  RxMessage.IDE=0;
  RxMessage.DLC=0;
  RxMessage.FMI=0;
  RxMessage.Data[0]=0x00;
  RxMessage.Data[1]=0x00;   

  CAN_Receive(CAN1,CAN_FIFO0, &RxMessage); //½óêÕFIFO0ÖDμÄêy¾Y  

  if((RxMessage.Data[0]==0x99)&&(RxMessage.Data[1]==0xbb))   
  { LED1(0);LED2(1);}
  if((RxMessage.Data[0]==0x55)&&(RxMessage.Data[1]==0x77))   
  { LED1(1);LED2(0);}


}



int main(void)
{   
        SystemInit();
        KeyInit();          
        LED_GPIO_Config();
        CAN_GPIO_Config();
        CAN_NVIC_Configuration();   
        CAN_INIT();       
        while(1)
    {
         GetKey();          
          }
}
led程序没写出来但是回环模式能用,应该没问题,can模块用的是TJA1050,5v供电,两模块canh对接,canl对接,接线应该没问题,两块板子是一样的,烧录一样的程序,求各位大佬看看是什么问题



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

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-8-14
在线时间
0 小时
 楼主| 发表于 2018-8-14 14:53:38 | 显示全部楼层
canh和canl之间有120欧电阻
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-8-14
在线时间
0 小时
 楼主| 发表于 2018-8-14 14:54:48 | 显示全部楼层
PB9接tx,pb8接rx
QQ浏览器截图20180814144857.png
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 16:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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