SimpleFOC01|基于STM32F103+CubeMX,移植核心的common代码
导言

如上图所示,进入SimpleFOC官网,点击Github下载源代码。

如上图所示,找到仓库。

comom代码的移植后,simpleFOC的移植算是完成一大半。simpleFOC源码分为如下5个部分,其中communication是跟simpleFOC上位机通讯,暂时不打算使用,忽略它:
- common(数学工具、关键类)
- communication(simpleFOC上位机):simpleFOC上位机通讯,暂时不打算使用,没必要移植。
- current_sensor(电流传感器)simpleFOC官方使用过的开发板,一般我们都要根据自己的开发板重新写,重新调。
- drivers(驱动器,三相逆变电路):simpleFOC官方使用过的开发板,一般我们都要根据自己的开发板重新写,重新调。
- sensors(位置编码器):simpleFOC官方使用过的编码器驱动程序,一般我们都要根据自己的项目重新写,重新调。
- BLDCMotor.cpp与BLDCMotor.h:核心的FOC算法(如帕克变换、SVPWM算法等)
项目源码:https://github.com/q164129345/MCU_Develop/tree/main/simplefoc01_stm32f103
一、移植
1.1、Arduino-FOC/src/common

如上所示,simpleFOC源码一共包含上述这些模块。

如上所示,将simplefoc源码的src/common的代码移植到stm32f103项目上。
1.2、SEGGER_RTT
参考博文:SEGGER | 基于STM32F405 + Keil - RTT组件01 - 移植SEGGER RTT
用于调试log打印,也可以用于替代Arduino库的print()。
1.3、DWT计时器

如上图所示,dwt_timer.c是我自己编写的DWT定时器驱动代码,目的:
- 提供us级的延时(替代Arduino提供的delayMicroseconds())
- 提供us级的时间戳(完成time_utils.cpp里的_micro())
1.4、C++环境

simpleFOC使用C++语言编写,然后,.c代码不能调用.cpp代码里的函数。创建user_main.cpp与user_main.h的目的是实现C++环境的跳转。
有空的小伙伴可以试试,在main.c里调用time_tuils.cpp的_micros()函数试试,会出现编译错误。其原因就是.c代码不能调用.cpp的代码。
二、Keil


三、代码
3.1、main.h

3.2、main.c

3.3、user_main.cpp

代替main.c的while(1)死循环。
3.4、user_main.h

3.5、foc_utils.h

3.6、foc_utils.cpp

3.7、FOCMotor.h




3.8、FOCMotor.cpp




3.9、BLDCDriver.h

3.10、Sensor.h

3.11、time_utils.cpp

四、调试代码
到目前为止,暂时只能调试time_utils.cpp的功能,time_utils.cpp为simpleFOC提供精确的时间戳与时间延时,非常重要。
4.1、编译

通过第三章节的处理,解决所有代码的报错,最终编译成功。
4.2、使用RTT Viwer调试


