前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sliverwave四旋翼固件分析.三(蜂鸣器驱动)?

Sliverwave四旋翼固件分析.三(蜂鸣器驱动)?

作者头像
云深无际
发布2022-12-17 17:44:48
2610
发布2022-12-17 17:44:48
举报
文章被收录于专栏:云深之无迹云深之无迹

Sliverwave有刷四旋翼固件分析.一

Beecore Lite Silverware 有刷飞控.源码解读1

36元空心杯飞控Beecore Lite(Silverware固件)

Betaflight飞控1.0源码位置

100元空心杯F3飞控(BetaFlight固件)

开新坑:betaflight源码分析(开坑篇)

Sliverwave有刷四旋翼固件分析.二(原理图)

先看驱动,后看逻辑的写作。

先把蜂鸣器的开关函数封装成宏,然后也可以使用条件宏做开关

1.宏函数会在编译预处理时展开,只占编译时间,函数调用则会占用运行时间(分配单元,保存现场,值传递,返回),每次执行都要载入,所以执行相对宏会较慢。

2.在函数调用时,先求出实参表达式的值,然后带入形参。而使用带参的宏只是进行简单的字符替换。

3.函数调用是在程序运行时处理的,分配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。

4.对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;而宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时带入指定的字符即可。宏定义时,字符串可以是任何类型的数据。

其实我觉得宏函数在嵌入式里面,至少在这里就是为了代码的美观罢了。性能是有些浪费的。

清楚位置,就是控制的这个BRR的寄存器

库函数的每一个都是要校验传入的函数的

这里是设置蜂鸣器的IO

对蜂鸣器的IO进行设置

注意设置的顺序是按照IO结构体的构造顺序

库函数初始化的样子

return 1 我不是很懂

我们看看是什么

都是接收协议里面的值

SBUS

看这些变量的地方

先不急,这里

因为蜂鸣器和编程的IO是复用,这里就要设置一个延时的时间

一开始的设置通道的个数

定义在此

这个时间更新的函数写到对应的驱动再说

把更新的时间写到time里面

接着进来就是对应不同状态的声音频率

低的信号发射水平或者低电量,这个延时时间是浮点数的大数

如果上面的情况都没有出现,就是低电量什么的.开始准备启动蜂鸣器,就是叫的值现在已经装载了。

如果成功的初始化会返回一个1,这里就空了

这个是蜂鸣器声音的计算

下面就是反复的使用宏封装的函数乱叫。

如果上面的常数没有装载成功,那就直接关了蜂鸣器

最后把函数封装一下

这个简单的实现,没有什么好说的。

今天坐上特斯拉了!

坐过很多的电车了,还是感觉特斯拉的车可能真的是做出了不一样的感觉

哈哈哈,这个是我除了吹特斯拉的哨子以外目前唯一和特斯拉的交集辽~

代码语言:javascript
复制
https://blog.csdn.net/Monster_ii/article/details/77089651
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-09,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com