感谢网上大神,附上链接:STM32CubeMX | 36 - 使用CAN总线进行双板通信(TJA1050)_Mculover666的博客(嵌入式)-CSDN博客
如有侵权请联系谢谢!
1、配置STM32F103C8T6开发板的 CAN通讯,需要配置CAN和调试串口;
2、CubeMX配置没有CAN模块配置如下:
CAN波特率计算:
1、can分频,4分频:32Mhz / 4 = 8Mhz;
2、公式:SYNC_SEG+BS1+BS2 = T;
2、波特率计算,目标波特率是500khz:
根据:8Mhz/ T = 8000khz/T = 500khz
计算出:
T = 16
3、CubeMX配置有CAN模块配置如下:
如果是环回模式,串口收到的数据是自己发出的ID;
源码链接:链接:WL/WL-open-projects - Gitee.com
更新1:
更新cubemx后发现上程序无法打印数据,是因为需要重定义串口和自己添加外部打印收到的数组,不能在can接收中断里面处理数据, 因为用了print重定义 cubemx编译后需要重新点击魔术棒打开 user micro lib库;
//***************** 摘取网上串口重定义部分以下 ***************************
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls \_\_io\_putchar() \*/
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
//***************** 摘取网上串口重定义部分以下 ***************************
更新2:
数据发送不成功,寄存器报错:
解决办法: