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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版