MCUXpresso

2023年3月,恩智浦宣布了为其通用微控制器(MCU)的开发人员提供更好开发体验的愿景,以及为实现这一系列开发体验提升而带来的新技术。作为2023年7月MCUXpresso软件和工具套件版本更新的一部分,恩智浦正式推出一系列包含这些全新技术的软件工具发行版。

MCUXpresso for VS Code现已推出

在经过恩智浦内外数百名志愿者的测试并获得成功的测试结果后,恩智浦现已发布了MCUXpresso for Visual Studio Code (VS Code),可从Microsoft Visual Studio Marketplace下载。该扩展产品为MCUXpresso软件驱动程序和中间件提供全面支持,使开发人员能够使用这款主流IDE通过MCUXpresso SDK进行快速响应的编码。易于使用的MCUXpresso安装程序对该扩展产品形成了补充,该安装程序管理Python、工具链和硬件调试器驱动程序等所需各种其他组件的安装。

感谢所有参与测试和合作的伙伴们的宝贵反馈,我们也优化了Zephyr开发人员的体验,提供比以往更友好的环境,让这个强大的开源生态体系更易被想要开始探索其功能的人使用。

下载MCUXpresso for Visual Studio Code Extension,开启开发新体验,点击这里>>

微软首席产品经理Mark Goodner表示:“很荣幸能与恩智浦就MCUXpresso扩展产品合作。恩智浦团队与微软密切合作,以利用Visual Studio Code中的嵌入式功能。恩智浦的向导工具非常直观,使开发人员能够轻松使用恩智浦SDK或Zephyr SDK,给我们留下了深刻印象。”

Open-CMSIS-Packs:接入合作伙伴软件

恩智浦开发人员体验改进计划的一个主要方面是帮助希望使用现成中间件软件库的工程师,现成的中间件软件库可以提供高级功能,帮助工程师迅速应对日益复杂的MCU设计和应用需求。我们与合作伙伴和Arm密切合作,已为Open-CMSIS-Packs提供支持,使第三方软件能够以可预测的标准化方式轻松整合到项目中。

首批提供Open-CMSIS-Packs并支持恩智浦产品的合作伙伴涵盖了多种技术领域,包括Ametek Crank、Embedded Wizard (来自TARA) 和LVGL的图形显示相关方案、Embedded Systems Academy的CAN和CAN-FD协议栈、Memfault的远程设备管理和诊断、SEGGER的embOS实时操作系统,以及WolfSSL的安全协议栈。此外,还有几个合作伙伴正积极开发计划今年晚些时候提供的软件包。

从下文,可以了解我们合作伙伴提供的有关Open-CMSIS-Packs的更多信息。

Ametek Crank

“Ametek Crank的使命是,简化和增强用户界面开发流程,使设计人员和开发人员能够共同创建卓越的用户体验。我们很高兴与恩智浦合作,将CMSIS Packs融入他们的工具中,为客户提供简单高效的生态体系,为跨恩智浦硬件平台开发UI带来新的可能。”

——Martin Jomphe

Crank董事总经理

利用CMSIS Packs提供的标准化组件和中间件,Crank的CMSIS Packs将打包一系列能够立即预览的演示镜像,使客户能够有效评估恩智浦微控制器的显示性能。

Embedded Wizard

“作为GUI软件的领先提供商之一,Embedded Wizard自2017 年以来一直提供CMSIS Packs。我们拥有丰富的经验,能够根据恩智浦MCU的特定要求提供量身定制的高质量解决方案。开发人员可以依赖成熟的功能和稳定性,完全专注于开发应用。”

——Manuel Melic,Embedded Wizard

产品经理兼董事总经理

还有一个显著优势是,代码可以跨恩智浦不同MCU平台无缝移植,无需调整基础代码。将项目迁移到新的硬件平台时可以节省宝贵的时间和资源,并为各个特定应用灵活选择合适的MCU。我们拥有丰富的专业知识,确保提供可靠的软件解决方案,提供定期更新和全面的支持,在产品整个生命周期提供帮助。

嵌入式系统学会 (EmSA)

"我们很高兴将Micro CANopen库引入Open-CMSIS-Packs生态体系。我们的目标是,让开发人员能够轻松地将CANopen或CANopen FD支持集成到嵌入式项目中。”

——Olaf Pfeiffer

嵌入式系统学会 (EmSA) 首席执行官

恩智浦自有开发团队也在今年下半年推出了软件包,包括传感器处理和模拟前端支持库。可用软件包在Arm管理的中央数据库注册登记,因此开发人员可以随时浏览所需选项,包括可用的新软件包,无需安装新的IDE版本或访问各个软件提供商的网站。

Memfault

“Memfault很高兴能够轻松、直接地将Memfault SDK融入恩智浦MCUXpresso开发环境中。我们利用CMSIS Packs来实现这一目标,CMSIS Packs是Arm倡导的抽象标准,得到了整个行业的支持。让更新和维护更简单完全符合Memfault将现代化、可复用工具引入嵌入式计算的理念。”

——James Pace

Memfault战略计划副总裁

MCUXpresso充分发挥恩智浦MCU的潜力

今年7月发布的版本标志着恩智浦微控制器开发体验向未来迈出了第一步。我们对新MCUXpresso for VS Code的推出感到非常兴奋,特别是考虑到Beta测试人员响应热烈并且能够显著提升Zephyr开发人员的体验。此外,该开发环境在未来还会有更多升级。 

我们的白金IDE合作伙伴IAR和Arm全面支持Open-CMSIS-Packs,并提供自己的VS Code扩展产品,因此IDE的选择范围比以往更广。为了对这些新的IDE功能形成补充,我们的软件合作伙伴还致力于发展Open-CMSIS-Packs,可用选项也在强劲增长。 

了解更多技术详情:请访问MCUXpresso官网

来源:NXP客栈(作者:Brendon Slade)

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

围观 38

新一代MCUXpresso工具集为复杂的嵌入式应用简化软件开发体验,增加了全新的集成开发环境(IDE)选择,支持使用开源项目,让开发人员轻松访问专用中间件和硬件抽象层,从而使得代码得以在恩智浦广泛的MCU产品开发中得到复用

1.jpg

