ESE模块3 Hello World LED闪烁
作为初学者的第一个练习,一般都是简单地Hello World LED闪烁。本次教程虽是在一个全新的开发环境中,但是SiSy平台提供全面的类库帮助用户快速轻松的学会编程。
任务
UML就是面向对象的延申,我们需要使用面向对象的思维去理解整个教程。面向对象的特点是增加抽象从实际的内部结构和机器的内部行为向用户相关的角度增加抽象性。
任务是:
用户应能看到微控制器正在工作。通过使LED闪烁频率来显示微控制器的状态。 StausLED模块连接到端口B0。
准备工作
如果仍可以打开上一个类图,请在图的上下文菜单(鼠标右键)中选择菜单项。 如果上一个项目已关闭,就重新创建一个新的类图并选择语言ARM C ++。 注意目标平台STM32F042 mySTM32 Board light HAL的设置。 打开图(向下单击鼠标右键)时,可从SiSy LibStore加载PEC应用程序(XMC,STM32,AVR)的图模板应用程序基本结构。 为STM32F0分配驱动程序包。
进行以下准备工作:
- 创建一个新的类图
- 目标语言ARM C ++
- 目标平台STM32F042 mySTM32板灯HAL
- 打开图表时(向下单击鼠标右键),可以从SiSy LibStore下载PEC应用程序(XMC,STM32,AVR)的图表模板应用程序基本结构
- 为STM32F0分配驱动程序包
- (可选)模板stm32F042_48Mhz,以全48MHz功率运行控制器
解决路径
任务是LED指示灯表示控制器的状态。如果遵循面向对象的概念,则StatusLED是系统的组件。我们将UML中的系统组件映射为类。 在类图中已经看到了这些的系统组件。
控制器
现在我们还需要一个StausLED的类。
这两个组成部分相互关联。 作为初学者,先学习两种类型之间的关系,“是”关系和“有”关系。 在控制器和LED之间,可译为控制器上有StatusLED。我们可以将UML中的“具有”关系与“聚合”很好地映射。“聚合”在UML中以箭头开头显示为菱形。代码生成器将其转换为类属性。该属性的名称和可见性可以在箭头上看到。类名称应始终以大写字母开头。属性和操作都为小写。
无需打过多的代码,而是要利用可用的PEC库的便利性。 适用于此任务的PEC组件是PecPinOutput。 StatusLED和PecPinOutput之间的关系可以描述为“是”,实现关系,可翻译为PecPinOutput是StatusLED并实现StatusLED功能。
StatusLED和PecPinOutput之间的关系可以映射为“是”关系。 在这种情况下,我们使用UML实现。
可以很好地读取此表示形式以进行验证,如图所示:
控制器具有状态LED。 StatusLED是一个PecPinOutput。
这是一个非常有用的软件设计图,还缺少控制器上特定引脚的分配以及用于打开StatusLED的实际逻辑,把剩余的工作留给实现部分。所需功能可以在右侧活动图中看到。
- 注意: 系统模块 = 类
- 注意: “有”关系 = 聚合或组合
- 注意: “是”关系 = 实现或继承
- 注意:类名=开头总是大写字母
- 注意:属性和操作=始终以小写字母开头
实现
实现中应包括上述设计图中描述的元素。 引脚B0以实现关系连接到StatusLED。可以通过资源管理器找到相应的PEC块 ,也可以在PecPinOutput上点击小问号。如下图所示:
我们一步一步进行设计,先将一个类从对象库拖到图中,并命名为StatusLED。
然后将Controller类连接到StatusLED类,选择聚合关系(系统自动提醒)。
在资源管理器中搜索PEC库块PecPinOutput, 将此元素拖到图上。
将PecPinOutput库块连接到StatusLED类,选择实现作为连接类型。
使用资源管理器找到库块pinB0,将此块拖到图中,也可以点击小问号按钮获取pinB0。
将pinB0连接到StatusLED类,选择实现作为连接类型(系统自动提示)。
遵循这些步骤来获得如下所示的设计。清楚地排列元素。 类图是非常有用的文档编制方法。
该软件设计图可以按以下方式“阅读”:
- 中心类为控制器Controller(应用程序类)
- 具有onStart和onWork的行为特征(操作)
- 控制器是 PecAppKernel
- 全局对象app是应用程序类Controller的实例
- 类Controller有一个StatusLED,其属性名为statusLED
- 控制器类的statusLED属性为public公开的
我们注意到在Controller类的onWork()操作中,LED闪烁的实际行为逻辑是C ++代码。为了使LED闪烁,我们设置周期性切换LED。 为了让眼睛可以感知到这种切换,我们再做个暂停的设置。
PecPinOutput库块提供的选项显示在右侧。 在onWork操作中写下以下代码:
// continuous event from the Mainloop // 来自主循环的连续事件 statusLED.toggle(); waitMs(200);
请将上下俩种代码的解决方案进行比较:
// continuous event from the Mainloop // 从主循环连续事件 statusLED.on(); waitMs(50); statusLED.off(); waitMs(200);
测试
学习总结
- 创建并打开类图
- 为PEC应用选择图表模板,下载并插入STM32F0的驱动程序包
- 在导航器/资源管理器中找到PEC块
- 将所需的库元素拖到图中
- 将类相互连接(聚合,实现)
- 在操作中创建必要的源代码
- 在类图中创建并刻录ARM应用程序
视频总结
练习1
请通过引脚B1扩展另一个ErrorLED应用程序。使ErrorLED和StatusLED相继闪烁。