AT32 MCU

概述

二维码、条形码相信大家都非常熟悉了,条码技术已经广泛应用于我们生活当中。微信扫二维码、支付宝二维码付款、商品条形码、超市储物柜条形码等。但是由于二维码复杂度,目前识别二维码的设备还不够丰富。对此本文档利用带浮点运算的、大容量SRAM、高主频芯片AT32F403A,调用雅特力提供的Artery_QR二维码解码库在AT-START-F403A开发板上来实现二维码、CODE128\CODE39\I25\EAN13条码扫描识别。

一维条形码、二维码简介

一维条形码

一维条码是由一组规则排列的条、空以及对应的字符组成的标记,“条”指对光线反射率较低的部分,“空”指对光线反射率较高的部分,这些条和空组成的数据表达一定的信息,并能够用特定的设备识读,转换成与计算机兼容的二进制和十进制信息。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用。

一维条码只是在一个方向(一般是水平方向)表达信息,而在垂直方向则不表达任何信息,虽然提高信息录入的速度,减少差错率,但是其空间利用率较低,数据容量较小。

二维码

二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。

二维码由于自身设计特点,可包含更多的信息量,编码信息范围更广,并且由于二维码具有一定的校 验功能等。同时还具有对不同行的信息自动识别功能、以及处理图形旋转变化点,二维码译码更加准确,其误码率为千万分之一。下图为QR二维码构造框图。

“图1.
图1. QR码符号的结构

1) 位置探测图形、位置探测图形分隔符:用于对二维码的定位,对每个QR码来说,位置都是固定存在的,只是大小规格会有所差异;这些黑白间隔的矩形块很容易进行图像处理的检测。

2) 定位图形:这些小的黑白相间的格子就好像坐标轴,在二维码上定义了网格。

3) 格式信息:表示该二维码的纠错级别,分为L、M、Q、H;

4) 数据区域:使用黑白的二进制网格编码内容。8个格子可以编码一个字节。

5) 版本信息:即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40),每一版本符号比前一版本每边增加4个模块。

6) 纠错码字:用于修正二维码损坏带来的错误。

QR二维码解码流程

了解了QR二维码的构造,下面我们来了解解码流程,QR二维码的解码流程如下图2所示。

“图2.
图2. QR码译码步骤

1) 定位并获取符号图像。深色与浅色模块识别为“0”与“1”的阵列。
2) 识读格式信息(如果需要,去除掩模图形并完成对格式信息模块的纠错,识别纠错等级与掩模图形参考)。
3) 识读版本信息,确定符号的版本。
4) 用掩模图形参考,从格式信息中得出对编码区的位图进行异或处理消除掩模。
5) 根据模块排列规则,识读符号字符,恢复信息的数据与纠错码字。
6) 用与纠错级别信息相对应的纠错码字检测错误,如果发现错误,立即纠错。
7) 根据模式指示符和字符计数指示符将数据码字划分成多个部分。
8) 最后,按照使用的模式译码得出数据字符并输出结果。

二维码的解码流程具体实现的步骤和方法是比较复杂,涉及到了QR二维码的标准规则及相对应的算法,知识点很多,大家感兴趣的话可以自己多去网上查阅资料了解。

QR decode快速使用方法

硬件资源

1) LCD 9341
2) 外接Buzzer(PE15)
3) Arduio
4) AT-START-F403A V1.0实验板
5) USB
6) Sensor BF3901
7) USER key

“图3.
图3. 硬件资源图

注:1.该demo是基于AT32F403A的硬件条件,若使用者需要在AT32其他型号上使用,请修改相应配置即可。

2. 供电部分:使用电源供电,或USB线供电(勿使用Link单独供电)。

QR USB HID keyboard Demo使用

1) 打开QR decode project源程序,编译后下载到实验板。

2) 由于该demo运行占用了169K的SRAM,所以在使用demo前需开启芯片的扩展SRAM功能(扩展为224KB),为了方便用户使用,demo已经在启动文件中开启了此项功能。

“AT32

3) 连接USB线到PC,通过上位机可以识别到该设备:HID Keyboard Device(标准键盘输入模式,无须驱动)
4) 根据LCD显示信息,查看BF3901初始化是否成功,并按下USER key按键,开启QR解码侦测。
5) 将摄像头BF3901对准二维码,LCD显示当前抓取的摄像头图像,此时芯片一直在运算QR解码。
6) 若芯片一直没有解析到二维码,一维码数据,则会一直运行下去,直到解析到数据,如图4所示。蜂鸣器会响一下,并且将解析到数据通过USB传输到PC,如图5所示。
Ps. QR decode默认只侦测二维码,若要侦测全部图码等,需开启宏定义:Detect_all。

“图4.
图4. LCD显示解析数据

“图5.
图5. USB传到PC数据

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 118

传统设备数据传送依靠有线USB将信息传输至主机,经常面临多条线材摆放凌乱、布线空间及操控范围受限等问题。基于科技革新速度不断加快、技术推陈出新,IoT概念普及化,多数设备已由有线逐渐转变为无线。

雅特力超值型AT32F415与无线型AT32WB415系列采用强大的32-bit ARM® Cortex®-M4内核,在SoC单芯片系统上,整合多种通讯接口,如USB OTG、UART、SPI、I2C、SDIO等,搭配RF射频进行信息传输,实现USB HID无线传输功能,无须额外安装驱动程序,即可帮助用户快速完成信息传送和保持文件完整性。本文将以客户实际应用案例「血压计导入AT32F415/AT32WB415系列MCU连接USB HID应用」为例,介绍AT32 MCU在USB HID上的应用。

AT32 MCU提供一个高精度、高性价比的血压计应用解决方案,当血压计测量脉搏率、收缩压和舒张压时,压力传感器精确检测到血压信号强度,如下图所示。

血压计量测信息传送情境对照图:

“导入AT32
导入AT32 MCU搭配RF射频实现无线传输

AT32F415 / AT32WB415系列连接USB HID应用方案特点

  • 采用ARM® Cortex®-M4内核,主频高达150MHz,内建大容量256KB Flash和32KB SRAM,并提供软件开发工具,以便进行产品系统校正、更新和储存用户信息。

  • 支持UART、SPI、 I2C 、SDIO、USB OTG、CAN多种通讯界面,同时搭配RF无线射频组件,支持蓝牙无线传输功能(适用AT32WB415系列方案二),实现智能应用与产品功能价值。