恩智浦半导体(NXP Semiconductors N.V.,纳斯达克股票代码:NXPI发布全新的MCUXpresso工具集,其丰富多样的工具和资源赋予开发人员更强的可扩展性、可用性和可移植性,从而更轻松快速地开发复杂的嵌入式应用。全新的MCUXpresso工具集在现有功能的基础上,增加了新的IDE产品,包括针对微软的Visual Studio CodeVS Code)定制的MCUXpresso IDE、支持代码复用的开源硬件抽象层、使用Open-CMSIS-Packs简化合作伙伴代码交付,以及一个全新的应用启动平台(Application Launch Pad),使开发人员能够轻松地交互访问恩智浦的应用软件和文档。

产品重要性

开发人员体验是决定能否高效快速地开发创新型产品的关键。无论是初入行业的新手还是久经沙场的老将,能够灵活地选择更适合其项目的软件和工具一定能在工作中得心应手。恩智浦投资开源社区以帮助加快开发速度和产品上市进程,让恩智浦合作伙伴能够更轻松地为开发人员提供专业软件,恩智浦推出的全新MCUXpresso工具集可为软件开发人员提供快速创新所需的丰富的资源和工具选择。

更多详情

恩智浦资深副总裁兼工业和物联网边缘产品总经理Charles Dachs表示:“现在的开发人员希望有更多的选择和开源选项,而不是被限制在专用系统中。全新的MCUXpresso工具集包含丰富的工具和资源,赋予开发人员更大的灵活性,轻松加快软件开发,掌控整个开发流程。我们让开发人员有机会接触更多的开源社区,简化专业合作伙伴软件的集成,以此帮助开发人员实现创新,扩展项目,更快地将复杂产品推向市场,并在恩智浦器件和平台之间轻松实现迁移。” 

全新的MCUXpresso工具集包含全新推出的MCUXpresso for VS Code,可实现快速响应的源代码编辑。该全新的IDE提供更多的构建系统选项以增加灵活性,包括备受开源项目青睐的系统(如ZephyrMatter),同时,新工具集仍保留对传统MCUXpresso SDK的支持,开发人员可自由选用。此外,开发人员还可以继续使用已有的IDE选项,比如MCUXpresso IDEIAR嵌入式工作台和Arm® Keil®开发工具。

此外,全新的MCUXpresso工具集为嵌入式生态系统集成提供了全面的一站式服务。该工具集将提供硬件抽象层(HAL),以简化恩智浦广泛微控制器产品组合中的代码复用和可移植性。MCUXpresso生态系统中的所有IDE都支持Open-CMSIS-Pack助力简化代码交付,由此,生态系统合作伙伴能够帮助客户大幅简化产品评估和集成过程,同时开发人员能够轻松地浏览现成软件集合。另外,全新的应用启动平台是一个应用设计资源的中央存储库,包含丰富的应用软件包、应用笔记和应用代码示例,开发人员可以通过一个直观的门户浏览可用软件。

敬请光临国际嵌入式大会恩智浦展位(4A-222),查看全新MCUXpresso for VS Code的演示。

更多信息,请访问nxp.com/MCUXpresso

其他资源:

关于恩智浦半导体

恩智浦半导体(纳斯达克代码:NXPI)汇集英才,共同创造突破性技术,为更智慧安全的互联世界保驾护航。作为全球领先的嵌入式应用安全连接解决方案提供商,恩智浦不断寻求汽车、工业物联网、移动设备和通信基础设施市场的突破,同时不断推出解决方案,助力实现可持续发展的未来。恩智浦拥有超过60年的专业技术及经验,在全球30多个国家设有业务机构,员工达31,000人,2022年全年营业收入132.1亿美元。更多信息请登录http://www.nxp.com.cn

围观 22

本人很久以前写过一篇文章 《ARM Cortex-M镜像文件(.bin/.hex/.s19)》,详细介绍了三种流行的镜像文件格式,这些镜像文件不同于可执行文件(.elf),它们主要保存的是芯片能够执行的二进制机器码数据,以及辅助的地址信息和校验和,其他像 .elf 文件里有的工程信息、代码信息、调试信息全部被去除了,说白了镜像文件主要是为最终量产过程而生的。

一般情况下,在 IDE 开发环境里编译链接生成的是可执行文件,然后可以在工程选项做一些设置能进一步生成镜像文件。不同 IDE 下生成镜像文件的方法不同,今天主要介绍来MCUXpresso IDE下生成镜像文件的方法以及与 IAR/MDK 的对比。

注:本文测试的MCUXpresso IDE版本是v11.6.0_8187。

一、各种IDE下生成镜像文件的方法

我们先来看看MCUXpress以外的其它IDE下是如何生成各种格式镜像文件的。我们以 \SDK_2.11.1_MIMXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world\cm7 目录下的工程文件为例。

1.1 IAR EWARM下

编译hello_world_demo_cm7.eww工程(随便选择 debug build),会在工程目录 debug文件夹下生成可执行文件hello_world_demo_cm7.out。如果在工程选项Output Converter里开启Generate additional output,则可以指定生成想要的镜像文件(bin/hex/srec)。

1.png

如果你仔细看Build窗口的log信息,会发现IDE其实是在可执行文件生成之后,再借助 \IAR Systems\Embedded Workbench 9.10.2\arm\bin\ielftool.exe 小工具对可执行文件做的二次转换生成的镜像文件。

ielftool.exe --bin  app.out app.binielftool.exe --ihex app.out app.hexielftool.exe --srec app.out app.s19

所以其实在工程选项Build Actions里的Post-build command line添加如下调用 ielftool.exe做转换的命令(CMD /C 的意思是以 bat 文件内容方式打开后面的命令;命令需要用双引号括起来;路径也需要单独用双引号括起来,防止路径中存在空格,导致命令出错),也能达到一样的效果。

CMD /C ""$TOOLKIT_DIR$\bin\ielftool.exe" --bin "$PROJ_DIR$/debug/hello_world_demo_cm7.out" "$PROJ_DIR$/debug/hello_world_demo_cm7.bin""

2.png

1.2 Keil MDK下

编译hello_world_demo_cm7.uvprojx工程(也选择debug build),会在工程目录debug文件夹下生成可执行文件hello_world_demo_cm7.out。如果在工程选项Output里开启Create HEXfile,则可以生成hex格式镜像文件,不过要想生成其他bin/srec格式镜像文件需要想其他办法。

3.png

MDK下其实也有类似IAR下的镜像文件转换小工具,即 \Keil_v5\ARM\ARMCC\bin\fromelf.exe,这个小工具可以帮助生成其他格式的镜像文件。

