Notas de desarrollo de la biblioteca HAL - Comunicación CAN 🚧
En este artículo, basado en el kit de desarrollo RobotCtrl de desarrollo propio, con núcleo de microcontrolador STM32F407ZET6 y uso de chips TJA1050 para la comunicación CAN. Para ver el esquema y obtener una introducción detallada, consulta RobotCtrl - Kit de desarrollo STM32 universal.
Pasos sencillos para la prueba de bucle de retroalimentación
Configuración interna de CubeMX
- Según el hardware CAN utilizado, en la barra lateral izquierda, abre la página
CAN1
oCAN2
, marca la casillaActivated
, y en la página de parámetros, configura los siguientes parámetros:- Establece
Prescaler (for Time Quantum)
en6
, y configuraTime Quanta in Bit Segment 1
yTime Quanta in Bit Segment 2
en3 Times
. Esta combinación ajusta la velocidad de bits a 1 Mbps (máxima velocidad). - Configura
ReSynchronization Jump Width
en1 Time
, que es el máximo paso ajustable durante la resincronización. - Configura el
Operating Mode
enLoopback
para la prueba de bucle de retroalimentación.
- Establece
- En la pestaña
NVIC Settings
, habilitaCANx RX0 interrupts
.
Configuración en el código
En el proyecto, crea un archivo can.c
y configura el filtro. Aquí se configura en modo de lista y se filtra el ID extendido 0x2233
y el ID estándar 0
:
```c title="can.c"/* * Nombre de la función: CAN_Filter_Config * Descripción: Configuración del filtro CAN * Entrada: Ninguna * Salida: Ninguna * Llamado: Llamado interno */ static void CAN_Filter_Config(void) { CAN_FilterTypeDef CAN_FilterTypeDef;
/* Inicialización del filtro CAN */
CAN_FilterTypeDef.FilterBank = 0; // Grupo de filtro 0
CAN_FilterTypeDef.FilterMode = CAN_FILTERMODE_IDLIST; // Funcionamiento en modo de lista
CAN_FilterTypeDef.FilterScale = CAN_FILTERSCALE_32BIT; // Ancho de filtro de 32 bits individual.
/* Habilitar el filtro y comparar según el contenido de la bandera, desechar si no coincide con el ID extendido a continuación; si coincide, se almacenará en FIFO0. */
CAN_FilterTypeDef.FilterIdHigh = ((((uint32_t) 0x2233 << 3) | CAN_ID_EXT
| CAN_RTR_DATA) & 0xFFFF0000) >> 16; // Alto ID a filtrar
CAN_FilterTypeDef.FilterIdLow = (((uint32_t) 0x2233 << 3) | CAN_ID_EXT
| CAN_RTR_DATA) & 0xFFFF; // Bajo ID a filtrar
CAN_FilterTypeDef.FilterMaskIdHigh = 0; // Alto ID del segundo filtro
CAN_FilterTypeDef.FilterMaskIdLow = 0; // Bajo ID del segundo filtro
CAN_FilterTypeDef.FilterFIFOAssignment = CAN_FILTER_FIFO0; // Asignación del filtro al FIFO0
CAN_FilterTypeDef.FilterActivation = ENABLE; // Habilitar el filtro
HAL_CAN_ConfigFilter(&hcan1, &CAN_FilterTypeDef);
} ```
Prueba
Abre el Administrador de Dispositivos para verificar si el dispositivo se muestra. Si no encuentras el dispositivo o ves un signo de exclamación amarillo, visita el sitio web oficial de ST y descarga el controlador STM32 Virtual COM Port Driver.
Si instalaste el controlador pero aún no se reconoce correctamente, intenta ajustar el "Tamaño Mínimo de Montón" a 0x600
o un valor superior en CubeMX, en la sección de "Project Manager" - "Project" - "Linker Settings".
Abre una herramienta de comunicación serie (la velocidad de baudios puede ser cualquiera) y envía cualquier carácter. Deberías recibir el mismo carácter como respuesta.
Referencias y Agradecimientos
Dirección original del artículo: https://wiki-power.com/
Este artículo está protegido por la licencia CC BY-NC-SA 4.0. Si desea reproducirlo, por favor indique la fuente.Este post está traducido usando ChatGPT, por favor feedback si hay alguna omisión.