自己工作学习总结,有些乱 1、MDK安装和获取STM32所有芯片包 安装芯片包 1、第一步 2、第二步 搜索STM32(其他芯片类似) 3、第三步 双击对应的芯片系列 点击install 4、第四步 下载中 下载完成后,打开MDK窗口,重新加载一下即可 芯片包下载和安装目录 keil安装路径:Kile5ArmPacks。Download 例如:D:ProgramFilesKile5ArmPacks。Download 芯片包安装目录 keil安装路径:Kile5Kile5ArmPacksKeil 例如:D:ProgramFilesKile5ArmPacksKeil 2、GPIOODR与GPIOPin同作为实现输出时的区别是什么? GPIOODR是32位的输出数据寄存器(高16位保留,低16为依次对应某个GPIO口的16个引脚)。对ODR赋值是一次操作16位的,也就是同时设置了16个引脚的输出电平;而GPIOPIN是指某个端口的具体某一个引脚,是位操作,可以通过设置BSRR或BRR寄存器来设置某一特定引脚的输出电平,而保持其他引脚输出不变,速度快,效率高。具体可以看看stm32参考手册关于GPIO寄存器的说明。 3、STM32F4的FPU FPU即浮点运算单元(FloatPointUnit)。浮点运算,对于定点CPU(没有FPU的CPU)来说必须要按照IEEE754标准的算法来完成运算,是相当耗费时间的。而对于有FPU的CPU来说,浮点运算则只是几条指令的事情,速度相当快。STM32F4属于CortexM4F架构,带有32位单精度硬件FPU,支持浮点指令集,相对于CortexM0和CortexM3等,高出数十倍甚至上百倍的运算性能。 STM32F4硬件上要开启FPU是很简单的,通过一个叫:协处理器控制寄存器(CPACR)的寄存器设置即可开启STM32F4的硬件FPU,该寄存器各位描述如图。 这里我们就是要设置CP11和CP10这4个位,复位后,这4个位的值都为0,此时禁止访问协处理器(禁止了硬件FPU),我们将这4个位都设置为1,即可完全访问协处理器(开启硬件FPU),此时便可以使用STM32F4内置的硬件FPU了。CPACR寄存器这4个位的设置,我们在systemstm32f4xxc文件里面开启,代码如下: voidSystemInit(void) { FPUsettings if(FPUPRESENT1)(FPUUSED1) SCBCPACR((3UL102)(3UL112));setCP10andCP11FullAccess (3UL102)(3UL112)代表将CP10和CP11的位置1,其中102代表位置移动10位,112代表移动11位 endif 省略部分代码 } 此部分代码是系统初始化函数的部分内容,功能就是设置CPACR寄存器的2023位为1,以开启STM32F4的硬件FPU功能。从程序可以看出,只要我们定义了全局宏定义标识符FPUPRESENT以及FPUUSED为1,那么就可以开启硬件FPU。其中宏定义标识符FPUPRESENT用来确定处理器是否带FPU功能,标识符FPUUSED用来确定是否开启FPU功能。 实际上,因为F4是带FPU功能的,所以在我们的stm32f4xx。h头文件里面,我们默认是定义了FPUPRESENT为1。大家可以打开文件搜索即可找到下面一行代码:defineFPUPRESENT1 但是,仅仅只是说明处理器有FPU是不够的,我们还需要开启FPU功能。开启FPU有两种方法,第一种是直接在头文件STM32f4xx。h中定义宏定义标识符FPUUSED的值为1。也可以直接在MDK编译器上面设置,我们在MDK5编译器里面,点击魔术棒按钮,然后在Target选项卡里面,设置FloatingPointHardware为UseSinglePrecision,如图51。1。1。2所示: 经过这个设置,编译器会自动加入标识符FPUUSED为1。这样遇到浮点运算就会使用硬件FPU相关指令,执行浮点运算,从而大大减少计算时间。最后,总结下STM32F4硬件FPU使用的要点: 1,设置CPACR寄存器bit2023为1,使能硬件FPU。 2,MDK编译器CodeGeneration里面设置:UseFPU。 经过这两步设置,我们的编写的浮点运算代码,即可使用STM32F4的硬件FPU了,可以大大加快浮点运算速度。 4、Julia分形简介Julia集是一种在复平面上非发散点形成的分形点的集合。 例如,对于复变函数的一个通项公式, 假设这里的常数C总是小于2,当我们迭代次时,发现。那么很显然,之后的会变得越来越大,所以这样的点是发散的。同理,也存在无论迭代多少次都不会发散,这样的点就构成Julia集。然而,按照这种判断方法,我们不可能精确找出所有的非发散点。因为如果当我们迭代次时,仍然有,但是随着迭代次数继续增大,发散点总有一次会超过这个限制,而这个次数可能会很大,超过我们设置的迭代次数,所以这样的判断是不够准确的。但这不妨碍我们可以利用这种方法近似找出Julia集的点。因为随着的增加,这样判断出的点集会不断逼近Julia集,从而我们可以得到一个近似的Julia集合。具体思路为:设置迭代次数、收敛半径、次数和常数;设置一个复数点集为初始点集,带入公式计算;找出的点,记录这些点的位置矩阵;重复2、3步骤次;画出矩阵,即Julia集的图像。