fromelf.exe --bin app.out --output app.binfromelf.exe --i32 app.out --output app.hexfromelf.exe --m32 app.out --output app.srec

在工程选项User里的After build添加如下调用formelf.exe做转换的命令就可以得到指定格式的镜像文件了。

$K\ARM\ARMCC\bin\fromelf.exe --bin --output=debug\@L.bin !L

4.png

二、MCUXpresso下生成镜像文件的方法

MCUXpresso IDE 下生成镜像文件的方法与IAR/MDK稍有不同,其并不是在工程选项里去开启,而是工程目录里会有Binaies虚拟文件夹(如果看不到该文件夹,可以按 F5 刷新一下),编译完成后在Binaies文件夹下会看到可执行文件(evkmimxrt1170_hello_world_demo_cm7.axf),右击可执行文件在Binary Utilities里可以看到不同格式镜像文件生成选项。

5.png

我们知道MCUXpresso IDE是基于标准ARMGCC的二次封装,所以其生成镜像文件的能力其实是依靠\MCUXpressoIDE_11.6.0_8187\ide\tools\bin\arm-none-eabi-objcopy.exe 小工具。

arm-none-eabi-objcopy.exe -O binary app.axf app.bin

arm-none-eabi-objcopy.exe -O ihex   app.axf app.hex

arm-none-eabi-objcopy.exe -O srec   app.axf app.srec

因此在MCUXpresso IDE下我们也可以像IAR/MDK那样添加Post-build steps命令来完成镜像文件的生成。

arm-none-eabi-objcopy -O binary "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin"

6.png

来源:恩智浦MCU加油站

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

围观 93

最近为了测试一款Cortex-M33产品性能达标,验证团队将coremark基准测试程序当作了一个测试用例,而在RTL环境里指定的 C 编译器是标准GCC,当发现跑出来的 coremark程序测试结果与Arm给的Cortex-M33参考值4.02 CoreMark/MHz有一定差距,因此对这个问题进行了调查。

在Arm的Cortex-M33主页,其备注了4.02 CoreMark/MHz参考值来自于 EEMBC官网上的一款恩智浦LPC55S69JBD100芯片跑出来的结果,页面里备注了跑分结果是在Arm Clang Compiler v6.12下开启最高优化等级 -Omax 下得到的,而验证团队用得是GCC,由此断定问题大概率是由不同编译器优化性能差异引起的,借着这个实际问题,今天就跟大家聊一聊MCUXpresso IDE下编译优化等级设置方法。

注:本文使用的MCUXpresso IDE软件版本是 v11.6.0_8187。

一、查看MCUXpresso的GCC版本

有朋友可能会觉得奇怪,文章开头里明明聊得是GCC下coremark跑分问题,为何要引出MCUXpresso IDE?其实MCUXpresso IDE是恩智浦推出的免费集成开发环境,其底层编译器就是标准GCC工具链,使用MCUXpresso IDE,我们就不用像使用GCC那样手动准备相应Makefile去做编译了。

因为我们是借助MCUXpresso IDE来测试GCC编译优化性能,所以需要了解当前 GCC版本,可以在MCUXpresso IDE安装目录的如下路径下找到GCC版本信息。

执行 arm-none-eabi-gcc.exe -v 命令即可知道其版本,MCUXpresso IDE v11.6 使用得是 GCC v10.3.1。

\MCUXpressoIDE_11.6.0_8187\ide\tools\bin\arm-none-eabi-gcc.exe

\MCUXpressoIDE_11.6.0_8187\ide\tools\lib\gcc\arm-none-eabi\10.3.1

二、GCC支持的优化等级

既然咱们聊得是优化等级设置方法,首先我们得知道GCC下支持哪些优化等级,我们可以在MCUXpresso IDE安装目录或者GCC官网找到用户手册(gcc.pdf),手册里面 Section 3.11 Options that Control Optimization 章节有详细的解释。

\MCUXpressoIDE_11.6.0_8187\ide\tools\share\doc\gcc-arm-none-eabi\pdf\gcc.pdf

https://gcc.gnu.org/onlinedocs/gcc-10.3.0/gcc.pdf

GCC本身支持非常多的优化策略小项,大概有如下 100 多个,可以在手册里去看每个小项的具体解释,了解了这些小项,我们在编译时当然可以把这些策略参数按需加上去,不过这种方式显然比较繁琐。

“MCUXpresso

GCC为了化繁为简,将这些策略小项做了分类整理,形成了如下8个等级(基于代码大小和运行速度两个方向逐步加档),我们在实际编译时一般直接用这8个优化等级即可。

“MCUXpresso

三、MCUX下设置优化等级的三种方法

在 MCUXpresso IDE 工程里,我们有三种方法来设置优化等级,分别针对单个函数、单个源文件、整个工程源文件。

3.1 在源文件中设置

第一种优化等级设置方法主要针对单个函数,即使用 __attribute__ 来修饰函数(这其实是GCC下通用做法,与MCUX关系不大),经过修饰的函数可以不受 MCUXpresso IDE工程整体优化等级设置影响。

void __attribute__((optimize("O3"))) function(void)
{
    ...
}

第二种优化等级设置方法主要针对多个相邻函数或者整个源文件,即使用如下 #pragma组合语句来修饰代码(这也是GCC下通用做法,与MCUX关系不大),经过修饰的代码也同样不受MCUXpresso IDE工程整体优化等级设置影响。

#pragma GCC push_options     // 代码作用范围起始处
#pragma GCC optimize("O3")   // 代码优化等级设置
void function1(void)
{
    ...
}
void function2(void)
{
    ...
}
...
#pragma GCC pop_options      // 代码作用范围结尾处

3.2 在IDE选项中设置

第三种优化等级设置方法主要针对工程全部源文件,即在MCUXpresso IDE工程选项里Optimization Level一栏项目里做切换选择,这里基本上与 GCC v10.3 优化等级定义是一致的,但是缺少了 -Ofast 选项。

“MCUXpresso

四、MCUX下设置-Ofast等级

使用一块MIMXRT595-EVK开发板(主芯片为Cortex-M33内核),在其配套SDK 里的hello world工程基础之上移植了coremark程序,在IAR v9.10最高优化等级下(High-Size No size constraints)得到了3.94 CoreMark/MHz的跑分,这很接近Arm基准值,但是在MCUXpresso IDE最高优化等级下(-O3)仅得到了2.76 CoreMark/MHz。

