初级会员

- 积分
- 71
- 金钱
- 71
- 注册时间
- 2014-11-26
- 在线时间
- 6 小时
|
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楼】正点原子:
---------------------------------
通过自己的努力,终于把问题解决了,谢谢原子哥的回复!!!
|