STM32F407VG DISCOVERY BOARD microcontrolador CAN mensajes

1

Me pregunto si alguien está familiarizado con algún STM32f407VG microcontroladores?

Si es así, tengo algunos problemas para configurar un controlador CAN.
Puedo ejecutar el código de demostración, que se establece en un modo de bucle de retorno, pero no puedo obtener modo normal para trabajar.

Creo que el mensaje no está saliendo del buzón de transmisión. El estado va pendiente todo el tiempo.

Leí todas las hojas de datos y todo está configurado correctamente, excepto el INAK en el registro CAN_MSR nunca se restablece en 0. Puedo proporcionar más detalles si es necesario, pero primero necesito saber si hay alguien que ha trabajado con un microcontrolador STM32F4 y CAN mensajes.

Aquí está mi código de ejemplo:

RCC_APB1PeriphClockCmd(CAN_CLK, ENABLE); 
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);  
GPIO_PinAFConfig(CAN_GPIO_PORT, CAN_RX_SOURCE, CAN_AF_PORT);  
GPIO_PinAFConfig(CAN_GPIO_PORT, CAN_TX_SOURCE, CAN_AF_PORT); 
/* Configure CAN RX and TX pins */   
GPIO_InitStructure.GPIO_Pin = CAN_RX_PIN | CAN_TX_PIN;  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  
GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;  
GPIO_Init(CAN_GPIO_PORT, &GPIO_InitStructure);   
CAN_DeInit(CANx);
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 Baudrate = 1 MBps (CAN clocked at 30 MHz) */   
CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq;   
CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;   
CAN_InitStructure.CAN_Prescaler = 2;  
CAN_Init(CANx, &CAN_InitStructure);

/************transmit message config***********/

TxMessage.StdId = 0x11;   
TxMessage.RTR = CAN_RTR_DATA;  
TxMessage.IDE = CAN_ID_STD;   
TxMessage.DLC = 2;   
TxMessage.Data[0] = 0xCA;   
TxMessage.Data[1] = 0xFE;

CAN_Transmit(CANx, &TxMessage);
uwCounter = 0;   
while(( CAN_TransmitStatus(CANx, TransmitMailbox)  !=  CANTXOK) && (uwCounter  !=  0xFFFF))   
{
    uwCounter++;   
}  
uwCounter = 0;   
while((CAN_MessagePending(CANx, CAN_FIFO0) < 1) && (uwCounter  != 0xFFFF))   
{
    uwCounter++;   
} 
k = CAN_TransmitStatus(CANx, i);
    
pregunta Naveenreddy

0 respuestas

Lea otras preguntas en las etiquetas