莫非是必须要在MCUXpresso IDE下开启GCC的最快运行优化等级 -Ofast 才能得到理想coremark跑分,但是MCUXpresso IDE选项里并没有 -Ofast 怎么办?

别着急,刚才工程选项下还有Other optimization flags后门,我们在这里手动添加上 -Ofast 比 -O3 多的那两个优化策略小项,以及MCUX团队要求的 -fno-semantic-interposition 小项,这样基本就等于 - Ofast 效果。

-ffast-math -fallow-store-data-races -fno-semantic-interposition

“MCUXpresso

重新编译,再跑一次 -Ofast 等级下的MCUXpresso IDE工程,发现coremark跑分结果并没有比 -O3 等级下有多大提升。

想了想虽然跑不到IAR 上 3.94 CoreMark/MHz的高分有点不甘心,但是这也很正常嘛,免费的GCC编译器如果能达到商业IAR编译器那样的效果,那人家商业编译器还怎么收费呢,理解万岁!

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

围观 78

程序函数库是一个包含已经编译好代码和数据的目标文件集合,这个库文件里的函数可以供其他程序调用。

被放进库文件里的代码通常具有一定通用性,是经过高度抽象的,这样可以避免重复造轮子。程序函数库设计可以使得程序的开发工作更加模块化,更容易重新编译,也更方便升级。

嵌入式开发里有时候也会需要涉及函数库文件,除了模块化开发以及方便升级特点外,有时候也是为了对源代码进行保密,毕竟库文件是编译后的文件。今天就跟大家聊聊 MCUXpresso IDE 下生成 Lib 库文件的方法及其与 IAR, MDK 有何差异。

注: 本文测试的MCUXpresso IDE版本是v11.4.0_6224。

一、其它IDE下制作Lib库的方法

我们先来看看其它 IDE 下是如何生成和使用 Lib 库文件的。我们以 \SDK_2.10.0_MI
MXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world\cm7目录下的工程文件为例。

这个 hello_world 例程主要就是利用 LPUART 外设驱动( fsl_lpuart.c )实现串口打印功能,这里我们就尝试将 fsl_lpuart.c 文件制作成 Lib 库(这里特指静态链接库 - Static Library)。

1.1 IAR EWARM下

使用IAR 打开 hello_world_demo_cm7.eww 文件,编译默认工程可以得到工程可执行文件和镜像文件,这是经过编译和链接之后的可直接执行的纯机器码数据。由于我们只需要将 fsl_lpuart.c 文件制作成 Lib 库,所以要对工程进行一些改动:

将工程里除fsl_lpuart.c 之外的其它.c 文件全部移除,并且仅需保留fsl_lpuart.c 所依赖的相关头文件。
在工程选项General Options / Output / Output file 里切换到 Library。

在工程选项Library Builder / Output / Output file 里命名生成的库文件(比如 lpuart_drv.a )。

这时候重新编译工程便可以得到我们想要的 lpuart_drv.a 库文件,如果要使用这个库文件的话,也非常简单,只要在原始的hello_world 工程里将 fsl_lpuart.c 文件替换成 lpuart_drv.a 即可。

“MCUXpresso

1.2 Keil MDK下

MDK 下制作和使用 Lib库的方法与IAR差不多,就是工程设置差异。

使用 MDK 打开 hello_world_demo_cm7.uvprojx文件,同样对工程进行一些改动:

1)将工程里除fsl_lpuart.c 之外的其它.c 文件全部移除,并且仅需保留fsl_lpuart.c 所依赖的相关头文件。

2)在工程选项Output / 里切换到Create Library。

3)在工程选项Output / Name of Executable 里命名生成的库文件(比如 lpuart_drv.lib )。

“MCUXpresso

二、MCUXpresso IDE下制作Lib库

了解了IAR, MDK 下制作和使用 Lib 库方法,我们再来看本文的主角 MCUXpresso IDE 下制作 Lib 库的方法。

首先是按照 《MCUXpresso IDE下SDK工程导入与workspace管理机制》 一文导入一个 hello_world 工程,在导入向导界面,我们能看到 SDK 里的例程类型是C Project,旁边虽然有 C Static Library 选项,但是不可设置。

“MCUXpresso

我们先使用 SDK 包里导出的默认工程(C Project),按照之前 IAR, MDK 上的经验,在这个工程里做如下改动。重新编译工程,发现生成的文件似乎跟原始工程生成的可执行文件(Artifact Type 为 Executable )差不多,显然 Shared Library 并不是我们想要的静态 Lib 库。

1)将工程里除fsl_lpuart.c 之外的其它.c 文件全部移除,并且仅需保留fsl_lpuart.c 所依赖的相关头文件。

2)在工程选项C/C++ Build / Settings / Build Artifact / Artifact Type 里切换到Shared Library。

3)工程选项C/C++ Build / Settings / Tool Settings / MCU Linker / Shared Library Settings 里Shared 选项勾选上。

“MCUXpresso

那么MCUXpresso IDE 下如何生成静态 Lib 库呢?很遗憾,你必须在新建工程之初就确定工程类型为 C Static Library,工程类型确定之后无法仅通过工程选项来切换 C Project 和 C Static Library (这是和IAR, MDK 不一样的第一个地方)。

在创建 C Static Library 时尽量在向导里将多余的源文件选项全部去掉,仅保留我们感兴趣的 lpuart 驱动。

“MCUXpresso

新建了C Static Library 工程后,发现工程里还是残留了多余的 .c 文件(Debug Console 和 device 初始化相关文件),这时候再手动移除这些 .c 文件,然后打开工程选项 C/C++ Build / Settings / Build Artifact / Artifact Type,此时仅有 Static Library 一种选择。

编译工程可得到 liblpuart_drv.a 文件(MCUXpresso IDE 特意在用户设置的库名加了 lib 前缀,这是刻意设计的,后面使用该库文件时会用到这个设计),即是我们需要的静态Lib 库文件。

“MCUXpresso