AT32F415 / AT32WB415系列导入血压计产品附加优势

  • 支持12位高精度ADC及CMP,从压力传感器采集信号中分辨袖带和脉搏波信号,精准提取脉搏波信号,经滤波电路后,透过A/D转换电路,输出至CPU,无须添加额外组件,大幅降低开发成本和缩短量产时程。

  • 支持高速GPIO/SPI驱阿动LCD显示屏,流畅显示血压量测读值状态。

  • 支持蓝牙2.4GHz频段,Rx灵敏度可达到-97dBm,Tx值介于-20dBm~+4dBm之间,有效传输范围超过30m,数据传输最快可达到2Mbps,实现无线传输低延迟(适用AT32WB415系列方案二)。

“AT32

更多参考文件信息,详见雅特力官网:
https://www.arterychip.com/en/product/AT32WB415.jsp

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 30

概述

USB接口的可热插拔特性会容易受静电损坏器件,造成死机、烧板、掉线等。在USB接口上设计ESD保护是必要的,USB ESD设计需要满足JS-001-2017(HBM)和IEC61000-4-2两个标准。HBM要求设备USB接口能够承受高达2 kV的放电,图1和表1为JS-001-2017标准测试波形和等级分类。图2和表2为IEC61000-4-2标准测试波形和等级分类。

“图1.
图1. JS-001-2017标准测试波形

“表1.
表1. JS-001-2017标准等级分类

“图2.
图2. IEC61000-4-2标准测试波形

“表2.
表2. IEC61000-4-2标准等级分类

ESD保护设计要点

在USB接口设计时建议加入ESD保护器件并加入VBUS侦测电路检测过压。设计要点列出如下:

  • ESD保护器件应尽量靠近USB插座接口放置(ESD进入点)
  • VBUS、USB数据线(USB_D+/USB_D-)、ID(若为OTG)都要进行ESD保护

“图3.
图3. USB ESD保护电路
  • VBUS的走线尽量远离D+/D-
  • USB插座金属壳要与设备外壳地可靠连接
  • 设备不需要VBUS提供电源时,可通过电阻分压后连接于AT32的非5 V耐压的一般GPIO,或直接连接于5 V耐压的GPIO,作为VBUS侦测信号

“图4.
图4. VBUS侦测电路

ESD保护器件的选择

USBFS的传输速率达到12 Mbps,一般选用TVS阵列管来实现ESD防护。当ESD事件到来时,TVS中的二极管会正向导通,使得瞬态电流绕过敏感的CMOS器件,将瞬态高压降低到钳位电压值,进而实现对接口电路的保护。

钳位电压

在ESD事件到来时,保护器件对高压脉冲钳制到钳位电压,并且分流大部分脉冲电流到地,以保护后端敏感器件。但是,仍然会有残余电流流入受保护器件,ESD事件期间的峰值电流是通过ESD保 护器件的分流电流与流入受保护器件的残余电流之和。受保护器件承受的功率取决于ESD保护器件的钳位电压和流入的残余电流。

钳位电压可用以下公式计算:

钳位电压(VCL)=VBR+Io(残余电流)x Ro(受保护器件电阻)

在选择ESD保护器件钳位电压时,设计人员必需了解使用何种测试设置来确定数值。根据IEC61000-4-2 Level 4标准,ESD脉冲具有少于1 ns的上升时间和小于100 ns的持续时间,以及30 A峰值电流。具有5 V钳位电压的ESD保护二极管可能在实际的ESD测试中出现超过30 V的钳位电压。如果不了解这一点,设计人员可能会仅仅根据数据表中最低钳位电压来选择ESD保护器件。

信号完整性

在数据传输系统中要求确保接收器达到一定的信号完整性水平,信号的上升、下降时间是由整个传输路径阻抗来限制的,并且结合了接口的所有寄生电容。这些寄生电容可能由不匹配的PCB线路、USB插座引脚或其它并联电容引起,因此要求ESD保护器件的电容必须小,并且也要能提供足够的ESD防护能力。

关于雅特力

雅特力科技于2016年成立,是一家致力于推动全球市场32位微控制器(MCU)创新趋势的芯片设计公司,专注于ARM ®Cortex®-M4/M0+的32位微控制器研发与创新,全系列采用55nm先进工艺及ARM® Cortex®-M4高效能或M0+低功耗内核,缔造M4业界最高主频288MHz运算效能,并支持工业级别芯片工作温度范围(-40°~105°)。

雅特力目前已累积相当多元的终端产品成功案例:如微型打印机、扫地机、光流无人机、热成像仪、激光雷达、工业缝纫机、伺服驱控、电竞周边市场、断路器、ADAS、T-BOX、数字电源、电动工具等终端设备应用,广泛地覆盖5G、物联网、消费、商务及工控等领域。

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 352

概述

本文档介绍通过使用Eclipse,ARM-GCC编译工具,GNU-ARM插件,Jlink,ATLink等资源来调试AT32系列芯片。

本文档主要介绍:

  • Eclipse调试环境安装
  • Eclipse template工程
  • Eclipse编译配置
  • Eclipse调试配置

环境说明:本文档安装说明基于WINDOWS 7 x64系统下实现,使用
AT32Fxx_Firmware_Library\project\at_start_xx\templates\eclipse_gcc

下的工程进行说明。

本文档所使用的软件都打包在AT32_Eclipse_Packet.zip,直接解压即可安装运行。
AT32_Eclipse_Packet.zip包含文件:

“图1.
图1. AT32_Eclipse_Packet.zip包含文件

Eclipse调试环境安装

首先要明确需要安装哪些软件,如下是需要安装的软件:

  • Eclipse IDE for C/C++ Developers
  • GNU ARM Eclipse插件
  • GCC ARM编译器
  • GNU ARM Eclipse Build Tools安装(make,rm等工具)

下面将详细介绍软件的安装部分。

Eclipse IDE for C/C++ Developers安装

Eclipse有多个版本,我们只需下载C/C++的版本,下载最新版本,AT32_Eclipse_Packet.zip 包含有一个可以使用的版本eclipse-cpp-2019-06-R-win32-x86_64.zip。
下载地址:

http://www.eclipse.org/downloads/eclipse-packages/

“图2
图2 Eclipse下载页面

下载完成后直接解压eclipse-cpp-2019-06-R-win32-x86_64.zip,这里我们直接点击eclipse.exe就可以运行Eclipse,但此时还不能进行代码调试,需要进一步安装一下插件。

GNU ARM Eclipse插件安装

下载最新的GNU ARM Eclipse插件:ilg.gnumcueclipse.repository-4.5.1-201901011632.zip并解压。
AT32_Eclipse_Packet.zip包含有一个可以使用的版本ilg.gnumcueclipse.repository-4.5.1-201901011632.zip。

网络下载地址:https://github.com/gnu-mcu-eclipse/eclipse-plugins/releases

开始安装:

1. 打开Eclipse Help->Install New Software.

“图3.
图3. 进入Install New Software页面

2. 点击“Add...”

