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

stm32 的can实验 发送程序有问题

[复制链接]
chenzongxi 提问时间:2011-11-27 11:31 /
#include "stm32f10x.h"
unsigned char TxTest;
void RCC_Configuration(void)
{
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE);
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);
}
void GPIO_Configuration(void)                            //用重映射功能,
{
 GPIO_InitTypeDef GPIO_InitStructure;
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;;
 GPIO_Init(GPIOC,&GPIO_InitStructure);
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;     //RX
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     //TX
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
 GPIO_Init(GPIOD,&GPIO_InitStructure);
 GPIO_PinRemapConfig(GPIO_Remap2_CAN1,ENABLE);

}
unsigned char CAN_Configuration(void)
{
 CAN_InitTypeDef CAN_InitStructure;
 CAN_FilterInitTypeDef CAN_FilterInitStructure;         //初始化
 CanTxMsg TxMessage;             //发送
 volatile u8 TxMailBox = 0;
 u32 i;
 CAN_DeInit(CAN1);           //缺省模式
 CAN_StructInit(&CAN_InitStructure);
 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_Normal;
 CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
 CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;
 CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;
 CAN_InitStructure.CAN_Prescaler = 12;
 CAN_Init(CAN1,&CAN_InitStructure);      //CAN初始化有返回值  #define CANINITFAILED ((uint8_t)0x00)
    //Error =CAN_Init(&CAN_InitStructure);
    // if (Error == 0)
    // return FAILED;  //判断初始化 是否成功  不成功我们会有灯显示
 //CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);                     //有一个消息就中断,FIFO0中断
 
  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);
 /* (注:标准帧数据帧、标准远程帧和扩展远程帧均被过滤)*/
             
 TxMessage.StdId = 0x321;
 TxMessage.ExtId =0x01;         //扩展帧
 TxMessage.IDE = CAN_ID_STD;
 TxMessage.RTR = CAN_RTR_DATA;        //数据帧
 TxMessage.DLC = 2;
 TxMessage.Data[0] = 0x12;
 TxMessage.Data[1] = 0x34;
 CAN_Transmit(CAN1,&TxMessage);
 TxMailBox = CAN_Transmit(CAN1,&TxMessage);
 i=0;        
 while((CAN_TransmitStatus(CAN1,TxMailBox)!=CANTXOK) && (i != 0xff))
 {
  i++;
 }
 if(i==0xff)
 {
  return 0;
 }
 else
 {
  return 1;
 } 
}
void Delay(vu32 times)
{
 for(;times!=0;times--);
}
int main(void)
{
  RCC_Configuration();
  GPIO_Configuration();;
  CAN_Configuration();
 
  while(1)
  {
   TxTest = CAN_Configuration();
   if(TxTest==1)
  {
   GPIO_SetBits(GPIOC,GPIO_Pin_5);  
   Delay(1000000);
   GPIO_ResetBits(GPIOC,GPIO_Pin_5);
   Delay(1000000); 
   
  }
  if(TxTest==0)
  {
   GPIO_SetBits(GPIOC,GPIO_Pin_6);
    Delay(1000000);
    GPIO_ResetBits(GPIOC,GPIO_Pin_6);
    Delay(1000000); 
  }
  }
}

只有发送程序,没有接收,发送成功,PC5对应LED亮灭,发送失败,PC6对应LED亮灭,现在是发送失败,不知道那里有问题,还请高手讲解。
用的是103
收藏 评论4 发布时间:2011-11-27 11:31

举报

4个回答
火雷达 回答时间:2011-11-27 13:45:44

RE:stm32 的can实验 发送程序有问题

建议:
1、用官方例程测试下硬件,可以用CAN测试模式,自发自收
2、硬件没有问题的情况下,再测试自己的程序,可以用CAN测试模式,自发自收,如果有问题,对照官方例程对比,看那些地方配置不对,或者少了配置
废鱼 回答时间:2011-11-28 10:34:55

RE:stm32 的can实验 发送程序有问题

连接CAN接收器了吗?如果总线数据数据没有被取走,将发生错误
chenzongxi 回答时间:2011-12-1 11:20:02

回复:stm32 的can实验 发送程序有问题

回复第 3 楼 于2011-11-28 02:34:55发表:
连接CAN接收器了吗?如果总线数据数据没有被取走,将发生错误
 

 
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
 CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;
 CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;
 CAN_InitStructure.CAN_Prescaler = 12;
 
 
 
将12该为6就可以,频率小了为什么就行了,我也没有接can接收器,
kelep7 回答时间:2011-12-1 11:25:19

RE:stm32 的can实验 发送程序有问题

好好看看协议,可能是出错了

所属标签

相似问题

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