回到官方SDK 包里原始的 hello world 例程里,此时我们尝试使用这个 liblpuart_drv.a 文件,我们将工程目录下的 fsl_lpuart.c 文件替换成 liblpuart_drv.a 文件,直接编译发现报错,无法找到 LPUART 相关驱动,显然工程并没有直接识别库文件(这是跟 IAR, MDK 不一样的第二个地方),这时候需要更新下工程选项,在 C/C++ Build / Settings / Tool Settings / MCU Linker / Libraries 里添加 liblpuart_drv.a 库(包括名字和路径),这里特别注意库名字仅需要填lpuart_drv,不需要 lib 前缀(这就是前面所说的MCUXpresso IDE 特意设计)。此时再编译工程,就一切正常了。

“MCUXpresso

三、静态链接库和共享链接库差异

在MCUXpresso IDE 下我们接触到了两种库 Static Library 和 Shared Library,最后再简单介绍下它俩的差异。

静态库是一些 .o 目标文件的集合,一般以 .a/.lib 形式结尾。静态库在程序链接阶段使用,链接器将程序要用到的函数从库中提取出来,并整合到程序中,程序运行不再使用静态库了。由于每个程序要用到函数都从库提取并整合在一起,所以可执行文件会比较大。

共享库即动态链接库,在 Linux 中以 .so(share object) 为后缀,在 Windows 中以 .dll 为后缀。程序开始启动运行时,加载所需的函数,程序运行时也需要共享库的支持。共享库链接出来的文件比静态库要小得多。

所以这其实就是链接方式的差异,链接(Link)是程序被装载到内存运行之前需要完成的一个步骤。链接本身分为静态链接(Static Link)和动态链接(Dynamic Link)两种方式。

而在嵌入式 MCU 世界里,我们通常都是用静态链接这种方式。

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

围观 136

作者:Stella Or

开发边缘连接技术的原始设备制造商(OEM)需要考虑其软件知识产权以及作为安全产品提供商的声誉。经济高效的生产往往会与保护云端所用的知识产权和器件认证直接冲突。恩智浦认为永远不能牺牲安全性,并提供了具有新的智能卡可信配置(Smart Card Trust Provisioning)功能的解决方案。

“恩智浦使用MCUXpresso

安全是恩智浦的核心。我们不仅希望我们器件或软件的每个元件都是安全的,还希望使每个客户制造的产品都是安全的。即使制造场所本身不能提供强有力的安全保障,但有了高度安全的技术,制造流程也应该是安全无虞的。借助全新的智能卡可信配置解决方案,恩智浦推出了各种功能,支持OEM保护其知识产权及其收入。此解决方案利用我们的智能卡和MCUXpresso安全指配工具(SEC),为客户提供了一种管理其制造流程信任根的方法。此外,此解决方案还能保证客户用于识别OEM产品及其软件知识产权的保密信息(密钥和凭证)受到了保护。这是一款经济高效、安全可靠的解决方案,适用于各种规模的客户,并利用恩智浦高度安全的SmartMX微控制器(MCU)来实施智能卡本身,这项技术多年来一直为高安全性应用提供支持。

即刻了解。了解智能卡可信配置解决方案的工作原理。

许多客户花费数月或数年为其最终产品开发软件,包括认证和知识产权,这些是客户最宝贵的资产。智能卡可信配置解决方案支持将安全认证和知识产权从客户驻地部署到委托工厂。我们的MCU在ROM中内置了安全启动功能,可确保只运行签名的镜像。MCU还包括基于物理不可克隆函数(PUF)技术的安全闪存和器件唯一密钥生成功能。客户认证和知识产权在其可信开发场所使用MCUXpresso SEC工具进行签名和加密,只能由恩智浦正版器件进行验证和解密。

认证,例如客户应用中使用的密钥,可在密封之前被安全地存储在智能卡中,以防篡改。这样,智能卡就像硬件安全模块(HSM)一样成为安全的基本元件。然后,这些认证可以安全地传输到客户终端产品内部的目标器件,而不会暴露在合同制造商(CM)工厂。使用SEC工具,只有具有相应内置恩智浦证书的正版器件才能配备客户的密钥,并使用客户签名的软件进行编程。即使是从运行SEC工具的主机到客户目标系统的最后一步,在指配和编程期间,该计算机与恩智浦MCU之间的安全链路也会受到保护。

CM工厂的生产过剩也可能是许多原始设备制造商关注的问题。智能卡可信配置解决方案提供了基本的生产管理功能(即生产限制控制)来解决这一问题。客户获得SEC工具时可以对智能卡进行个性化设置并限制生产数量,同时为其CM创建生产包以用于制造其产品。一旦到达工厂,执行器件配置的SEC工具就会与智能卡通信,安全清点制造产品的数量,防止任何试图超过预设限值的行为。SEC工具在生产流程结束时生成工厂审核日志,供CM返回客户现场进行审核。

“”智能卡可信配置流程图"
智能卡可信配置流程图

在每个安全的边缘连接应用中,每个器件都需要唯一的身份才能进行云注册。恩智浦从设计微控制器开始就构建了配置流程,并在制造流程将加密密钥和数字证书注入工厂的这些设备中,以供在客户的制造流程中使用。我们的客户可以生成自己的器件唯一证书,并采用SEC工具替换(或撤销)默认的恩智浦器件证书,从而使用智能卡生成证书并保护。这样,他们能够在出厂指配期间获得器件的所有权,并使用SEC工具生成的审核日志来获取生成的器件证书。然后,这些器件证书可用于上传给服务提供商,以便在器件注册时使用。

智能卡配置解决方案取代了传统的、更昂贵的HSM和第三方设备编程服务。我们使客户能够充分利用恩智浦MCU的高级安全功能来保护他们的重要资产。我们的客户通过购买高性价比的智能卡和使用免费的MCUXpresso SEC工具,可以准备安全的镜像来保护他们的知识产权、管理密钥和执行设备指配。由于没有最低订单量和对生产数量的完全控制,智能卡配置解决方案使所有人都负担得起安全制造。

作者:

“Stella
Stella Or
恩智浦半导体边缘处理业务部生态体系安全高级产品经理

Stella Or在香港理工大学获得软件技术理学硕士学位。Stella在半导体行业有20多年的经验,一直专注于物联网和金融应用的嵌入式安全解决方案,担任过多个职位,包括产品定义和业务开发。目前,Stella负责恩智浦生态体系安全解决方案的市场战略和路线图规划,其中包括针对MCU和MPU的安全配置、远程设备管理和运行时安全。

围观 23

本文曾发表在“恩智浦技术社区”。

在MCU运行过程中,实时测量板卡电流、电压对系统功耗稳定有很积极的意义,尤其是对电压电流波动敏感的场景,收集和分析高频样本显得格外重要。