“图4.
图4. 选择Add

3. 添加一个本地插件,也可以使用网络路径自动下载安装

“图5.
图5. Add Respository

4. 选择本地插件解压目录,点击”Add”

“图6.
图6. 选择插件解压目录

5 勾选所有的插件,“Next“

“图7.
图7. 勾选插件

6. 安装完成 “Next“

“图8.
图8. 安装完成

“图9.
图9. accept the license agreement

7. “Install anyway”

“图10.
图10. Install anyway

8. 重启Eclipse

“图11.
图11. 重启Eclipse

ARM GCC编译工具链安装

下载最新的编译工具链gcc-arm-none-eabi-8-2019-q3-update-win32-sha2.exe
AT32_Eclipse_Packet.zip包含有一个可以使用的版本gcc-arm-none-eabi-8-2019-q3-update-win32-sha2.exe。

下载地址:https://launchpad.net/gcc-arm-embedded/+download

开始安装:

1. 选择语言

“图12.
图12. Install

2. 安装向导,点击“下一步”

“图13.
图13. 安装向导

3. 许可证协议,点击”我接受“

“图14.
图14. 接受许可证协议

4. 选择安装位置,安装到默认位置,点击“安装“,进入安装过程

“图15.
图15. 安装过程

5. 安装完成界面,要将”Add path to environment variable“选项勾上,会自动添加到环境变量之中,否则需要手动添加环境变量。

“图16.
图16. 选择Add path to environment variable

6. 安装完成之后在弹出的命令窗口中输入 arm-none-eabi-gcc –v,会显示一些版本信息,表示安装成功。

“图17.
图17. 安装结果查看

GNU ARM Eclipse Build Tools安装

此部分主要是安装make,rm等命令。

下载地址:

https://sourceforge.net/projects/gnuarmeclipse/files/Build Tools/
AT32_Eclipse_Packet.zip包含有一个可以使用的版本gnuarmeclipse-build-tools-win64-2.6-201507152002-setup.exe
,或者下载其它适用版本。

1. 运行安装包

“图18.
图18. 运行安装包

2. 选择安装路径

“图19.
图19. 选择安装路径

3. 安装完成 需要重启Eclipse

“图20.
图20. 安装完成

安装Jlink

需要将AT32系列芯片拷贝到Jlink目录,目前可使用ICP完成拷贝工作

1. Jlink安装(略)

此部分按照下载最新的Jlink进行安装即可

2. 算法文件拷贝

为了Jlink能够识别和下载程序到AT32芯片,可以将AT32芯片的下载算法拷贝到Jlink目录中,这里有个简单的方法是使用最新的ICP,直接运行ICP,ICP会将相应的AT32算法拷贝的Jlink目录。

template工程配置与编译

本章介绍如何使用template工程,工程路径:
AT32Fxx_Firmware_Library\project\at_start_xx\templates\eclipse_gcc
本章以AT32F437为例说明工程的配置与编译

打开template工程

1. 选择File→Open Projects from File System..

“如何使用Eclipse插件调试AT32

2. 在Import source中选择路径,然后点击Finish。AT32F437xx template路径如下,其它系列路径类似

xxx\AT32F435_437_Firmware_Library\project\at_start_f437\templates\eclipse_gcc\template

“如何使用Eclipse插件调试AT32

3. 工程打开之后看到一个template的项目工程如下

“如何使用Eclipse插件调试AT32

编译

在编译过程中,需要对头文件的路径,以及一些芯片宏的定义,此部分在template工程有对应都有配置。配置包括如下内容

  • 芯片配置
  • 头文件路径配置
  • 宏定义配置
  • 链接脚本文件配置(不同型号之前ld文件会涉及到要修改)

1. 右键选择template工程,选择Build Project

“如何使用Eclipse插件调试AT32

2. 编译结束之后会生成template.elf

“如何使用Eclipse插件调试AT32

3. 对于同一系列不同型号的配置,只需要修改ld文件即可,在下图的setting中修改。另外,其它如果要修改的如头文件路径等也是在下图setting中对应选项中修改即可。

“如何使用Eclipse插件调试AT32

“如何使用Eclipse插件调试AT32

“如何使用Eclipse插件调试AT32

“如何使用Eclipse插件调试AT32

调试

本章分别描述用jlink和atlink调试at32系列芯片。

Jlink调试

本部分主要说明调试的一些配置:

  • Jlink配置
  • GDB配置
  • SVD外设寄存器配置

Debug配置

1. “Run”→”Debug Configurations”→”GDB SEGGER J-Link Debugging”→“New Configuration”
建立一个新的Debug配置,配置JlinkGDBServerCL,Device name根据需要调试的具体芯片型号填写,例如AT32F437ZMT7,AT32F413RCT7,AT32F415RCT7等

“如何使用Eclipse插件调试AT32

2. 配置GDB,选择GCC安装目录下的arm-none-eabi-gdb.exe

3. SVD Path选择,用于Debug寄存器的描述,这里可以直接使用keil下的svd文件,当安装了AT32的keil Packet之后,会自动将svd拷贝到keil目录下。

“如何使用Eclipse插件调试AT32

4. Debug配置完成→“Apply”→”Debug”进入调试

“如何使用Eclipse插件调试AT32

AT-Link调试

本部分主要说明使用OpenOCD+Eclipse+ATLink来调试AT32。关于ATLink的使用说明请参考《AT-Link_User_Manual_SC.pdf》

本节主要说明如下内容:

  • Eclipse Openocd配置
  • GDB配置
  • SVD 外设寄存器配置

在解压OpenOCD包文件<<OpenOCD_V2.x.x.zip>>
包含5个目录,bin文件下为可执行exe,scripts目录为配置文件目录

OpenOCD包含如下目录文件:

“如何使用Eclipse插件调试AT32

Debug 配置

1. 配置OpenOCD路径,Project→Properties→MCU→OpenOCD Path

“如何使用Eclipse插件调试AT32

2. “Run”→”Debug Configurations”→”GDB OpenOCD Debugging”→“New Configuration”建立一个新的Debug配置

可配置项如下:

openocd的可执行文件路径:D:\OpenOCD\bin\openocd.exe
Config options:-s ${openocd_path}\scripts -f ./interface/atlink.cfg -f ./target/at32f437xM.cfg
atlink.cfg表示使用atlink调试工具,at32f437xM.cfg表示at32f437 FLASH有4032KB的型号,其它AT32F437的型号可统一使用at32f437xx.cfg。对于不同的系列,如AT32F403A,AT32F415等此处对应的target/xxx.cfg需要做对应的修改。

“如何使用Eclipse插件调试AT32

3. 配置SVD文件

可下载对应型号的SVD文件用于Debug

