OpenEdv-开源电子网

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

STM CAN能发送但接收不了,在用另一端发送报文时在STM 的CAN_RX能测到波形

[复制链接]

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-11-26
在线时间
6 小时
发表于 2014-12-22 18:26:15 | 显示全部楼层 |阅读模式
5金钱
STM CAN能发送但接收不了,在用另一端发送报文时在STM 的CAN_RX能测到波形
芯片:STM32F072X
代码如下

#include "stm32f0xx.h"
#include "stm32f0xx_gpio.h"
#include "stm32f0xx_rcc.h"
#include "stm32f0xx_usart.h"
#include "stm32f0xx_misc.h"
#include "main.h"


CanTxMsg TxMessage = {0};


void CAN_GpioInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitTypeDef GPIO_CAN_Input;
/* Enable GPIO clock */
  RCC_AHBPeriphClockCmd(CAN_GPIO_CLK, ENABLE);

 
  GPIO_PinAFConfig(CAN_GPIO_PORT, CAN_RX_SOURCE, CAN_AF_PORT);
  GPIO_PinAFConfig(CAN_GPIO_PORT, CAN_TX_SOURCE, CAN_AF_PORT); 

//CAN RX CONFIG
GPIO_CAN_Input.GPIO_Pin = GPIO_Pin_11;
GPIO_CAN_Input.GPIO_Speed = GPIO_Speed_Level_2;
GPIO_CAN_Input.GPIO_Mode = GPIO_Mode_AF;
GPIO_CAN_Input.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_CAN_Input);

//CAN TX CONFIG
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

}




/**
  * @brief  Configures the CAN.
  * @param  None
  * @retval None
  */
static void CAN_Config(void)
{

  NVIC_InitTypeDef  NVIC_InitStructure;
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;
    
  // CAN GPIOs configuration *************************************************

CAN_GpioInit();

  // NVIC configuration ******************************************************
  NVIC_InitStructure.NVIC_IRQChannel = CEC_CAN_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  // CAN configuration ******************************************************** 
  // Enable CAN clock 
  RCC_APB1PeriphClockCmd(CAN_CLK, ENABLE);
  
  // CAN register init 
  CAN_DeInit(CANx);
  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 = 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 Baudrate = 500KBps (CAN clocked at 8 MHz) 
  CAN_InitStructure.CAN_BS1 = CAN_BS1_4tq;
  CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
  CAN_InitStructure.CAN_Prescaler = 2;


  CAN_Init(CANx, &CAN_InitStructure);

  // CAN filter init
  CAN_FilterInitStructure.CAN_FilterNumber = 0;
  CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  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 = CAN_FIFO0;
  CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);
  


  // Enable FIFO 0 message pending Interrupt 
  CAN_ITConfig(CANx, CAN_IT_FMP0, ENABLE);

}






void delay(void)
{
int i, j;
for(i = 0; i < 5000; i++)
{
for(j = 0; j < 200; j++)
{
}
}
}


int main(void)
{

GPIO_InitTypeDef gpio;
CanRxMsg RxMessage;
uint8_t TransmitMailbox = 0;
uint16_t ret;
int i;
int j;
uint32_t state = 0;
// clock_init();

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
//  -2- Configure IOs in output push-pull mode to drive external LEDs 
  gpio.GPIO_Mode = GPIO_Mode_OUT;
  gpio.GPIO_PuPd = GPIO_PuPd_UP;
  gpio.GPIO_Speed = GPIO_Speed_Level_2;
gpio.GPIO_OType = GPIO_OType_PP;
j = 0;
//gpio.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
gpio.GPIO_Pin = GPIO_Pin_12;
GPIO_Init(GPIOB, &gpio);


GPIO_SetBits(GPIOB, GPIO_Pin_12);

CAN_GpioInit();

while(1)
{
/*
TxMessage.StdId = 0x11;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 2;
TxMessage.Data[0] = 0x01;
TxMessage.Data[1] = 0x02;

TransmitMailbox = CAN_Transmit(CAN, &TxMessage);
i = 0;
while(((state = CAN_TransmitStatus(CAN, TransmitMailbox))  !=  CANTXOK) && (i  !=  0xFFFF))
{
i++;
}
*/

}
}
向各位大神求助啦,有遇到相似问题的也可以给我你们宝贵的意见!!
谢谢!!!


最佳答案

查看完整内容[请看2#楼]

回复【4楼】正点原子: --------------------------------- 通过自己的努力,终于把问题解决了,谢谢原子哥的回复!!!
天道酬勤!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-11-26
在线时间
6 小时
 楼主| 发表于 2014-12-22 18:26:16 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
通过自己的努力,终于把问题解决了,谢谢原子哥的回复!!!
天道酬勤!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-22 19:07:40 | 显示全部楼层
帮顶。。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-11-26
在线时间
6 小时
 楼主| 发表于 2014-12-23 09:53:04 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,可否给一下解决法办的思路或建议。
天道酬勤!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-23 23:56:43 | 显示全部楼层
回复【3楼】hrc2014a:
---------------------------------
你参考我们代码试试吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 14:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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