您现在的位置是:首页 >技术交流 >【电机控制】Matlab代码生成FOC控制01——按键控制LED网站首页技术交流
【电机控制】Matlab代码生成FOC控制01——按键控制LED
简介matlab2023的代码生成按钮
功能需求:
由于板载只有 1 个按键和 1 个 LED,因此使用按键按下切换 1 次功能
实现思路:
状态机的输出赋值给 LED 对应的 IO 口
每次按下按键,状态机输出频率变化一次,对应 LED 闪烁频率变化
按键中断回调函数中定义一个变量buttonMode作为 LED 状态的控制变量,每次按下按键buttonMode+1
一、CubeMX 配置
- 打开 STM32CubeMX
- 选择对应的芯片型号(STM32G474RETx)
- 选择时钟来源为外部晶振

- 配置时钟树(直接配置为最高,170M),修改图中两个地方即可

- debug 接口配置为串行接口

- 配置 LED 和按键对应的 GPIO 口


通过查看用户手册,LED 对应的是 PA5,高电平点亮;按键 B1 对应的是 PC13
LED2 配置为推挽输出,B1 配置为上升沿检测,修改用户标签
使能 EXTI 中断
- 配置定时器
由于 LED 功能需要延时,这里不使用直接在主循环中使用延时函数,原因留给大家自行思考。
- 配置工程名称,路径,编译器等


- 点击生成代码
二、MATLAB 程序编写
- 整体介绍

- 按键模块

- LED 模块




- 针对子系统生成代码


三、集成到 Keil
- 添加工程文件分组,并将生成的.c 和 .h 文件包含到工程路径


- 预编译头文件

- 在 main 中进行初始化以及开始开启定时器

- 在按键中断回调函数运行 Button 算法函数

- 在定时器周期中断回调函数运行 LED 算法函数

四、下载验证
【电机控制】代码生成01——按键控制LED
五、问题记录
- 分别对 LED 模块和 Button 模块生成代码,会出现输出输出端口的结构体重复定义的情况



解决方式:修改代码接口为全局变量
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。





U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结