“如何使用Eclipse插件调试AT32

4. Debug配置完成→“Apply”→”Debug”进入调试

“如何使用Eclipse插件调试AT32

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 202

概述

对于AT32 MCU不同的系列,因为功能改进等原因,安全库区的配置使用可能有所差异。用户使用OTP功能主要目的是需要将一些特殊数据保存其中,在需要时可以读取,并且不允许修改和擦除。目前AT32 MCU的安全库区根据内部结构可以分为以下几种区域

  • 仅允许I-Code总线读取指令的区域(I-BUS area)

  • 仅允许D-Code总线读取数据的区域(D-BUS area)

  • 允许I-Code和D-Code总线读取的唯读区域(READ-ONLY area)

只要包含允许D-Code总线访问的区域,其特点就是允许读取数据,不允许擦除或者修改(除非原应用设计者输入自定义秘钥KEY解除slib进行全部擦除),达到OTP功能的效果。所以只要设计者将需使用OTP功能的数据保存在允许D-Code总线访问的安全库区域,就能达到只允许读取,不允许擦除和修改的目的。

操作说明

根据AT32 MCU的安全库区结构划分,必须将要保存的OTP数据放置在允许D-Code总线访问的区域(D-BUS area或者READ-ONLY area)。

通过代码操作

Demo中403A的AT-START开发板上,演示如何开启slib,并将数据放在slib的D-Code区域。

执行流程及说明:

1) 按USER键触发;

2) 如果程序首次执行(MCU处于slib disable状态),顺序往下执行步骤3,如果程序非首次运行(MCU处于slib enable状态),跳转到流程步骤7进行;

3) 配置slib,包括password和range;

4) 写入OTP数据到slib的D-code区域;

5) LED2/3/4会同时亮起;

6) 按RESET键复位,重新执行流程步骤1;

7) 此时OTP功能生效,因为slib已开启,无法再次配置slib,也不能擦除或者修改对应区域数据,LED2亮起;

8) 按USER键触发;

9) 关闭slib(当程序在flash运行时,执行该步骤会触发flash mass erase,程序无法再继续运行),执行系统复位,结束演示。

注意事项:

  • demo中定义256字节数据作为OTP数据,选择的slib D-Code区域是对应系列MCU可设置slib范围的最后一个sector。关于不同系列MCU的slib可设置范围,可以参看对应的AT32各系列安全库区(SLIB)应用指南。
  • 演示完成后,关闭slib是为了方便后续MCU调试使用。真实应用时slib OTP功能开启会不再disable。

通过ICP/ISP等工具操作

通过Artery的ICP/ISP等上位机软件可以更方便的实现该功能,在烧录项目文件时,将需保存的OTP数据一起烧录,完成slib OTP功能。

以ICP工具在线烧录为例,步骤如下:

1) 添加对应烧录文件:LED.bin为项目文件,OTP_DATA.bin为需要保存的OTP数据;

“图1.
图1. ICP添加文件

2) 配置对应slib参数,开始下载;

“图2.
图2. ICP下载配置

3) 验证OTP功能:执行主存储擦除,擦除后读取OTP数据存储位置,数据无法擦除,仍然有效。

“图3.
图3. 验证结果

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 51

近年来,国产MCU不断发展,雅特力作为MCU“芯”势力强势崛起,AT32 MCU逐步向中高端市场发力,产品已广泛应用在5G、物联网、消费、商务及工控等领域。复杂的产品应用使得设计规模越来越大,制造工艺越来越复杂,依靠手工难以完成相关工作。

EDA作为关键的芯片设计工具,也是MCU生态链中的重要一环,通过计算机强大的辅助设计能力,可以大大提高电路设计的效率和准确性。雅特力不断建设和完善AT32 MCU开发生态,于立创EDA平台自建器件封装库,目前分别在立创EDA标准版和专业版中创建了共42种器件型号封装可供用户使用,并将根据AT32 MCU产品型号不断完善更新资源。

“▲AT32器件封装库列表"

“▲AT32器件封装库列表"
▲AT32器件封装库列表

操作指南

为了方便大家操作,雅特力精心整理了操作手册,教大家如何在立创EDA标准版和专业版器件封装库中查找、辨别区分、放置雅特力官方制作提供的AT32系列器件封装(原理图和PCB封装)。

由于器件型号较多,器件封装的命名中使用带有“x”字样,用来代表内存的空间大小,用户可以根据最终使用的芯片型号修改“x”字位。

以下将以AT32F413CxU7系列(QFN48 6x6mm封装)为例来进行操作演示,其它型号操作方法与此类似。

立创EDA标准版操作流程

立创EDA包括标准版和专业版,专业版相较于标准版拥有较多的附加功能,但对于小规模的电路设计而言,标准版功能已完全可以满足需求。

浏览器输入网址www.lceda.cn,打开“嘉立创EDA编辑器”,选择“标准版”进入界面。

“立创EDA导入雅特力器件封装库,AT32

依照下图步骤查找与辨别雅特力器件封装,最后在检索结果中确认“所有者”、“描述”两个栏位。

所有者:Artery
描述:由官方提供

“立创EDA导入雅特力器件封装库,AT32

在原理图中,选中器件后可查看器件基本信息,如右侧属性栏所示。

“立创EDA导入雅特力器件封装库,AT32

在PCB图中,选中器件或某个焊盘后可查看器件和尺寸相关信息,如右侧属性栏所示。

“立创EDA导入雅特力器件封装库,AT32

立创EDA专业版操作流程

如果标准版无法满足设计需求,则可以选择功能更加全面的专业版。点击“专业版”进入编辑界面。

“立创EDA导入雅特力器件封装库,AT32

专业版可通过两种方法查找与辨别雅特力器件封装,方法一如下图步骤,最后在检索结果中确认“描述”这一栏位。

描述:由官方提供

“立创EDA导入雅特力器件封装库,AT32

方法二如下图步骤,最后在检索结果中确认“所有者”、“描述”两个栏位。

所有者:Artery
描述:由官方提供

“立创EDA导入雅特力器件封装库,AT32

在原理图中,选中器件后可查看器件基本信息,如右侧属性栏所示。

“立创EDA导入雅特力器件封装库,AT32

在PCB图中,选中器件或某个焊盘后可查看器件和尺寸相关信息,如右侧属性栏所示。

“立创EDA导入雅特力器件封装库,AT32

立创EDA的加持为AT32 MCU提供了高效开发支持,进一步完善了雅特力开发生态体系,同时为工程师带来便利性,加速了产品开发设计流程!

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 25

AT32定时器说明

定时器框架介绍

定时器由一个16位的自动装载计数器组成(TMR2和TMR5较为特殊,其自动装载计数器为32位),它由一个可编程的预分频器驱动。它适合多种用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较、PWM、嵌入死区时间的互补PWM等)。

