(本实验开发板选用野火的STM32F103VET6【指南者】)
【本实验是在安装好Matlab、Keil5、MDK、STM32-MAT/TARGET的基础上完成的】
TIP1:配置CubeMX
一、配置SYS
1)Debug(调试)选择Serial Wire(串行线调试),否则程序下载只是一次性,第二次下载会报错,需要长按复位键,很麻烦。
2)由于我打算用单片机上PA6引脚输出方波信号(和控制舵机那篇Blog选用相同I/O口),根据官方手册,
可知,PA6是TIM3_CH1,所以Timebase Source(时钟源)设置为TIM3(定时器3)。
二、配置RCC
1)将HSE(高速时钟)选择为Crystal/Ceramic Resonator(水晶/陶瓷谐振器)。
三、激活IWDG
1)Activated(激活看门狗),用来检测并解决由于软件错误导致的故障,当计数器到达给定的超时值时,会触发一个中断或产生系统复位。
四、配置I/O口
1)由于用的是PA6,并且最终我们会用示波器测量该口输出的方波信号,故需要激活GPIO_Output(GPIO输出)。
五、配置Clock Configuration
1)选择PLL(锁相环倍频),由于TIM3挂在在高速总线上,HCLK(高速时钟)输入最大的72MHz,生成解决方案。
六、配置Project Manager
1)自己取Project Name(工程名称),注意:不可有中文路径;
2)Application Structure(程序结构)选择Basic(基础模式),另一种模式会使得CubeMX生成一种主函数覆盖Simulink生成的主函数;
3)Toolchain/IDE(工具链/集成开发环境)选择MDK-ARM。
七、保存文件(无需生成代码,直接保存,去目标文件夹发现已经生成.ioc文件了)
TIP2:配置Matlab环境(在该步骤之前,应当安装好STM32的支持包,即Matlab_MAT_TARGET)
一、修改路径到基于HAL库建立的工程文件的文件夹
目录
TIP2:配置Matlab环境(在该步骤之前,应当安装好STM32的支持包,即Matlab_MAT_TARGET)
TIP3:用simulink建立简易生成PWM信号的数学模型
TIP4:simulink结合HAL库生成main函数的C代码
二、导入STM32_MAT库
1)输入指令>>pathtool等待选择路径找文件。
2)添加并包含子文件,找到STM32_MAT库的路径,保存即可。
三、配置simulink环境
1)先保存一下该模型,为了将模型路径终点指示到工程文件中。
2)模型设置
(1)求解器:求解器类型——定步长;求解器——离散。
(2)代码生成:系统目标文件——stm32.tlc 。
(3)STM32 Options勾选上STM32CubeMX Path update(实时更新路径)。
(4)硬件实现:设备供应商——ARM Compatible;设备类型:ARM Cortex-M 。
TIP3:用simulink建立简易生成PWM信号的数学模型
一、配置内核,加载用CubeMX生成的.ioc文件。
二、配置引脚,选择之前初始化的PA6。
三、搭建生成方波的简易模型
1)输入用Pulse Generator(脉冲发生器);测量用Scope(示波器)。
2)配置脉冲参数
由于我选用的舵机输入信号振幅150mV,所以键入0.15V;而数字舵机的周期为20ms,所以键入0.02s。
四、直接仿真
1)为了方便观察,我们用五个周期的信号来观察,所以停止时间设置为0.1s,点击运行可以得到示波器信号,占空比为25%。
TIP4:simulink结合HAL库生成main函数的C代码
一、simulink生成C代码
1)ctrl+B生成C代码。记得生成代码之前把示波器删除!
二、HAL库补齐代码
1)用CubeMX补齐代码,因为simulink只是覆盖main函数。把用CubeMX配置好的.ioc文件生成代码,打开会发现主函数已经用simulink写好了,不需要自己编程。编译发现没问题。
TIP5:烧录到单片机调试
一、硬件连接
1)示波器与单片机共地;示波器接收PA6的信号
二、烧录调试
1)烧录程序,观察示波器
由于HAL库配置为占空比,而simulink脉冲为直接键入的信号,二者波形互补。simulink设置的25%对应HAL库配置的75%占空比。所以控制电机时,只需100%-simulink设置波形即可。
完!!!
如果将PA6信号线与数字舵机连接,那么舵机将按照占空比转动角度,控制舵机见之前写的文章。https://blog.csdn.net/m0_57106730/article/details/123056882?spm=1001.2014.3001.5501