MCUXpresso IDE集成了电能测量功能,可以实时测量开发板的电流与电压,计算实时功耗,本文基于MCUXpresso IDE v11..4.0主要讲解电能测量功能的使用。

1. 电能测量原理

目前MCUXpresso IDE电能测量功能支持以下开发板:

  • LPCXpresso546x8/540xx/54S0xx

  • LPCXpresso54102

  • LPCXpresso51U68/54114

  • QN9090-DK006/ JN5189-DK006/ IOTZKB-DK006

  • QN9080DK

电能测量实际上是利用开发板上的LPC-Link2/MCU-Link调试器,采集A/D转化芯片的转化值,并进行软件计算得出电能测量结果。

以LPCXpresso54628开发板为例,如下为电能测量部分电路图:

“如何在MCUXpresso

MAX9634TEUK+T为精密电流放大器,ADC122S021为12位A/D转换器,双通道采样,速率可达200ksps。ADC122S021采集LPC54xx_CURR与SHLD_CURR电压,IDE提前设定好Target resistor(图中Total Rvsense)与Shield resistor(SHLD_CURR对应的阻值),LPC-Link2调试器采集AD转化值就可以计算出电压、电流与功耗信息。

2. 电能测量测试

以LPCXpresso54628开发板为例,打开菜单栏Analysis-> Energy Measurement,在屏幕右下角会出现EnergyMeasurement界面,其分为Plot绘图与Config配置界面。

测量时可以在Debug状态下使用,也可以在非Debug状态下使用。

测试LED小灯闪烁案例,观察电压、电流与能耗的变化。

注意LPC-Link2调试器版本应该为CMSIS-DAP probe version5.147及以上版本。

2.1 非Debug状态下的使用

点击EnergyMeasurement界面的按钮,在Config界面选择被测量,可以选择目标电压、目标电流、屏蔽电流,采样率可以选择50ksps、62.5ksps、100ksps,选择被测开发板型号,选择目标电阻与屏蔽电阻阻值,目标电阻阻值根据图一的跳帽说明进行选择,屏蔽电阻阻值是开发板固定阻值,如下:

“如何在MCUXpresso

被测量选择目标电压,点击运行EnergyMeasurement 界面按钮,可以在Plot界面看到电压的细微波动,同时可以通过Horizontal Measurement划定区域查看电压均值,如下:

“如何在MCUXpresso

被测量选择目标电流,在测量目标电流前先在Config界面点击Read from target,可以求出0.5s内目标电压均值,用于后续的功耗计算。点击运行按钮,可以在Plot界面看到目标电流随着小灯闪烁进行细微波动,同时通过Horizontal Measurement划定区域查看电流均值、功耗与能耗,如下:

“如何在MCUXpresso

2.2 Debug状态下的使用

在Debug状态下使用时,可以使用MCUXpresso IDE也可以使用keil,进入调试状态,点击Energy Measurement界面的按钮,可以在Debug状态下进行功耗读取,测量过程同非Debug状态相同,如下:

“如何在MCUXpresso

可以参考MCUXpresso目录下的文件:MCUXpresso_IDE_Energy_Measurement.pdf

以下是讲解视频:

“”

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

围观 24

引言

本文介绍了如何使用MCUXpresso Config Tools来快速生成一个可用的USB composite device的demo,以便节省时间直接进行USB应用层的开发,而不必关注USB协议栈及底层的配置。

文详细介绍了如何利用Config Tools生成USB Composite Device工程的全部步骤,并且还会介绍,如何将这些代码porting到IAR等不同IDE中进行开发。

组合设备介绍

USB的composite类是指在一个USB设备中,实现多个不同功能的特殊USB类,如一个设备实现鼠标加键盘或者U盘加键盘的功能。

实际上,USB composite类几乎可以将任意的USB功能进行组合,并且组合的数量也不局限于两个,只要端点资源够多,可以组合三个或多个功能于一个设备上。

在USB中,还存在有一种compound device的概念,它与composite device都可以译作复合设备或组合设备,但是它们是两个完全不同的概念。

USB compound device(USB复合设备)中内嵌Hub和多个功能,每个功能都是独立的USB设备,有独立的VID与PID,从实现层面上讲就是一个物理设备实现了一个Hub和多个物理设备。

USB composite device(USB组合设备)中只有一套VID与PID,通过不同的接口将这同一个设备定义为不同的功能的组合。而不同功能的实现依赖于不同的类接口的合并。

环境搭建

本文使用i.MX RT1060-EVK板作为演示对象,所使用的MCUXpresso IDE(以下简称MCUX)版本为v11.4.0,其中内置了v10.0.0版本的Config Tools,使用内置的Config Tools所生成的工程,可以直接在MCUXpresso IDE内编译下载,下一章将会介绍如何将生成的代码集成到IAR中进行编译下载运行。

在使用MCUXpresso生成工程时需要加载SDK到MCUXpresso环境中,本文使用的SDK版本为2.10.0。

以下例子是生成了一个包含CDC VCOM、MSC、HID Mouse三个类功能的组合设备。

配置工程

首先需要创建工程。

进入MCUXpresso IDE界面后,点击New project进入创建工程界面,选择evkmimxrt1060板,点击next,进入config界面,点击middleware选项卡,选中USB Device和USB PHY选项, USB Common Header会被自动勾选,最后点击Finish完成工程创建。

具体步骤如下图:

“手把手带您使用MCUXpresso

完成工程的创建后,选择ConfigTools选项卡下的Peripherals,进入工程配置界面,在左侧Components窗口下,点击Middleware右侧的加号,弹出选择界面,在选择界面中选中USB,点击OK。操作步骤如下图所示。

“手把手带您使用MCUXpresso

此时,我们已经将USB中间件添加进入配置,刚添加进入后会发现右下角的Problems界面内会报两条错误,为了解决其中的时钟错误,首先还是在ConfigTools选项卡内,选择Clocks,进入Clock配置界面,选择Clock Outputs界面中的USBPHY1 PLLclock,然后在右侧的Details界面内Enable USBPHY1 clock output,具体步骤如下图所示。

“手把手带您使用MCUXpresso

返回Peripherals界面,时钟的错误已经消除,下面开始添加USB的功能接口,在刚才添加的USB1的主界面内根据自己的需求修改device的VID及PID。

