Aquí tenéis un ejemplo del eCAN o CAN b para el STM32
- El Xtal está configurado a 12MHz
- Se usa el PLL a 72MHz
- El APB1 tiene un divisor por 2 para obtener su frecuencia máxima (36MHz), que es la frecuencia del oscilador del CAN
Después de saber esto ya podemos configurar el baud rate o tasa de transferencia, lo he hecho gracias a esta web http://www.bittiming.can-wiki.info/
En el ejemplo tenemos 125kbps al 75%.
Recibimos los datos por interrupción y tenemos activos dos filtros.
Para los filtros hay que tener en cuenta que no sólo comprueba el STID y el EXTID, sino que añade el IDE y el RTR (para más información acerca de estas siglas pasa por el post del Bus CAN).
Esto está indicado en la figure 229 del manual de referencia (RM0008.pdf)
Como se puede observar, los bits del filtro de 32 bits quedarían:
- bits 31 al 21: STID
- bits 20 al 3: EXID
- bits 2: IDE
- bits 1: RTR
- bits 0: '0'
Y para el de 16 bits:
- bits 16 al 5: STID
- bits 4: RTR
- bits 3: IDE
- bits 3 al 0: EXTI del bit 17 al 15
En el ejemplo se usa el filtro de 32bits y se configura en el modo Identifier Mask (para que pueda entrar un rango de identificadores).
Como queremos que coincidan los bits del EXID, configuramos la máscara con el valor 0x001FFFF8 (para más información acerca de estas siglas pasa por el post del Bus CAN).