嵌入式学习6

自己工作学习总结,有些乱

1、MDK安装和获取STM32所有芯片包

安装芯片包

1、第一步

嵌入式学习6

2、第二步

搜索STM32 (其他芯片类似)

嵌入式学习6

3、第三步

①双击对应的芯片系列
②点击install

嵌入式学习6

4、第四步

①下载中
②下载完成后,打开MDK窗口,重新加载一下即可

芯片包下载和安装目录

keil安装路径:Kile_5ArmPacks.Download
例如:D:Program FilesKile_5ArmPacks.Download

嵌入式学习6

芯片包安装目录

keil安装路径:Kile_5Kile_5ArmPacksKeil
例如:D:Program FilesKile_5ArmPacksKeil

嵌入式学习6

2、GPIO->ODR与GPIO_Pin同作为实现输出时的区别是什么?
GPIO->ODR是32位的输出数据寄存器(高16位保留,低16为依次对应某个GPIO口的16个引脚)。对ODR赋值是一次操作16位的,也就是同时设置了16个引脚的输出电平;而GPIO_PIN是指某个端口的具体某一个引脚,是位操作,可以通过设置BSRR或BRR寄存器来设置某一特定引脚的输出电平,而保持其他引脚输出不变,速度快,效率高。具体可以看看stm32参考手册关于GPIO寄存器的说明。

3、STM32F4 的 FPU

FPU 即浮点运算单元(Float Point Unit)。浮点运算,对于定点 CPU(没有 FPU 的 CPU)来说必须要按照 IEEE-754 标准的算法来完成运算,是相当耗费时间的。而对于有 FPU 的 CPU来说,浮点运算则只是几条指令的事情,速度相当快。STM32F4 属于 Cortex M4F 架构,带有 32 位单精度硬件 FPU,支持浮点指令集,相对于Cortex M0 和 Cortex M3 等,高出数十倍甚至上百倍的运算性能。

STM32F4 硬件上要开启 FPU 是很简单的,通过一个叫:协处理器控制寄存器(CPACR)的寄存器设置即可开启 STM32F4 的硬件 FPU,该寄存器各位描述如图。

嵌入式学习6

这里我们就是要设置 CP11 和 CP10 这 4 个位,复位后,这 4 个位的值都为 0,此时禁止访问协处理器(禁止了硬件 FPU),我们将这 4 个位都设置为 1,即可完全访问协处理器(开启硬件 FPU),此时便可以使用 STM32F4 内置的硬件 FPU 了。CPACR 寄存器这 4 个位的设置,我们在 system_stm32f4xx_c 文件里面开启,代码如下:

void SystemInit(void)

{

/* FPU settings ------------------------------------------------------------*/

#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)

SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */

/*(3UL << 10*2)|(3UL << 11*2)代表将CP10和CP11的位置1,其中10*2代表位置移动10位,11*2代表移动11位*/

#endif

……//省略部分代码

}

此部分代码是系统初始化函数的部分内容,功能就是设置 CPACR 寄存器的 20~23 位为 1,以开启 STM32F4 的硬件 FPU 功能。从程序可以看出,只要我们定义了全局宏定义标识符__FPU_PRESENT 以及__FPU_USED 为 1,那么就可以开启硬件 FPU。其中宏定义标识符__FPU_PRESENT 用来确定处理器是否带 FPU 功能,标识符__FPU_USED 用来确定是否开启FPU 功能。

实际上,因为 F4 是带 FPU 功能的,所以在我们的 stm32f4xx.h 头文件里面,我们默认是定义了__FPU_PRESENT 为 1。大家可以打开文件搜索即可找到下面一行代码:#define __FPU_PRESENT 1

但是,仅仅只是说明处理器有 FPU 是不够的,我们还需要开启 FPU 功能。开启 FPU 有两种方法,第一种是直接在头文件 STM32f4xx.h 中定义宏定义标识符__FPU_USED 的值为 1。也可以直接在 MDK 编译器上面设置,我们在 MDK5 编译器里面,点击魔术棒按钮,然后在 Target选项卡里面,设置 Floating Point Hardware 为 Use Single Precision,如图 51.1.1.2 所示:

嵌入式学习6

经过这个设置,编译器会自动加入标识符__FPU_USED 为 1。这样遇到浮点运算就会使用硬件 FPU 相关指令,执行浮点运算,从而大大减少计算时间。最后,总结下 STM32F4 硬件 FPU 使用的要点:

1, 设置 CPACR 寄存器 bit20~23 为 1,使能硬件 FPU。

2, MDK 编译器 Code Generation 里面设置:Use FPU。

经过这两步设置,我们的编写的浮点运算代码,即可使用 STM32F4 的硬件 FPU 了,可以大大加快浮点运算速度。

4、Julia 分形简介

例如,对于复变函数的一个通项公式,

假设这里的常数C总是小于2 ,当我们迭代次时,发现。那么很显然,之后的会变得越来越大,所以这样的点是发散的。同理,也存在无论迭代多少次都不会发散,这样的点就构成Julia集。然而,按照这种判断方法,我们不可能精确找出所有的非发散点。因为如果当我们迭代次时,仍然有,但是随着迭代次数继续增大,发散点总有一次会超过这个限制,而这个次数可能会很大,超过我们设置的迭代次数,所以这样的判断是不够准确的 。但这不妨碍我们可以利用这种方法近似找出Julia集的点。因为随着的增加,这样判断出的点集会不断逼近Julia集,从而我们可以得到一个近似的Julia集合。具体思路为:

  1. 设置迭代次数 、收敛半径 、次数 和常数
  2. 设置一个复数点集为初始点集 ,带入公式 计算
  3. 找出 的点,记录这些点的位置矩阵
  4. 重复2、3步骤 次;
  5. 画出矩阵 ,即Julia集的图像。
展开阅读全文

页面更新:2024-05-31

标签:浮点   电平   寄存器   可能会   复数   常数   个位   矩阵   近似   嵌入式   路径   处理器   芯片   次数   操作   硬件   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top