点击Supported interfaces选项旁边的加号,添加一个interface,会生成一个interface0,默认新添加的interface的类都是DFU,在右侧Class下拉菜单中选择想要实现的组合设备中的第一个类。此处需要注意的是,CDC VCOM的实现需要用到两个子类interface,分别是用于管理和控制的通信类接口CIC与用于传输数据的数据接口类DIC,在Config Tools中需要分别添加两个interface组成来一个CDC VCOM的功能。

添加两个interfaces,分别设置类为CIC VCOM及DIC VCOM。Config Tools添加interfaces时,是按照顺序使用端点号及interface号,这里我们不修改任何参数,直接使用默认的数据,如果应用层有特殊需要的,也可以修改端点的相关参数来满足需求。

第一个CDC VCOM类的功能添加完成后,开始添加第二个MSC类的interface,仍然是点击加号,修改Class为MSC,其余的配置都保持默认。

最后进行HID类的配置,仍然是点击加号,添加新的interface,修改Class为HID,在右侧的Present下拉框内选择Mouse,需要使用自定义HID报告的应用可以选择None,并且自己进行Endpoints和report的配置。

所有配置过程如下图所示:

“手把手带您使用MCUXpresso

在所有类的interfaces添加完成后,点击上方菜单中的UpdateCode,在弹出的对话框中,可以看到本次配置对哪些文件产生了影响,此处需要注意的是,需要前两个board文件夹下的4个文件的默认勾选去除掉,然后点击OK,完成代码的生成。

具体步骤如下图所示。

“手把手带您使用MCUXpresso

在生成完成代码后,MCUX会自动跳转回工程开发界面,打开source目录下的与工程同名的.c文件,在头文件处添加’ #include "usb_device_composite.h"’,并且将主循环里的内容替换为USB_DeviceTasks();。

修改的步骤如下图所示。

“手把手带您使用MCUXpresso

完成上述修改后即可编译下载到RT1060-EVK板上进行测试。下载完成后按下EVK板的reset键,连接USB1口到PC的USB口,打开设备管理器可以看到生成了一个新的composite device,并且同时,还可以在各个设备类下面查找到实现的相应的设备,并且这些设备的PID\VID相同,都是在配置界面内所配置的PID\VID,如下图所示。

“手把手带您使用MCUXpresso

移植到IAR环境

先要准备一个IAR的工程。

在SDK生成器中下载一个带有完整的USB stack的SDK包,然后在同样的页面内下载一个Standalone的示例工程,如下图所示。

“手把手带您使用MCUXpresso

根据所要生成的Composite Device所含的类的种类,选择SDK中的某单一类的工程,例如,本应用笔记中的Composite Device包含了三个类,在生成单独的工程时,选择dev_hid_mouse_bm的工程。

接下来需要添加和删除一些文件

上一节中生成的工程中,只包含了HID类的相关文件,所以我们需要朝工程内添加两部分的文件,以实现composite device的功能。

第一部分的文件是USB stack相关的文件,这也是为什么我们需要一个完整的SDK包的原因,从SDK包的middleware\usb\output\source\device\class\目录中将MSC类及CDC类相关的文件添加到工程中。如下图所示。

“手把手带您使用MCUXpresso

第二部分文件是由Config Tools生成的文件,这部分文件在MCUX的工程目录下能够找到,将Config Tools生成的文件复制到IAR工程目录下,并且如下图所示将它们添加进工程。

“手把手带您使用MCUXpresso

在完成文件的添加后还需要把原本source目录下的文件从工程中去除,以免除本来工程里的文件与工具所生成的文件产生的冲突。由于使用的基工程是HID Mouse的demo工程,还需要将usb目录下的dcd目录下的文件从工程中去除,否则工程会报错。

需要注意的是,在把所有的文件添加进工程以后,需要在配置里将保存相应头文件的目录添加到include directories中。

完成上述工作后,即可编译下载,运行效果与前一章的效果一致。

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

围观 557

相信大家对MCUXpresso IDE并不陌生,没少和这款IDE打交道来进行工程的构建、调试等,不过,小编在这里要问大家一个问题,你们平时是不是都是调试自带的SDK例程,没有单独调试过其他工具链所构建的应用镜像呢?反正小编,的确不曾这样干过,那么MCUXpresso到底行不行呢?请大家跟着小编来一窥究竟。

不熟悉MCUXpresso的朋友更应该试试。

在正式开始之前,我们需要对我们的MCUXPresso进行一点小小的更新,需要安装一个小插件,依次点击Help-》Eclipse Marketplace,搜索Eclipse Embedded C/C++,点击安装。如下图所示:

“用MCUXpresso调试其它工具链生成的项目"

那么为啥这个小插件能这么神奇呢?我们先来看段英文原版介绍:Eclipse Embedded CDT is an open source project that includes a family of Eclipse plug-ins and tools for multi-platform embedded cross (Arm and RISC-V) development, based on GNU toolchains. the Eclipse Embedded CDT plug-ins allow to create, build, debug and in general to manage Arm & RISC-V projects (executables and static/shared libraries, in both 32 and 64-bit versions) with the Eclipse framework (currently tested up to Eclipse 4.18, 2020-12). The plug-ins run on Windows, macOS and GNU/Linux.
首先,我知道MCUXpresso是基于Eclipse CDT开发的(不用问我怎么知道的),从上面这段画我们就知道了这个小插件是专门用于Eclipse CDT平台,来调试多平台嵌入式设备的。

可能有朋友会问了,真有这么神奇吗?让我们眼见为实,当安装完这个插件后,我们的MCUXpresso会发生一些小变化,尤其是在Debug Configuration选项框,先来看看原始的样子:

“用MCUXpresso调试其它工具链生成的项目"

安装那个插件后,这是最新的样子,会多出一些选项:

“用MCUXpresso调试其它工具链生成的项目"

现在就来敲黑板划重点了,为啥非要安装这个插件呢?我们的MCUXPresso本身就支持调试嵌入式代码啊,为啥还要多此一举呢?

这里我们以使用SEGGER J-Link进行调试为例,结合具体操作步骤进行说明。

首先是导入我们的镜像文件,这里以hello_world.axf镜像文件为例:

1)点击File->Import,在弹出的页面选择C/C++ Executable, 之后点击Next:

“用MCUXpresso调试其它工具链生成的项目"

2) 选择我们想要调试的镜像文件,这里的Select binary parser按照默认选择Elf Parser即可,点击Next:

