当前位置: 代码迷 >> 单片机 >> STM32的can有关问题
  详细解决方案

STM32的can有关问题

热度:88   发布时间:2016-04-28 15:40:38.0
STM32的can问题
用的103VE   + usb_can来调试,可是我只有发送。都失败了, usb_can那边得不到数据。

/* Includes ------------------------------*/
#include "stm32f10x.h"
#include "misc.h"
#include "stm32f10x_can.h"
/* Private typedef -----------------------*/
typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;


__IO uint32_t ret = 0; /* for return of the interrupt handling */
volatile TestStatus TestRx;

/* Private functions ---------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
TestStatus CAN_Polling(void);
TestStatus CAN_Interrupt(void);

/****************************************************************************
* 名    称:int main(void)
* 功    能:主函数
* 入口参数:无
* 出口参数:无
* 说    明:
* 调用方法:无 
****************************************************************************/ 
int main(void)
{       
  RCC_Configuration();    //系统时钟设置及外设时钟使能
  NVIC_Configuration();    //中断源配置   
  GPIO_Configuration();    //LED控制初始化  
 
  /* CAN 50KB/s---正常通信模式 */
 TestRx =  CAN_Polling();

  if (TestRx == FAILED)
  {        
    GPIO_SetBits(GPIOB, GPIO_Pin_5);  //测试失败LED1 亮
  }
  else
  {   
    GPIO_SetBits(GPIOD, GPIO_Pin_3); //测试成功LED3亮
  }
  while (1);
}

/****************************************************************************
* 名    称:void RCC_Configuration(void)
* 功    能:系统时钟配置为72MHZ, 外设时钟配置
* 入口参数:无
* 出口参数:无
* 说    明:
* 调用方法:无 
****************************************************************************/ 
void RCC_Configuration(void){

  SystemInit(); 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC 
   | RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOE , ENABLE);
}


/****************************************************************************
* 名    称:void GPIO_Configuration(void)
* 功    能:LED初始化
* 入口参数:无
* 出口参数:无
* 说    明:
* 调用方法:无 
****************************************************************************/ 
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;      //状态LED1
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //通用推挽输出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //输出模式最大速度50MHz
  GPIO_Init(GPIOB, &GPIO_InitStructure);