使用定时器预分频器和CRM时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。

“图1.
图1. 通用定时器的框图

定时器由四个主要部分组成(见图1)。第一部分时钟单元。此单元提供定时器的时钟驱动。第二部分时钟基单元,此单元提供定时器计数功能。第三部分输入捕获,此单元允许输入信号进入定时器模块。第四部分输出比较,此单元将定时器整合后的PWM输出。

定时器一般配置步骤

1) 时钟使能。

crm_periph_clock_enable(CRM_TMR2_PERIPH_CLOCK, TRUE);
2) 初始化定时器参数,设置自动重装值,分频系数,计数方式等。

在库函数中,定时器的初始化参数是通过初始化函数tmr_base_init()及tmr_cnt_dir_set()实现的:
void tmr_base_init(tmr_type* tmr_x, uint32_t tmr_pr, uint32_t tmr_div);

其中,第一个参数是确定是哪个定时器,这个比较容易理解。第二个参数tmr_pr是定时器计数的周期值。第二个参数tmr_div是定时器的分频系数。
void tmr_cnt_dir_set(tmr_type *tmr_x, tmr_count_mode_type tmr_cnt_dir);

其中,第一个参数是确定是哪个定时器,第二个参数tmr_cnt_dir为定时器的计数模式(向上,向下,中央对齐)。

特别地,增强模式是TMR2和TMR5独有的功能。tmr_32_bit_function_enable()为增强模式使能(Plus Mode Enable)函数。开启TMRx增强模式,该模式下TMRx_CVAL,TMRx_PR,TMRx_CxDT由16位扩展为32位。

void tmr_32_bit_function_enable(tmr_type *tmr_x, confirm_state new_state);

当需要配置时钟除频参数时(注意和 TMR_DIV 的区别,配置滤波、死区时间时需配置该参数),会使用到tmr_clock_source_div_set()函数;当需要配置重复周期寄存器时(高级定时器TMR1/TMR8/TMR15才有),会使用到tmr_repetition_counter_set()函数。本例程不使用这两个函数,仅做简要介绍。

void tmr_clock_source_div_set(tmr_type *tmr_x, tmr_clock_division_type tmr_clock_div);
void tmr_repetition_counter_set(tmr_type *tmr_x, uint8_t tmr_rpr_value);

3) 设置TMRx_ IDEN允许更新中断。

void tmr_interrupt_enable(tmr_type *tmr_x, uint32_t tmr_interrupt, confirm_state new_state);
这里着重描述参数tmr_interrupt,它是用来指明我们使能的定时器中断的类型,定时器中断的类型有很多种,包括更新中断,触发中断,以及输入捕获中断等等。

4) TMRx中断优先级设置。

调用nvic_irq_enable()函数即可。

5) 允许TMRx工作,也就是使能TMRx。

void tmr_counter_enable(tmr_type *tmr_x, confirm_state new_state);

6) 编写中断服务函数。

规格说明

AT32 PWM高频测试说明

“图2.
图2. 高频测试原理框图

测试高频信号时,将高频信号输入作为定时器TMR2的时钟源(如上图所示),驱动定时器TMR2的 Counter计数,使用另一个定时器做时钟基准,例如每隔1s,获取TMR2的Counter变化值,则TMR2的变化值即为高频信号的频率值。

使用两个定时器,其中一个定时器为TMR2(这里选取TMR2的原因在于其可以通过设置TMRx_CTRL1中的PMEN位,开启TMRx增强模式,该模式下TMRx_CVAL,TMRx_PR,TMRx_CxDT由16位扩展为32位),测试高频时,有利于Counter计数,不容易产生溢出。这样做的好处在于,既可以测试高频信号:最高50MHz(受限于I/O口的最高频率),且没有频繁产生中断,代码也有冗余,去处理客户任务。

使用此方法测试的频率范围在:50MHz到1Hz(TMR2的工作频率为240MHz)。

注意:增强模式是TMR2和TMR5独有的功能,使用不支持增强模式的其他TMR,或使用不含有增强模式TMR的AT32时,测试频率会受限。

AT32 PWM低频测试说明

“图3.
图3. 低频测试原理框图

测试低频信号时,将低频信号输入作为定时器TMR2的捕获输入(如上图所示),触发TMR2的输入捕获中断,利用TMR2工作时钟除以两次输入捕获之间Counter变化值,即可得到低频信号频率值。

这里定时器为TMR2(这里选取TMR2的原因在于其可以通过设置TMRx_CTRL1中的PMEN位,开启TMRx增强模式,该模式下TMRx_CVAL,TMRx_PR,TMRx_CxDT由16位扩展为32位),有利于低频测试。

使用此方法测试的最低频率为:56mHz。(TMR2的工作频率在240MHz)。

注意:增强模式是TMR2和TMR5独有的功能,使用不支持增强模式的其他TMR,或使用不含有增强模式TMR的AT32时,测试频率会受限。

AT32 PWM占空比测试说明

“图4.
图4. 占空比测试原理框图

测试PWM占空比时,利用门控模式(Hang Mode)方式来测量(如上图所示),将输入信号同时作为两个定时器的输入信号,利用输入信号来控制定时器的Counter计数。一个定时器在输入信号的高电平阶段计数,另一个定时器在输入信号的低电平阶段计数,使用第三个定时器作为时间基准,例如产生1s的中断,在中断内,获取这段时间内,两定时器Counter计数值,将两值做比值即可获取当前的PWM占空比。

这里定时器为TMR2和TMR5(这里选取TMR2、TMR5的原因在于其可以通过设置TMRx_CTRL1中的PMEN位,开启TMRx增强模式,该模式下TMRx_CVAL,TMRx_PR,TMRx_CxDT由16位扩展为32位),有利于测试。

这样做的好处在于,可以测量较高频率的占空比值,例如10MHz内,误差在1%以内。且没有频繁产生中断,代码也有冗余,去处理客户任务。

注意:增强模式是TMR2和TMR5独有的功能,使用不支持增强模式的其他TMR,或使用不含有增强模式TMR的AT32时,测试频率会受限。

PWM Test快速使用方法

硬件资源

1) AT-START-F403A实验板

“图5.
图5. AT-START-F403A实验板

注意:该Demo是基于AT32F403A的硬件条件,若使用者需要在AT32其他型号上使用,请修改相应配置即可。

pwm input test demo使用

打开pwm input test project源程序,其中,在at32f403a_407_clock.h里面有三个宏定义:

“如何使用雅特力AT32

分别用于测试高频信号,低频信号,PWM占空比,打开需要测试的宏【注意:每次只开一个宏】。