“用MCUXpresso调试其它工具链生成的项目"

3)工程配置,生成调试配置文件,这里要注意一定要选择GDB SEGGERJ-Link Debugging,细心的朋友肯定已经看出来了,这个就是我们安装完Eclipse Embedded CDT插件之后更新出来的新选项,也是调试成功的关键。最后点击Finish即可完成工程创建。

“用MCUXpresso调试其它工具链生成的项目"

而如果这里按照以前的习惯选择了GDB SEGGER Interface Debugging的话,会弹出下面这个提示,导致调试失败。

“用MCUXpresso调试其它工具链生成的项目"

这里小编先大胆的猜测一下,我们用上述方式所导入创建的工程并不是MCUXpresso默认的工程形式,而是默认的Eclipse工程,这样的话,就会出现配置不兼容问题,导致调试失败。而也正是因为这一点,小编在开头才让大家去安装我们的Eclipse Embedded CDT插件。

通过以上步骤,我们的工程就创建完成了,距离调试还差最后一步,那就是我们的Debug Configuration,依次点击Run->Debug Configurations,弹出对话框如图所示,我们需要做的是填入我们的设备名称,并添加我们的调试工具路径,例如这里我们使用arm-none-eabi-gdb进行调试,这里就需要添加其可执行文件的完整路径:

“用MCUXpresso调试其它工具链生成的项目"

配置好后,直接点击Debug即可开始调试我们的代码,开心ing:

“用MCUXpresso调试其它工具链生成的项目"

经过小编的实地考察,最终为我们的MCUXpresso正名,通过安装扩展插件,它是可以单独进行镜像的调试的。

不过,需要注意的是,我们要保证完整的源码树路径在我们的本机中,不然,可能看不到熟悉的C代码,只能在汇编中徜徉了。

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

围观 69

引言

华芯微特公司SWM系列单片机提供的TIMER个数和功能有些微差别,为了让您更加简单的使用这一功能,下面小编将以SWM190为例,我们今天详细讲解一下TIMER的输入捕获功能。

TIMER输入捕获

一、TIMER定时器之输入捕获功能

我们今天详细讲解一下TIMER的输入捕获功能。

SWM190提供了一个用于捕捉外部脉宽的模块,可记录外部单个脉冲宽度,可通过读取相应寄存器获得脉冲高低电平的宽度。

每一个TIMER都可以配置中断。使能中断后,脉冲捕获完成会触发中断操作,如果不操作使能位,则持续记录电平宽度,直至使能位关闭。

二、SWM190 TIMER脉冲捕获功能配置库函数

下面我们以脉冲捕获为例,使用加强型定时器,使用TIMR0的Input Capture功能测量输入PWM的占空比。在此例程中,我们将使用PWM产生PWM波来产生测试信号供Input Capture功能测量;使用B6作为TIMER0的输入捕获IO口,并将测量的高电平脉冲和低电平脉冲通过串口打印。

我们之前有讲到PORT的配置方法,在这里就不在做赘述,将B6引脚通过PORT_Init设置为TIMER的输入功能引脚(PORTB_PIN6_TIMR0_IN)。

在SWM190固件库中对TIMER的配置进行了说明,下面将根据库函数对SWM190的TIMER配置,首先来看一下TIMR_Init函数的原型void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t prediv, uint32_t period, uint32_t int_en)。这个函数的实现是在SWM190_timr.c文件中,若要使用该函数在相应的应用程序的前面包含SWM190_ timr.h头文件。

函数的第一个参数为TIMR_TypeDe,它是一个结构体类型,该类型在SWM190.h中被定义。具体参数为指定TIMER模块,有效值包括TIMR0,TIMR1,TIMR2,TIMR3,BTIMR0,BTIMR1,BTIMR2,BTIMR3;

第二个参数为uint32_t mode,为TIMER模式配置,有效值包括TIMR_MODE_TIMER(定时器)、TIMR_MODE_COUNTER(计数器上升沿)、TIMR_MODE_OC(输出比较)、TIMR_MODE_IC(输入捕获);其中基础定时器只支持TIMR_MODE_TIMER(定时器);

第三个参数为uint32_t prediv,为TIMER分频配置,其中加强型定时器无分频只能为1;基本定时器可取值1-256;

第四个参数为uint32_t period,为计数周期,其中加强型定时器为32bit,基础定时器为24bit。

第五个参数为uint32_t int_en,为中断使能。

我们的函数配置为:

TIMR_Init(TIMR0, TIMR_MODE_IC, 1, 0xFFFFFFFF, 0);

在TIMR_Init函数中,使用TIMER0;模式选择输入捕获;不分频;计数周期为0xFFFFFFFF;不使能中断(此中断在TIMR_IC_Init函数中使能)。

我们接下来看TIMR_IC_Init(TIMR_TypeDef * TIMRx, uint32_t captureH_int_en, uint32_t captureL_int_en)函数。

函数的第一个参数为TIMR_TypeDe,它是一个结构体类型,该类型在SWM190.h中被定义。具体参数为指定TIMER模块,有效值包括TIMR0,TIMR1,TIMR2,TIMR3;

第二个参数为captureH_int_en,为测量高电平长度完成中断使能;

第三个参数为captureL_int_en,为测量低电平长度完成中断使能;

我们的函数配置为:

TIMR_IC_Init(TIMR0, 1, 1);

TIMR_IC_Init函数中配置为使用TIMER0;高电平捕获完成中断使能;低电平捕获完成中断使能;

值得一提的是,在TIMR_IC_Init库函数中,默认如果使能了高/低电平捕获完成中断使能,则就使能对应TIMER的中断。

我们使用加强型定时器0实现timer获取B1引脚上的PWM波形的高低电平,当捕获完成则进入TIMER中断,在中断中读取高电平脉冲和低电平脉冲宽度,并通过串口打印数据。

具体配置函数如下图所示:

“MCU之TIMER输入捕获"

接下来我们看下中断服务子函数,在加强型定时器的中断服务函数中,实现每完成一次高/低电平捕获,则通过串口打印脉冲的高/低电平宽度。

“MCU之TIMER输入捕获"

三、实验现象

下载好程序后,将B1脚和B6脚物理连接,并通过串口线将单片机与电脑连接,可在电脑端通过串口助手得到B1脚的PWM波形的高/低电平宽度。

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

围观 304

页面

订阅 RSS - MCUXpresso