银🗡是这个芯片,我没有安装 这是固件的代码组织形式,源码+驱动+芯片标准库 这些是编译时候加的目录,我觉得看源码这个是很重要的 外设 驱动 源码 我们可以去我提供的网站下载对应的pack包 http://www.armfly.com/armbbs/bbs/96992/Keil.STM32F0xx_DFP.2.1.0.pack 下载的位置 https://cloud.tencent.com/developer/article/1605195 这里提供MDK的下载版本 多线程快 一开始没有 安装 再这里安装 然后就有了 CMSIS是什么? ARM Cortex 微控制器软件接口标准(CMSIS:Cortex Microcontroller Software Interface Standard) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层(英文原文为:a vendor-independent hardware abstraction layer for the Cortex-M processor series and defines generic tool interfaces--来自ARM官方定义)。使用CMSIS,可以为处理器和外设实现一致且简单的软件接口,从而简化软件的重用、缩短微控制器新开发人员的学习过程,并缩短新设备的上市时间。软件的创建被嵌入式行业公认为主要成本系数。通过在所有Cortex-M 芯片供应商产品中标准化软件接口,这一成本会明显降低,尤其是在创建新项目或将现有软件迁移到新设备时。 这个东西就好像是我们一听见说一个芯片是ARM内核的,其实这个ARM内核就是对应的CMSIS,就好像是一个底层的构件。 https://arm-software.github.io/CMSIS_5/General/html/index.html CMSIS 的创建是为了帮助行业实现标准化。它支持跨各种开发工具和微控制器的一致软件层和设备支持。CMSIS 并不是一个巨大的软件层,它引入了开销并且没有定义标准外设。因此,硅行业可以使用此通用标准支持各种基于 Arm Cortex 处理器的设备。 标准化其实是一种强制手段,一家多大叫标准化,不过标准化了好啊,学一个就行,你居然不高兴? 这是驱动芯片的所有文件 HAL 库 HAL是 Hardware Abstraction Layer 的缩写,中文名:硬件抽象层。HAL 库是 ST 为 STM32 最新推出的抽象层嵌入式软件,可以更好的确保跨 STM32 产品的最大可移植性。该库提供了一整套一致的中间件组件,如 RTOS,USB,TCP/IP 和 图形 等。 HAL 库是基于一个非限制性的 BSD 许可协议(Berkeley Software Distribution)而发布的开源代码。ST 制作的中间件堆栈(USB 主机和设备库,STemWin)带有允许轻松重用的许可模式, 只要是在 ST 公司的 MCU 芯片上使用,库中的中间件(USB 主机/设备库,STemWin)协议栈即被允许随便修改,并可以反复使用。至于基于其它著名的开源解决方案商的中间件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用户许可条款。作为目前 ST 主推的外设库,HAL库相关的文档还是非常详细的。 好几天忙别的,源码都没有读,今天就读会儿,累了就到了文章尾部了~ 读法粗糙,因为这个是STM32的代码,而且是裸机的,就直接从main文件开始读了。 一开始是固件的初始化 先看main文件里面的函数调用,基本上就是初始化+循环 值得注意的是debug的结构体就是这么简单。注意看里面的变量名的意思 时钟+IMU+Flash初始化 时钟的初始化 IMU的初始化 加载参数 还在读 各种常量 这个飞控里面没有什么GUI的参数设置软件,只能改代码,通过该这个config里面的宏。 就是这样 在main文件里面引入 你看宏定义 这个是超频 在config的配置是这样的 就可以超频了 延时函数 这些是时间的函数 GPIO就两个函数,但是内容丰富 下面是FPV引脚,没有搞懂是什么 PWM设置 初始化后继续设置初值 四个电机的定义 通道数? 陀螺仪初始化 bayang的协议 接收 CMSIS库 重要的CM头 各种编译器的宏定义 这里某种情况 C:\Keil_v5\ARM 这是ARMCC的库文件 里面的类型定义,但是是keil的头,使用的 如果直接查是微软的 从keil复制一个出来 这些是真正使用的定义 __IO定义 注释 这个头有趣极了,我给你讲 把这个文件称之为对芯片的封装也不为过,这个文件是ST公司给的,遵守CMSIS守则。可以简化ARM_CM3的移植难度。 主要的内容是定义寄存器的地址以及使用的结构体封装。 接下来看的就是这些文件 不过我要多嘴一句,这个文件是设备外设的访问层,主要配置时钟频率 人家也写了 看这里会使用extern,在外面使用 然后跳到这里 这个文件在这里被定义 里面的注释 这个是所有函数的定义 这些是实现 上面的函数体又在这里被定义了一下 看它写的意思是,这些文件是启动文件,都是汇编的,根据芯片选一个 VSCode觉得我需要看汇编了 啧,这个颜色,变得 系统得初始化从汇编代码开始 这是汇编写的东西 分配栈空间,stack就是栈 堆空间也安排点,雨露均沾 从这里开始就进入我们C的 世界了 我以前也没有用过STM32,然后正经的课也没有上过,就看过火哥的书,看了一点点,正好借着这个飞控就验证一下是不是像书中说的那样,体验一下封装的快乐。 file:///C:/Users/yunswj/Downloads/Silverware-master/Silverware-master/Libraries/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h 这些就是寄存器的地址定义了,我就截图了一些 外设树,请允许我这样叫它 时钟相关的东西,定时器,RTC,看门狗什么的 SPI,串口,I2C,CAN DMA GPIO组 限于篇幅(其实不是篇幅,是我没有耐心,只能走马观花的看一遍了) 没有MPU的功能 这里是中断的定义区 可以看到是enumerate 对应的意思 GPIO,必不可少 I2C的结构体定义 上面文件接着下面,上面这些就是所谓的位定义 接着跳转 这些是我们用的实现 对于GPIO来说,就似乎这些函数了 这里就看一个配置端口功能,但是不全面 这个功能是GPIO的初始化 这里是GPIO 内存的映射的开始 这个初始化的函数传入两个参数 一开始我就说这个结构体了,对GPIO做了封装 另外一个GPIO的初始的结构体封装 IO的输出速率 这是上面的翻译 这种东西其实看懂了,也不过如此,芯片再高端又怎么样?不就是多点宏定义,多点结构体,索然无味了~ 在这里就是我们打交最多的地方了,各种外设功能都在这里实现 CMSIS就是芯片+地址映射的活,STD才是我们接触的东西 名字叫“标准外设驱动程序”以后叫对名字。 如果你的程序要写啥中断的话,这个头文件一定要加 看这个conf,就是头文件的管理器 用到的都有 这是配置要不要使用断言,调试的时候使用 这里参数的意思 这个文件夹里面,加了一些废话 common是屏幕的接线定义,LCD屏幕。 具体看这里 至于这个Nucleo看上去是个开发板。 确实是 等小张有钱,买一个玩,看来这个nucleo就是个系列 一般来说开发,就是main,conf,it.h,it.c,就是主文件,头的配置文件,中断程序,这么多了~ 注意我们得有一个参考手册,本崽的是中文的 STM32是真搞控制的 |
|