打开pwm output源程序,其中,在at32f403a_407_clock.h中有三个宏定义:

“如何使用雅特力AT32

分别产生高频信号,低频信号,PWM占空比用于测试。

AT-START板载的AT-LINK-EZ自带串口输出功能,它可以将USART1_TX口PA9输出至PC。也可使用其他串口工具进行测试结果的输出。

若测试高频信号时:

1) 打开pwm output源程序宏定义:#define Output_High_Frequency,PA8产生60MHz PWM

(I/O口已超频工作,可适当降低主频)。编译下载到实验板1。

2) 打开pwm input test程序宏定义:#define high_frequency_test,编译下载到实验板2。

3) 将实验板1的PA8接入到实验板2的PA0,USART1通过PA9输出当前的PWM频率信息。

串口打印信息如下:

“图6.
图6. 测试高频信号,串口打印信息

若测试低频信号时:

1) 打开pwm output源程序宏定义:#define Output_Low_Frequency,PA8产生500mHz PWM。编译下载到实验板1。

2) 打开pwm input test程序宏定义:#define low_frequency_test,编译下载到实验板2。

3) 将实验板1的PA8接入到实验板2的PA0,USART1通过PA9输出当前的PWM频率信息。

串口打印信息如下(应将第一个数据舍弃):

“”图7.
图7. 测试低频信号,串口打印信息

若测试PWM占空比时,

1) 打开pwm output源程序宏定义:#define Output_PWM_Duty_Ration_10,PA8产生6MHz PWM,占空比为10%。编译下载到实验板1。

2) 打开pwm input test程序宏定义:#define duty_ration_test,编译下载到实验板2。

3) 将实验板1的PA8接入到实验板2的PA0,USART1通过PA9输出当前的PWM占空比信息。

串口打印信息如下:

“图8.
图8. 测试 PWM 占空比,串口打印信息

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 635

物联网所谈论的议题是一个大方向,往应用细分又可分为智慧城市、智慧交通、智慧医疗、工业物联网(IIoT)等,而工业物联网和工业4.0的概念是密不可分的,着重于互联性、自动化、机器学习及实时数据等多方面。工业物联网是现今除了消费性应用以外,对于实现物联生活使用范围最广的,涵盖领域包含整个工业应用。

工厂自动化带来生产效率和产品质量的提升,并有效解决了有限人力的困境。从产线自动化到无人车搬运系统,再加上机器人、机械手臂助力,驱动工业物联网快速发展。然而要实现真正的智能工厂,对于很多企业来说还是任重而道远。在传统工厂尚未进行数字化转型前,仅能依照第一线员工分散记录生产状况,制作表格整理数据,管理者凭借过去经验和假设做出决策判断。这样耗时耗力地组织整理报告、等待管理者决策,往往耽误了排除问题的最佳时机。

传统工厂升级为智能工厂首要任务,将老旧的机器设备进行可程序化逻辑控制器(PLC)和传感器(Sensor)对接,利用Sensor前端采集资料,可视化的设备进行数据分析,通过通讯设备将资料传输至控制器做实时监控,最后回传到云端管理,形成完整的工业联网。然而要做到这样的技术,必须在现有的设备上安装嵌入式或非嵌入式的联网设备,利用MCU的高运算、小体积、低成本优势,执行硬设备的通讯、边缘运算、实时反应和电机控制等功能,加速推动传统工厂转型。IIoT特性在于拥有灵活高速的通讯网络、快速的分散式运算能力以及有助提高分析的边缘运算技术。这些技术能力缺一不可,用于信号撷取和驱动控制的PLC,与协助工厂设备运作的电机控制系统,在对系统处理的要求上与日俱增,传统8-bit MCU已无法满足制造商的需求,因此采用32-bit MCU才能达到更好的性能要求(图1)。

“图1.
图1. AT32 MCU导入IIoT设备应用

目前Arm®处理器内核作为工业和汽车系统中高集成、低成本MCU的行业标准,特别是ARM® Cortex®-M4 32-bit MCU,除了继承Cortex-M3内核优势,内建数位信号处理器(DSP),可选择附加单精度浮点单元(FPU),让Cortex-M4拥有高精度复杂的运算能力,且具有可访问性的优势,易于开发人员易编写软件。

Cortex-M4 32-bit MCU能有效改善低延迟、精确度及电力管理等问题,将传统MCU功能简化集中至单一芯片,并提供大容量内存,灵活弹性运用,优化系统成本。同时提供开发软件平台便于工程设计人员开发,带来高效处理、实时控制、网络通讯、数据分析和安全控制等功能。雅特力专注于32位微控制器研发与创新,采用ARM® Cortex®-M4高效能或M0+低功耗内核,在运算效能和精度上实现技术上的突破,超越市场上同级芯片,AT32 MCU在工业自动化运用中崭露头角,表现出一定的优势。

实时反应和控制

为确保工厂设备安全和机器的连续运作,精确的类比信号控制至为关键,必须在规范的时间内控制信号,通过快速处理大量的数据,做出实时反应和控制。特别是在数十万转的电机驱动应用上,因电机转速快电流频率高、电机线圈电感小,需要提供高频、高解析的PWM电压,方能使电机高效稳定运转。例如,雅特力推出的AT32F435/437系列MCU,采用最高主频288MHz,支援FPU浮点运算,内建超大容量4032KB Flash和高达512KB SRAM,让CPU能以零等待周期访问(读/写)(图2)。且内嵌自动时钟校准(ACC)模块,ACC可校准高速内部时钟HICK 48 MHz,并保证HICK在芯片可操作温度范围内的最佳准确度,满足各种运动控制和智能控制对高运算力、高精度的需求。

“图2.
图2. 零等待Flash映射区块

简化设计降低系统复杂性

AT32 MCU将丰富的外设如CAN总线、UART、SPI/I2S、ADC、多元用途定时器等外围元件整合成单片机系统,通过高阶软件编程进行最优化设计,建立在弹性的硬件区块上,针对不同应用需求进行软件设定,具备可扩充性和系统兼容性,降低系统复杂度。除上述多元接口外,还包含双DMA控制器、兼容IEEE-802.3 10/100Mbps以太网络和USB OTG等,提高资料传输效率和可靠性;并建立完整的系统生态链,包含开发环境、实时作业系统(RTOS)以及通过雅特力验证的第三方软件资源,并符合国际电工委员会(IEC)制定的IEC-60730国际安全标准规范,如此强大丰富的资源及便利性,有助于产品快速开发上市。

大容量内存提升灵活性

