完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
(一)预备知识 在上一章节中打开的helloworld工程是基于PE(Processor Expert)生成的。那么什么是PE呢?PE是CodeWarrior自带的一款插件,是面向飞思卡尔微处理器的快速应用开发工具,允许真正的自上而下的应用设计方式,设计者可以直接定义应用的行为,而不是整天耗费在芯片的学习上。怎么理解呢?童鞋们可以按这样的思路理解:以前,童鞋们使用MCU做嵌入式开发时,如果要使用MCU内部的模块,需要配置Datasheet里列出的与模块相关的寄存器,这样不但编程开发的工作量大,寄存器配置也容易出错,而且需要开发者对MCU的内部模块要有一定的了解。使用PE工具开发时,开发者可按自己需要选择要使用的模块,然后在可视化界面上定义模块的行为,定义完成后,PE会自动生成开发者所期望的模块函数,开发者只需调用模块函数就可以啊,就像搭积木一样,PE提供各种形状的积木,如何用这些积木搭建自己的应用,是开发者需要关心的地方,所以PE很适合对MCU了解不多的初学者使用。在本章中,除了教大家如何将helloworld工程修改成闪烁灯工程,PE的模块组件的添加﹑组件配置﹑代码生成及编写等操作。 (二)helloworld工程介绍 在CodeWarrior中导入helloworld工程后,在CodeWarrior的左上角选中helloworld,展开工程目录,点击,会在模块组件栏中显示工程内的组件(如图1所示)。 图1 helloworld工程和模块组件目录 在模块组件目录中,选中Blue_LED组件,会在Component Inspector的Properties中列出组件的配置参数,童鞋们可参考FRDM-KL25Z开发板的电路原理图(如图2所示)列出RGB LED的引脚分布(如图3所示),并比较在Properties中的参数配置(如图4所示)。在Blue_LED组件中I/O引脚配置为PD1,方向为输出,输出低电平可点亮LED,高电平则熄灭。Red_LED、Green_LED组件与Blue_LED组件的组件参数配置相似。 图2 RGB LED原理图 图3 RGB LED引脚对应关系 图4 Properties中的参数配置 CsIO1是UART串口组件,选中它后,在Component Inspector的Properties中显示定义UART的参数配置(如图32所示)如波特率、数据帧结构等,相信与童鞋们通过配置UART相关寄存器定义串口通信的传统方法比较要来的直观、简单的多吧。 图5 Properties中的参数配置 介绍完helloworld工程中的组件后,接下来向童鞋们介绍helloworld工程的主函数。那么工程的主函数在哪呢?在工程目录栏中的sources目录下—ProcessorExpert.c(即为主函数)(如图6所示),双击即可在代码窗口显示。主程序比较简单,相信童鞋们在仔细阅读并与上一章节中观察到的程序调试结果相结合,不难知道主程序的功能以及在主程序中被调用的函数的功能,比如:Blue_LED_SetVal(Blue_LED_DeviceData)使PD1引脚输出高电平,Blue LED熄灭;Blue_LED_ClrVal(Blue_LED_DeviceData)使PD1引脚输出低电平,Blue LED点亮,而主程序中的while循环功能为MCU在收到PC机发送的字符后,会循环的改变RGB LED三个引脚的输出电平,从而使得LED的颜色改变。 图6 ProcessorExpert.c (三)延时函数—Delay() 在原函数中,MCU只有在接收到字符后,才会更改LED颜色,如若将原函数修改成闪烁灯程序,需要添加延时函数—Delay(),下面向童鞋们介绍如何运用LPTMR(低功耗定时器)组件生成Delay()函数。关于LPTMR模块的具体介绍,大家可参考KL25的Datasheet或者观看下面的LPTMR模块介绍视频,在这就不作具体介绍啊。 LPTMR模块介绍视频 工程代码修改过程如下: i 添加组件:在开发环境界面的Components Library对话框选择Alphabetical选项卡,找到名为Inti_LPTMR的组件双击(如图34所示),即可将Inti_LPTMR组件添加到工程中,同时在Components对话框中也会出现Init_LPTMR组件。 图7 添加LPTMR组件 ii 配置组件:在添加完组件后,在Components对话框中单击LPTMR组件,会在开发环境的Component Inspector窗口打开其配置界面,在Clock Setting中,选择Clock select的值为Internal 1kHz LPO,Prescaler value/Glitch filter的值为Prescaler/2; Glitch filter not supported,Prescaler bypass的值为Not Bypassed,Timer mode的值为Timer Counter。整个配置如图35所示。 图8 配置LPTMR组件 iii 生成并编写代码 配置完组件后还不能真正运行此工程,PE所做的工作仅仅是生成用户所期望的模块函数并设置其参数,真正在哪里调用这些函数还需要开发者自己编写。 首先需要生成已配置的组件的代码,在Components对话框中选中LPTMR组件,单击 便可生成代码(如图36所示)。 图9 LPTMR组件代码生成 接下来返回到Project工程窗口,展开Sources目录并打开其中的Processor Expert.c模块,在代码窗口中可以看到该文件的内容,在其中做如下修改: ①定义延时函数—Delay()
函数功能:延时period_ms个毫秒,而且在延时完成时,还会向上位机发送“Delay is successful!!”,有利于程序调试。 ② While循环 修改while循环中的代码,将其中所有的 “InpData[0] = getchar();printf("%c",InpData[0]);”注释掉,替换成“LPTWR_Delay(500);”作延时1s处理。 ③代码修改完成后,童鞋们需要重新编译工程。 代码编译成功后,连接FRDM-KL25Z开发板进行调试,可观察到板子上的RGB LED每隔0.5秒变换颜色,同时会发送“Delay is successful!!”到PC机,可通过串口猎人工具观察到(如图37所示),而且为了让调试结果更加直观,也录制了一段视频供大家参考,并附上修改完成后的helloworld工程。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1908个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36358 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4397 浏览 0 评论
6052 浏览 1 评论
6764 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4214 浏览 0 评论
619浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
615浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
606浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
694浏览 2评论
798浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 10:06 , Processed in 1.322689 second(s), Total 98, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号