STM32F4 HAL库串口同时收发代码卡死问题
cathy 在 提交
cathy 在 提交
demi 在 提交
一. 前言
有工程师反应说Keil 下无法使用STM32F4xx 硬件浮点单元, 导致当运算浮点时运算时间过长,还有一些人反应不知如何使用芯片芯片内部的复杂数学运算,比如三角函数运算。针对这个部分本文将详细介绍如何使用硬件浮点单元以及相关数学运算。
二.问题产生原因
1. ------对于Keil MDK Version 5 版本, 编译器已经完全支持STM32F4xx 的FPU(浮点运算单元),可以直接使用芯片内部的浮点运算单元。
2. ------对于Keil MDK Version 4 版本, 高版本v4,比如当前keil 官网可下载的v4.74.0.0 版本也已经支持
FPU,可以直接使用芯片内部浮点运算。但如果使用低版本v4,如v4.23.0.0 版本, 则需要对软件进行相应设置。
三. 如何解决问题
1. 查看手头Keil 版本是否支持FPU,最简单办法是进入Keil 调试界面直接查看0xE000ED88 地址单元数据,如果为0x00F00000, 则说明已经支持FPU,如下图所示:
2. 如果0xE000ED88地址数据为0x00000000,则需要做如下操作:
a. 在system_stm32f4xx.c文件中的systeminit()函数里面添加如下代码:
/* FPU settings------------------------------------------------------------*/
#if (__FPU_PRESENT == 1) &&(__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL<< 11*2)); /* set CP10 and CP11 Full Access */
#endif
b. 在工程选项(Project->Optionsfor target "XXXX")中的C/C++选项卡的Define 中加入如下的语句,见下图所示:
__FPU_PRESENT=1,__FPU_USED =1。
c. 这样编译时就加入了启动FPU 的代码,CPU 也就能正确高效的使用FPU 进行简单的加减乘除了。
3. 进一步说明使用芯片复杂数学运算使用
对于复杂运算,比如三角函数,开方等运算,需要如下设置:
a. 包含arm_math.h头文件。
b. 在工程选项的C/C++选项卡的define 中继续加入语句ARM_MATH_CM4。
c. 在工程选项的C/C++选项卡的define 中继续加入语句__CC_ARM。
以使用sin,cos 运算举例,需要调用arm_sin_f32()以及arm_cos_f32(),这两个函数定义在
arm_sin_f32.c 和arm_cos_f32.c中,需要在工程中加入这两个c 文件。
* 在 ST 库文件包中的文件目录如下:
\stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.1.0\Libraries\CMSIS\DSP_Lib\Sou
rce\FastMathFunctions
* 在keil 安装目录下的文件目录如下:
\Keil\ARM\CMSIS\DSP_Lib\Source\FastMathFunctions
当用到更多数学运算, 如开根号,三角运算,求绝对值等等,客户也可以直接在工程中加入ARM 中的数学运算库arm_cortexM4lf_math.lib,而不需要一个个文件的添加,
* 在 ST 库文件包中的目录如下:
\STM32F4xx_DSP_StdPeriph_Lib_V1.6.0\STM32F4xx_DSP_StdPeriph_Lib_V1.6.0\Libraries\CMSIS\Lib\ARM
* 在keil 安装目录下的文件目录如下:
\Keil\ARM\CMSIS\Lib\ARM
四. 结语
从测试效果看当使用了硬件浮点运算单元,数学计算变得简单高效,可以留给系统更多时间处理其他控制程序,有效提升系统效率,节省时间。
来源: STM32单片机
前言
在 STM32 开发中,库函数开发相比寄存器方式具有开发周期短、代码可读性好、便于移植等优点,而使用 Keil 环境的第一步就是新建工程。本文以 STM32F401CE 芯片为例,介绍使用标准库函数新建工程的步骤。
材料准备
• STM32F4xx 固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0.rar
• Keil-MDK
• 一点耐心
新建库函数工程注意事项
不同芯片在新建工程时的配置略有区别,主要体现在以下几点:
工程目标 Device 选择的芯片型号不同。
添加的启动文件不同。要根据芯片型号在 arm
目录下选择相应的 .s
文件。
C/C++ 选项卡的芯片型号宏定义不同。具体有哪些选择可在 stm32f4xx.h
头文件中的条件编译指令中找到。不确定选哪个的话可以根据芯片主频从 system_stm32f4xx.c
文件的 PLL 分频参数反推宏定义(要求对时钟树比较熟)。
工程所包含的外设库函数不同。MDK 会在编译时根据芯片型号宏定义进行寄存器映射,所以要对芯片所没有的外设库文件要排除编译(如文中的 fmc 和 fsmc),否则会报标识符未定义错误。
补充:如何确定芯片有无某个外设?
芯片数据手册中描述了芯片的所有资源,当想要了解具体某一型号芯片的外设时,应该查阅数据手册而不是参考手册(参考手册针对的是整个系列芯片的通用说明)。
Cortex-M4 新建库函数工程步骤
一、新建工程文件夹
新建一个文件夹 template
用于存放工程模板。
在 template
文件夹内分别新建 Doc
(存放文档)、User
(存放用户文件)两个文件夹。
在 User
文件夹中新建 inc
和 src
两个文件夹分别存放用户头文件和源文件。
二、复制库函数文件
1. 复制 Libraries 文件夹
打开固件库目录 STM32F4xx_DSP_StdPeriph_Lib_V1.4.0
, 复制 Libraries
文件夹到工程文件夹template
中。
2. 裁剪 Libraries 文件夹
由于固件库的 Libraries
文件夹是对整个 Cortex-M4 系列通用的,包含了一些项目所用不到的文件,为了节约空间,可以把用不到的多余文件删除。
删除 template\Libraries\CMSIS
目录下除 Device
和 Include
外的所有文件夹。
删除 template\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates
目录下除 arm
文件夹和 system_stm32f4xx.c
外的所有文件夹。
删除 template\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm
目录下除startup_stm32f401xx.s
外的其余启动文件。
固件库里类似 Release_Notes.html
的说明文件也可以删了。
3. 添加文件到 User 文件夹
往 template\User
目录中添加以下三个库文件,并新建 main.c
文件。
打开 STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates
目录,找到 stm32f4xx_conf.h
、stm32f4xx_it.h
、stm32f4xx_it.c
三个文件。
复制 stm32f4xx_conf.h
文件到 template\User\inc
目录。
复制 stm32f4xx_it.h
文件到 template\User\inc
目录。
复制 stm32f4xx_it.c
文件到 template\User\src
目录。
在 template\User\src
目录中新建 main.c
文件,并编写以下主函数代码保存。
#include "stm32f4xx.h"
int main(void)
{
while (1);
}
其中 stm32f4xx_conf.h
文件包含了所有库函数头文件,stm32f4xx_it.c
文件用于编写中断服务函数,便于统一管理,使工程结构更加规范。
完成以上工作后整个工程目录结构如下图:
三、Keil 新建工程
把工程文件夹建好并复制相关库文件后,就可以打开 Keil 软件新建工程了。
1. 新建工程
打开 Keil 软件,点击 Project 菜单下的 New uVision Project 选项新建工程,并保存到新建的工程文件夹 template
中。
2. 选择芯片型号
在弹出的芯片选型窗口中选择目标板的芯片型号,这里选 STMicroelectronics(ST公司)下的 STM32F401CE(根据具体硬件选择)。
关掉弹出的组件添加窗口,因为我们采用的是手动添加库文件的方式。
3. 新建工程分组
点击「品字形」按钮打开工程管理界面,最左侧是工程名称,可以给工程改个名,然后在中间组管理中点虚框图标新建 CMSIS、STM32F4xx_StdPeriph_Driver、USER、DOC 四个分组,对应工程文件夹中的分类。
4. 添加文件到分组
依然是在工程管理界面下,这一步要做的事情是把准备好的库文件添加到 Keil 工程中,具体操作如下:
往分组 CMSIS 中添加 system_stm32f4xx.c
系统配置文件和 startup_stm32f401xx.s
启动文件。
往分组 STM32F4xx_StdPeriph_Driver 中添加 Libraries\STM32F4xx_StdPeriph_Driver\src
目录下的所有 .c
文件。
往分组 USER 中添加文件 main.c
和 stm32f4xx_it.c
。
四、工程配置
点击「魔术棒」按钮打开工程选项界面,进行必要的工程配置。
1. Target 选项卡配置
勾选 Use Micro LIB 选项,为了在工程中使用 printf() 函数。
2. Output 选项卡配置
如需生成 .hex
文件,则需勾选 Create HEX File 选项。
3. C/C++ 选项卡配置
在「预处理符号」Preprocessor Symbols 下的 Define 一栏中添加 STM32F401xx
和USE_STDPERIPH_DRIVER
两个宏定义(用逗号分隔)。
在 Include Paths 中添加以下头文件路径,注意要具体到头文件上一层目录。
.\Libraries\CMSIS\Device\ST\STM32F4xx\Include
.\Libraries\CMSIS\Include
.\Libraries\STM32F4xx_StdPeriph_Driver\inc
.\User\inc
五、下载器配置
依然是在工程选项界面下,进行下载器配置
Debug 选项卡配置
在右上角选择所使用的调试器,根据实际情况选择。这里我用的是 ST-Link,选 ST-Link Debugger。
点击 setting 按钮,在 Falsh Download 选项卡中勾选 Reset and Run 选项,确保程序下载后能自动复位运行,最后点击确定按钮保存所有的工程配置。
六、最后小整改
此时编译整个工程依然会有大量错误,为了能使工程顺利编译最后还要稍作修改,具体如下:
取消编译 fmc 和 fsmc 库文件
查阅数据手册得知 STM32F401 系列芯片没有 fmc 和 fsmc 外设,所以去掉 fmc 和 fsmc 部分的库文件。
在工程文件视图下展开 STM32F4xx_StdPeriph_Driver 分组,选中 stm32f4xx_fmc.c
文件,右键调出 Options for File stm32f4xx_fmc.c 窗口,取消勾选 Include in Target Build 选项,排除stm32f4xx_fmc.c
文件参与编译。stm32f4xx_fsmc.c
用文件同样方式处理(或者直接从工程中移除这两个文件)。
修改 stm32f4xx_it.c 文件
删除 stm32f4xx_it.c
文件 32 行的代码 #include “main.h”(因为没有写这个文件)。
删除 stm32f4xx_it.c
文件 144 行的代码 TimingDelay_Decrement();(滴答定时器延时相关,暂时用不到)。
七、编译工程、下载验证
最后点击编译按钮,如果工程配置正确就会看到令人愉悦的 0 Error(s), 0 Warning(s) ,通过下载器连接板子和电脑,烧写程序检验成果,见证令人激动的时刻吧!
转自: 开源嵌入式
意法半导体两个新的微控制器产品线提高STM32F4基本型产品线高端产品的能效、功能集成度和设计灵活性,满足高性能嵌入式设计的技术需求。这些STM32最新微控制器的工作温度高达125°C ,主打始终运行的传感器和通用工业设备,为STM32F1应用提供一个稳健可靠且高成本效益的系统升级方案 。
STM32F413和加密功能增强版STM32F423集成最高1.5MB的闪存和320KB的SRAM,这两款产品在STM32F4基本型产品线中配置最为突出,其丰富的音频功能包括串行音频接口(SAI),增强型语音采集接口集成多通道数字 Sigma-Delta调制滤波器(DFSDM),可实现低功耗声音定位和波束成形。新产品还集成丰富的外设接口,包括两个12位数模转换器(DAC)、多达10个UART接口和3个CAN 2.0B Active接口。加密增强版STM32F423还增加一个硬件随机数生成器(TRNG)和AES-256算法硬件加速器。
作为STM32F4基本型产品线的高端产品,新微控制器首次引入100MHz双模四线SPI外部存储器串行接口和连接外部SRAM、PSRAM或NOR闪存的16位灵活存储控制器(FMC),以及最高16位QVGA或8位WQVGA液晶显示器接口和USB OTG接口。其中USB OTG内置链路电路管理(LPM)和双电压轨,节省外部电平转换器件。
此外,两个产品线都新增RAM访存机制,通过指令数据总线(I/D)和系统总线(SBUS)连接RAM1(256KB)和RAM2(64KB)两个独立内存,从而将资源冲突风险降至最低。新增DMA数据批处理模式(BAM+)利用RAM1和RAM2两个独立内存区处理指令和数据,处理效率极高,特别适合于传感控制器相关应用。
高处理性能兼备同级领先的能效,STM32微控制器整合100MHz 125DMIPS/339 EEMBC® CoreMark® ARM® Cortex®-M4处理器内核与意法半导体的Dynamic Efficiency节能技术,工作电流大幅降低,只有 112µA/MHz。Dynamic Efficiency节能技术包括ST ART Accelerator™ 自适应实时(ART)加速器和1.7V最低电源电压,ART可实现闪存代码执行无等待状态,而最低电源电压可让始终连接的设备最大限度延长电池续航时间。
NUCLEO-F413ZH开发板用户可立即开始项目研发。这款STM32 Nucleo-144开发板配备ST-LINK/V2-1调试器/编程器、软件库和例程,可直接使用ARM mbed™在线开发资源。STM32F413探索套件计划在2017年初发布,将为客户应用开发提供独特创新的支持服务。
STM32F413和STM32F423即日上市,从4.039mm x 3.951mm WLCSP81到144引脚LQFP,提供七种不同的封装。 NUCLEO-F413ZH开发板即日起开售。
详情访问 www.st.com/stm32f4