相关文章:
SimpleFOC01|基于STM32F103+CubeMX,移植核心的common代码
导言 如上图所示,进入SimpleFOC官网,点击Github下载源代码。 如上图所示,找到仓库。 comom代码的移植后,simpleFOC的移植算是完成一大半。simpleFOC源码分为如下5个部分,其中communication是跟simpleFOC上位机通讯&a…...
web.xml常用配置
web.xml是Java Web应用程序的部署描述文件,它位于WEB-INF目录下。web.xml文件主要用于配置Servlet、Filter、Listener、MIME类型、欢迎页面等组件,以及一些Web应用的上下文参数。以下是一些常见的web.xml配置说明: Servlet配置: …...
代码随想录刷题day07|(数组篇)58.区间和
目录 一、数组理论基础 二、前缀和 三、相关算法题目 四、总结 五、待解决问题 一、数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合。 代码随想录 (programmercarl.com) 特点: 1.下标从0开始,内存中地址空间是连续的 2.查询快&…...
【Linux】进程结束和进程等待
进程的结束 退出码的认识 在我们学习C/C的时候我们通常在进行写main函数时,main函数主体写完后通常会进行写一条语句 " return 0 " ,这里的这条语句到底是什么意思呢?? 我们知道当在主函数中调用其他函数或者在其他函…...
可编辑精品PPT | 城投集团(行业)数字化解决方案
这个PPT详细介绍了城投集团的数字化转型解决方案。首先,它概述了数字化转型的背景,包括政策要求和行业趋势,并指出集团在信息化方面取得的阶段性成果及存在的不足。方案提出了数字化转型的总体规划,明确了总体目标、思路和推进策略…...
统计学习算法——决策树
内容来自B站Up主:风中摇曳的小萝卜https://www.bilibili.com/video/BV1ar4y137GD,仅为个人学习所用。 问题引入 有15位客户向某银行申请贷款,下面是他们的一些基本信息,类别列表示是否通过贷款申请,是表示通过贷款申…...
基于网络爬虫技术的网络新闻分析
文末附有完整项目代码 在信息爆炸的时代,如何从海量的网络新闻中挖掘出有价值的信息呢?今天就来给大家分享一下基于网络爬虫技术的网络新闻分析的实现过程。 首先,我们来了解一下系统的需求。我们的目标是能够实时抓取凤凰网新闻、网易新闻、…...
51_Lua面向对象编程
面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构。像C++、Java、Objective-C、Smalltalk、C#、Ruby等编程语言都支持面向对象编程。 1.面向对象编程特性 面向对象编程是一种编程范式,它使用“对象”来设计软件。对象是数据和行为的封装单元…...
关于在 Kotlin DSL 中,ndk 的配置方式
在 Kotlin DSL 中,ndk 的配置方式有所不同,取决于 Android Gradle 插件版本。ndk { abiFilters(…) } 在 Kotlin DSL 中实际上是 externalNativeBuild 的一部分,需要通过正确的上下文调用。 错误代码: ndk {abiFilters("ar…...
【论文阅读+复现】High-fidelity Person-centric Subject-to-Image Synthesis
以人物为中心的主体到图像的高保真合成,CVPR2024 code:CodeGoat24/Face-diffuser: [CVPR2024] Official implementation of High-fidelity Person-centric Subject-to-Image Synthesis. paper:2311.10329 背景 研究问题:这篇文…...
Spring Boot 应用开发入门
一、Spring Boot简介 Spring Boot 是一个基于 Spring 框架的开源 Java 基础框架,它简化了基于 Spring 的应用开发。Spring Boot 提供了一种快速、便捷的方式来创建独立、生产级的基于 Spring 框架的应用程序。它通过提供一系列的“启动器”依赖,帮助开发…...
【C语言】字符串函数详解
文章目录 Ⅰ. strcpy -- 字符串拷贝1、函数介绍2、模拟实现 Ⅱ. strcat -- 字符串追加1、函数介绍2、模拟实现 Ⅲ. strcmp -- 字符串比较1、函数介绍2、模拟实现 Ⅳ. strncpy、strncat、strncmp -- 可限制操作长度Ⅴ. strlen -- 求字符串长度1、函数介绍2、模拟实现(…...
【Vim Masterclass 笔记14】S07L29 + L30:练习课08 —— Vim 文本对象同步练习(含点评课内容)
文章目录 L29 Exercise 08 - Text Objects1 训练目标2 操作指令2.1. 打开 textobjectspractice.txt 文件2.2. 单词对象练习 Word Objects2.3. 区块对象 ( ) 练习 Block Object ( )2.4. 引用字符串练习 Quoted Strings2.5. 区块对象 [ ] 练习 Block Object [ ]2.6. 区块对象 <…...
非PHP开源内容管理系统(CMS)一览
在现代网站开发中,内容管理系统(CMS)是不可或缺的工具。虽然许多广泛使用的CMS(如WordPress和Joomla)是基于PHP开发的,但其他编程语言同样诞生了许多优秀的开源CMS,适用于不同需求和技术栈的项目…...
WEB 攻防-通用漏-XSS 跨站脚本攻击-反射型/存储型/DOMBEEF-XSS
XSS跨站脚本攻击技术(一) XSS的定义 XSS攻击,全称为跨站脚本攻击,是指攻击者通过在网页中插入恶意脚本代码,当用户浏览该网页时,恶意脚本会被执行,从而达到攻击目的的一种安全漏洞。这些恶意脚…...
SQLAlchemy -批量插入时忽略重复
PostgreSQL 有一个很棒的INSERT() ON CONFLICT DO NOTHING子句,您可以将其与 SQLAlchemy 一起使用: from sqlalchemy.dialects.postgresql import insert session.execute(insert(MyTable).values(my_entries).on_conflict_do_nothing())MySQL 有类似的INSERT IGNORE子句,但…...
1月13日学习
[HITCON 2017]SSRFme 直接给了源代码,题目名称还是ssrf,那么该题大概率就是SSRF的漏洞,进行代码审计。 <?php// 检查是否存在 HTTP_X_FORWARDED_FOR 头,如果存在,则将其拆分为数组,并将第一个 IP 地址…...
Steam个人开发者注册备记
具体的注册过程有很多同志已经写过了,这里只写一点自己搞得有点费劲的地方。有点久了记得也不多了。 1.姓名用汉语拼音,参考护照上的,一般是Zhang Sanli这样的格式,姓一个单词,名字一个单词(不管1个字还是…...
django在线考试系统
Django在线考试系统是一种基于Django框架开发的在线考试平台,它提供了完整的在线考试解决方案。 一、系统概述 Django在线考试系统旨在为用户提供便捷、高效的在线考试环境,满足教育机构、企业、个人等不同场景下的考试需求。通过该系统,用…...
Laravel 中 Cache::remember 的基本用途
在 Laravel 中,Cache::remember 方法用于缓存数据,以提高应用程序的性能。当需要从数据库或其他较慢的数据源中检索数据时,可以使用 Cache::remember 来检查请求的数据是否已经被缓存。如果数据已缓存,则直接从缓存中读取…...
STM32F103ZET6【标准库函数开发】-----TM1638模块驱动4位8段共阴极数码管
1. 硬件环境搭建 第一次接触TM1638模块时,我手头正好有块吃灰的正点原子战舰开发板。这个组合对初学者特别友好,就像乐高积木一样容易上手。先说说需要准备的硬件清单: 正点原子STM32F103ZET6开发板(其他型号也行,但引…...
终极优化指南:NodeSource Node.js 二进制分发版的 Docker 镜像体积与启动速度革命
终极优化指南:NodeSource Node.js 二进制分发版的 Docker 镜像体积与启动速度革命 【免费下载链接】distributions NodeSource Node.js Binary Distributions 项目地址: https://gitcode.com/gh_mirrors/di/distributions NodeSource Node.js 二进制分发版为…...
当你的手柄在Windows上“水土不服“时,内核级虚拟化如何解决问题?
当你的手柄在Windows上"水土不服"时,内核级虚拟化如何解决问题? 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否曾经…...
零基础掌握CheatEngine-DMA:游戏内存分析与修改全攻略
零基础掌握CheatEngine-DMA:游戏内存分析与修改全攻略 【免费下载链接】CheatEngine-DMA Cheat Engine Plugin for DMA users 项目地址: https://gitcode.com/gh_mirrors/ch/CheatEngine-DMA 传统内存修改遇到的3大痛点 当你尝试分析游戏内存或进行内存修改…...
如何对比 SEO 优化公司的服务
了解 SEO 优化公司的服务 在当今数字化时代,SEO(搜索引擎优化)已经成为了企业在互联网上获得曝光和流量的重要手段。选择一家合适的SEO优化公司,对于提升网站排名和增加业务机会至关重要。如何对比SEO优化公司的服务呢࿱…...
从RGB合并到多传感器融合:深入拆解AXI4-Stream Combiner IP在Zynq平台上的两种典型应用
从RGB合并到多传感器融合:深入拆解AXI4-Stream Combiner IP在Zynq平台上的两种典型应用 在FPGA开发中,数据流的高效处理一直是工程师面临的核心挑战之一。当系统需要同时处理多个并行数据源时,如何将这些数据流有序、高效地合并为单一数据流…...
GetQzonehistory:3步轻松永久备份QQ空间所有历史说说
GetQzonehistory:3步轻松永久备份QQ空间所有历史说说 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在担心QQ空间里那些承载青春记忆的说说会突然消失吗?GetQ…...
如何永久保存微信聊天记录?WeChatMsg终极免费解决方案完全指南
如何永久保存微信聊天记录?WeChatMsg终极免费解决方案完全指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...
终极文档下载神器:一键获取全网免费文档的完整指南
终极文档下载神器:一键获取全网免费文档的完整指南 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决…...
学习Spring Ai的摸索实践
摸索AI(一)安装Ollama和本地大模型部署https://www.chendd.cn/blog/article/2012500757664628737.html摸索AI(二)Spring AI实现的Hello Worldhttps://www.chendd.cn/blog/article/2013071822723874817.html 摸索AI(三…...
