1、工具说明
Matlab必须处于2018b及其以上,我这里使用2020a,因为2020a版本能自动进行模型模块和C代码对应关系
STM32CubeMX版本为V5.60
STM32F103的HELL库我用的版本为V1.80
单片使用STM32F103C6系列,带有一个CAN,两个LED灯,一个高速外部晶振8MHz
一个下载器,我用的ST-LINK,下载方式选择SW
一个CAN分析仪,我用的PCAN,波特率统一设为500K
一台配置还说的过去的电脑
2、STM32CubeMX配置
下载模式选择-SW,系统时钟选择“SysTick”--由于此时钟单位是ms,因此在SimuLink中允许最小步长为1ms
高速晶振选择外部晶振--板载晶振8MHz
时钟树:最大频率
两个LED灯
重点来了:CAN配置,--波特率500K--主频率-APB1--36M,波特率= 36M/8/(1+4+4)=500k
CAN中断配置
主要参数配置完成
我用编译器是MDK,固件库版本:HALL_V1.80
分离底层配置,防止代码扎推
一键生成底层代码
不要着急打开参数,准备SimuLink
3、Matlab开启SimuLink配置
开启Matlab,并选择到STM32CubeMX所在的文件夹里
如:
新建SimuLink,并保存到上述的目录里,名字全英文字符
点开配置
4、绘制模型
这里是STM32所有的官方库
绘制模型
完成后,保存,并仿真运行
5、代码生成,由于有点BUG,要稍作修改
代码生成
代码生成完成
回到目录,把“Scr”和“Inc”拖到“Core”中,重复部分都选择替换,一个工程建立后只需要这样一次,以后即使再修改模型代码生成就不用这一步了
再用“STM32CubeMX”重新生成一边代码,并打开代码
6、开始修改BUG,每个工程自建立后仅需要修改一次
6.1、头文件里缺少一个文件,此文件在STM32支持包的“STM32-MAT\STM32\addSrc\R2018b\inc”中
把它拷贝到自己建立工程文件的“Core\Inc”中
6.2、打开代码
找到--“untitled_initialize();” 大约在 第126行,由于使用代码不同,可能会变
在126行下方添加阴影部分代码
if (HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)
{
Error_Handler();
}
此部分用于开启接受邮箱0挂起中断,这样才能正常进入接收中断
7、编译下载运行
无错误,无警告
打开PCAN,波特率500K,看看收发情况
通过