AT32 MCU可搭配标准规格的扩充板,适用于快闪存储器编程和运行控制的内置调试接口,快闪存储器(QSPI)具备高读取频宽,加速高效能嵌入式系统的资料存取及编辑,完成系统的快速编程执行,通过先进制程技术,集成更大容量SRAM进行数据缓存,执行复杂的系统代码与弹性应用。AT32F403A/407系列及AT32F435/437系列,提供256~4032KB Flash、96~512KB SRAM超大存储器选用,灵活应用于各种工业自动化控制领域,如化工、塑料、纺织、包装、印刷、中央空调、环保设备等生产机械设备(图3)。

“图3.
图3. AT32 M4/M0+ MCU FAMILY

提高能源效率

未来工业化的设备将增加更多控制程序和传感器来提升安全性,这些都需要大量的计算能力。例如,设备上增加异常检测功能,在即将发生灾难性的故障前,提前进行预防保养,确保设备发生故障时工厂仍能安全地运作,减少工厂停机时间,并增加多种通讯方式。或是在工厂自动化升级中,实现无线抄表和数据传送功能的低功耗电磁流量计与电流表,节省人力资源和提升效率。AT32WB415系列采用低功耗(BLE)蓝牙5.0,集成蓝牙射频(RF)收发器与基带(baseband)功能所组成的无线通讯型MCU,作为工厂建设首选;由于工厂设备需随时处在联网情况下,能源管理为一大挑战,须解决低运行功耗和低待机功耗等问题,AT32L021系列将于2022下半年推出,主频采用72MHz,片上集成了丰富的外设外围,且扩展了1个采样率高达2 Msps的12位ADC,几乎所有的I/O接口可容忍5V输入讯号,适用于高速数据采集、工业及电机控制,且芯片于待机模式下可达约1uA,深度睡眠模式约20uA的优异功耗表现。

根据Market Research Future分析报告预测,从现在到2023年,物联网微控制器市场的复合年增长率(CAGR)将达到12%,届时年收入将达到近40亿美元。工业物联网的应用多偏重工厂环境设备与大量远距离传感器的连接,因此需要高速的资料传输和数据处理能力同时保持低功耗的电力,也是雅特力MCU一直为之努力的方向。

关于雅特力

雅特力科技于2016年成立,是一家致力于推动全球市场32位微控制器(MCU)创新趋势的芯片设计公司,专注于ARM ®Cortex®-M4/M0+的32位微控制器研发与创新,全系列采用55nm先进工艺及ARM® Cortex®-M4高效能或M0+低功耗内核,缔造M4业界最高主频288MHz运算效能,并支持工业级别芯片工作温度范围(-40°~105°)。

雅特力目前已累积相当多元的终端产品成功案例:如微型打印机、扫地机、光流无人机、热成像仪、激光雷达、工业缝纫机、伺服驱控、电竞周边市场、断路器、ADAS、T-BOX、数字电源、电动工具等终端设备应用,广泛地覆盖5G、物联网、消费、商务及工控等领域。

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 19

6月17日,由全球电子技术领域知名媒体Aspencore主办的“全球MCU生态发展大会“在深圳科兴科学园国际会议中心圆满落幕。本次会议以“国产创新 智能应用”为主题,汇聚了众多微控制器领域的技术和应用专家,共同探讨最新处理器技术、边缘AI、新兴应用和生态发展等热门议题。

会议现场,雅特力产品市场经理林金海先生发表了题为《专注生态链,雅特力用“芯”打造高性能高性价比的MCU平台》的主题演讲,详细介绍了雅特力近年来取得的成就,最新产品布局及开发生态体系。同时现场还展示了多款热门终端应用产品,吸引了众多行业人士前来参观交流!

“雅特力携AT32

雅特力专注于ARM® Cortex®-M4和M0+的32位微控制器研发与创新,目前已推出低功耗、超值型、主流型、高性能及无线型五大系列MCU产品线,累计近200款型号。全系列MCU芯片均采用55nm先进工艺,支持-40°~105°工业级别芯片工作温度范围,具有高主频、高可靠性和高安全性等特性。

尤其是近期推出的4款新品,在性能、性价比及应用领域覆盖上都表现十分卓越,2021年Q4推出的AT32F435和AT32F437系列MCU,创造了M4业界最高CPU主频288MHz运算效能;2022年推出的AT32F425和AT32WB415系列MCU,AT32F425继续拓展了超值型MCU产品线,是USB OTG芯片的性价比之选,AT32WB415采用了低功耗(BLE)蓝牙5.0,为消费性电子、智能家居、工业物联网等多项应用领域提供最佳解决方案;以及即将推出的AT32L021系列,作为首次发布的低功耗产品,是入门级低功耗MCU的最佳选择。

“雅特力携AT32

林金海在演讲中提到,雅特力一直坚持从用户需求出发的理念,满足用户多样化需求。随着智能家电、万物互联及工业自动化的不断发展,雅特力紧跟市场需求的变化,在智能家居领域,雅特力提供IEC 60730安全B类库,包含硬件容错设计、自检程序和软件测试库,程序检测内容分为两个主要部分,即启动时的自检和运行时的周期自检,帮助用户顺利通过IEC 60730 B类家电安全标准认证,快速研发出更安全、更可靠的产品。

在工业物联网领域,传统工厂升级为智能工厂首要任务,将老旧的机器设备进行可程序化逻辑控制器(PLC)和传感器(Sensor)对接,利用Sensor前端的资料采集,可视化的设备进行数据分析,透过通讯设备将资料传输至控制器做实时监控,最后回传到云端管理,形成完整的工业联网。AT32 MCU发挥高运算、小体积、低成本的优势,执行硬设备的通讯、边缘运算、实时反应和电机控制等功能,加速推动传统工厂转型。

“雅特力携AT32

除了产品的布局和优化,MCU平台更重要的竞争力在于生态链建设,技术文档、开发工具,软件平台,及在地化支持加起来才是综合竞争力。从产品开发、生产到升级,雅特力提供了一套丰富而完善的AT32 MCU开发生态系统,包括AT-START开发板,AT32 MCU应用转板,AT-Link-Family编程调试工具等硬件资源,以及BSP标准库、ICP/ISP编程工具等软件资源,支持Keil, IAR, eclipse, RT-Thread Studio等IDE平台与RT-Thread OS, FreeRTOS及LittlevGL等OS/GUI平台。提供给了开发人员便利性,大幅缩短开发与量产时间,加快产品上市周期,推动产业升级步伐。

活动现场,雅特力展示了基于AT32 MCU开发的十余款应用方案,包括数字电源、变频器、简易PLC、激光测距仪、智能开关,及电动车驱动器等热门产品,现场人头攒动、气氛热烈!

“雅特力携AT32

关于雅特力

雅特力科技于2016年成立,是一家致力于推动全球市场32位微控制器(MCU)创新趋势的芯片设计公司,专注于ARM ®Cortex®-M4/M0+的32位微控制器研发与创新,全系列采用55nm先进工艺及ARM® Cortex®-M4高效能或M0+低功耗内核,缔造M4业界最高主频288MHz运算效能,并支持工业级别芯片工作温度范围(-40°~105°)。
雅特力目前已累积相当多元的终端产品成功案例:如微型打印机、扫地机、光流无人机、热成像仪、激光雷达、工业缝纫机、伺服驱控、电竞周边市场、断路器、ADAS、T-BOX、数字电源、电动工具等终端设备应用,广泛地覆盖5G、物联网、消费、商务及工控等领域。

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 25

概述

在使用ARM Cortex-M系列MCU时(如AT32 MCU),有时会出现程序运行异常。当通过编译器在debug模式查原因时,会发现程序跑到HardFault_Handler函数中,产生HardFault,即硬件错误。

“图1.
图1. HardFault_Handler函数

本文档主要介绍一种基于CmBacktrace库,快速追踪和定位产生HardFault原因的方法。

HardFault产生原因

常见产生HardFault产生的原因大概有如下几类:

  • 数组越界操作;

  • 内存溢出,访问越界;

  • 堆栈溢出,程序跑飞;

  • 中断处理错误。

数组越界

程序中使用了静态数组,而在动态传参时数组赋值溢出。或者动态分配内存太小,导致程序异常。

内存溢出

重点检查RAM区域,程序编译后执行的RAM数据量大小为多少是否可能越界。一般不要设置到极致的情况,程序中的一些动态数组传参时会导致异常。

堆栈溢出

这在使用操作系统的代码中尤其容易发生,在操作系统中,任务的变量均分配放置在任务所申请的堆栈空间中。

例如FreeRTOS中调用xTaskCreate来创建任务,该函数以参数usStackDepth指定任务堆栈的大小,如果指定的堆栈太小,则会堆栈申请不足,进入HardFault。

中断处理异常

程序中开启了某些中断,例如USART,TIMER,RTC等。

但在程序执行中,满足中断条件,但并未能查找到该部分对应的中断服务函数,则可能会出现该异常。

HardFault分析方法

常见的分析方法是:发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12 Returnaddress、PSR、LR寄存器依次入栈,其中Return address即为发生异常前PC将要执行的下一条指令地址。

但以上方法要求对ARM内核比较熟悉,且操作较为繁琐。

以下重点介绍采用开源库CmBacktrace作为快速分析的方法。

基于CmBacktrace库分析方法

CmBacktrace(Cortex Microcontroller Backtrace)是一款针对ARM Cortex-M系列MCU的错误代码自动追踪、定位,错误原因自动分析的开源库。主要特性如下:

  • 支持的错误包括:

    1) 断言(Assert)

    2) 故障(Hard Fault, Memory Management Fault, Bus Fault, Usage Fault, Debug Fault)

  • 故障原因自动诊断:可在故障发生时,自动分析出故障的原因,定位发生故障的代码位置,而无需再手动分析繁杂的故障寄存器;

  • 适配Cortex-M0/M3/M4/M7 MCU;

  • 支持IAR、KEIL、GCC编译器;

  • 支持FreeRTOS、UCOSII、UCOSIII、RT-Thread等OS;

基于MDK的CmBacktrace库使用流程

基于MDK的移植方法按如下步骤进行:

步骤一 添加cm_backtrace库文件到MDK中

“图2.
图2. cm_backtrace库文件夹

把cm_backtrace文件夹复制到我们的工程目录下,并添加至keil工程中。

“图3.
图3. 添加cm_backtrace后keil工程目录

步骤二 添加头文件、勾选C99模式

“图4.
图4. Keil中配置C99和头文件

步骤三 编译和调试

首先,cmb_cfg.h文件按以下提示配置修改。

“图5.
图5. cmb_cfg.h文件配置

这时候编译有一个错误,这是因为cmb_fault.c与at32f4xx_int.c中的HardFault_Handler函数重复定义:

“图6.
图6. at32f4xx_it.c编译报错

需要把at32f4xx_int.c中的HardFault_Handler函数屏蔽掉。

“图7.
图7. HardFault_Handler函数屏蔽

步骤四 测试与查看

这时候就可以编译通过了。下面测试这个库的功能。

测试函数如下:

“图8.
图8. 编写除零错误函数

然后在主函数中调用cm_backtrace_init();来初始化cm_backtrace,并调用该测试函数:

“图9.
图9. main函数调用除零错误函数

下载运行程序,PC端接收串口信息:

“图10.
图10. 串口助手输出错误信息

可以看到,列出了出错原因(除0)和一条命令。运行这个命令需要用到addr2line.exe工具,该工具在tools文件夹中:

“图11.
图11. 定位addr2line.exe位置

有32bit和64bit两个版本,根据环境选择,并拷贝到keil工程目录下的.axf文件所在的文件夹中,如demo中所附工程,则拷贝到如下目录:

AN0028_SourceCode_V2.0.0\utilities\AN0028_demo\non_os\mdk_v5\objects

“图12.
图12. 拷贝addr2line.exe工具

进入到cmd窗口,转到上述文件夹位置,运行串口助手中的那条命令:

addr2line -e CmBacktrace(此处要依据用户的工程名修改).axf -a -f 080019c6 08001ae9

如demo中工程名为printf,命令则应修改为addr2line -e printf.axf -a -f 080019c6 08001ae9

“图13.
图13. 调用CMD运行addr2line.exe工具

可以看到addr2line.exe工具定位出了错误相关的代码行号,查看对应行的代码:

可以看到addr2line.exe工具定位出了错误相关的代码行号,main.c的第60行,fault_test.c的第38行,查看对应行的代码:

“图14.
图14. 确认错误代码区域

可见,对应的行号正是出错的地方,使用这个CmBacktrace库能帮助用户有效、快速地定位到HardFault之类的错误。

案例展示

案例一 无OS除零错误

工程位置:AN0028_SourceCode_V2.0.0\utilities\AN0028_demo\non_os

测试内容:在裸机上除零错误

案例二 FreeRTOS上除零错误

工程位置:AN0028_SourceCode_V2.0.0\utilities\AN0028_demo\os\freertos

测试内容:在FreeROTOS上除零错误,需注意tasks.c中有注释/*<Support For CmBacktrace>*/的三处为针对CmBacktrace做出的修改

案例三 USOCⅢ上非对齐访问错误

工程位置:AN0028_SourceCode_V2.0.0\utilities\AN0028_demo\os\ucosiii

测试内容:在UCOSⅢ上非对齐访问错误,需注意os_cfg.h中#define OS_CFG_DBG_EN为1u

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 309

页面

订阅 RSS - AT32 MCU