|
NUCLEO-8S208RB(基于STM8S208RBT6)和NUCLEO-8L152R8(基于STM8L152R8T6)开发板可用于评估所有STM8S系列和STM8L系列微控制器的主要特性。
本应用笔记简要介绍了如何使用NUCLEO-8S208RB和NUCLEO-8L152R8开发板上的GPIO和中断控制器驱动一组LED指示灯。
当微控制器(本例中为STM8S208RBT6或STM8L152R8T6)使用连接到主机电脑的USB电缆供电时,LD2和LD5指示灯(不是板载的LED)开始闪烁。 每次按下“push”按钮,中断控制器产生一个用于控制I/O的中断,然后改变LED的显示方式。
1. 应用说明 本节主要介绍了在NUCLEO-8S208RB或NUCLEO-8L152R8开发板上使用GPIO和中断控制器驱动一组LED指示灯的硬件要求、应用原理图和工作原理。
1.1 硬件要求 除用户按钮外,不需要其他的板载组件。 应用程序所需的外部组件列在下表中。 表2. 所需的外部硬件组件 外部组件 | 值 | 描述 | LD2、LD3、LD4、LD5 | - | 标准LED | R2、R3、R4、R5 | 510Ω | 保护电阻 |
1.2 应用原理图 下图显示了如何使用NUCLEO-8S208RB或NUCLEO-8S208RB开发板连接LED灯和按钮。有关NUCLEO-8S208RB或NUCLEO-8L152R8开发板的详细介绍,请参阅对应的用户手册(UM2351或UM2364)中提供的电路板原理图。 必须使用保护电阻R2、R3、R4和R5将电流限制在不损坏LED指示灯的值。按钮需要一个去抖滤波器(RC)和一个上拉电阻(R1),以避免由于按钮的机械跳动而触发中断。 图1. STM8S系列应用原理图
图2. STM8L系列应用原理图
1.3 规则 启动时,LD2和LD5开始闪烁,意味着STM8S208RBT6或STM8L152R8T6器件已成功编程。按下按钮会产生一个中断,由应用软件处理以驱动LED。 两对LED中只有一对,LD2 / LD5和LD3 / LD4同时闪烁。按钮事件触发另一对LED闪烁,同时关闭前一对LED。 LED闪烁条件如下表所述。 表3. LED配置 应用 | LED状态 | 启动时 | LD2和LD5闪烁 | 产生按钮事件 | 交换闪烁的LED对 |
2 软件说明 应用软件使用STM8S系列和STM8L系列标准固件库来控制本应用笔记的外设配置部分中描述的通用功能。
2.1 STM8S系列和STM8L系列外设配置 2.1.1 GPIO配置 该应用程序驱动MCU的I/O以使微控制器与外部硬件组件连接。该GPIO_Init()函数将按钮(STM8S208RBT6的PE4或STM8L152R8T6的PG4)配置为带中断检测按钮事件的浮动输入引脚,STM8S系列的PB2/PB3/PB4/PB5或STM8L系列的PB4/PB5/PB6/PB7用于作为推挽输出来控制LED。
2.1.2 EXTI配置 外部中断控制器通过EXTI_SetExtIntSensitivity()函数配置来处理按钮上的外部中断(STM8S208RBT6为PE4,STM8L152R8T6为PG4)。 外部中断灵敏度配置为每次下降沿触发中断,仅在按钮上检测到下降边沿(STM8S208RBT6为PE4,STM8L152R8T6为PG4)。
2.2 STM8标准固件库配置 2.2.1 STM8S系列标准固件库 STM8S系列标准固件库的stm8s_conf.h文件用于通过启用来配置库应用程序使用的外围功能。 必须存在以下define语句: #define _GPIO 1 /* enables the GPIOs */ #define _EXTI 1 /* enables the EXTI */
2.2.2 STM8L系列标准固件库 STM8S系列标准固件库的stm8l15x_conf.h文件用于配置库通过启用应用程序使用的外设功能。 必须存在以下define语句: #define _GPIO 1 /* enables the GPIOs */ #define _EXTI 1 /* enables the EXTI */
2.3 应用软件流程图 本节包含主循环流程图和中断函数流程图。
2.3.1 主循环流程图 主循环代码实现了根据按钮事件控制LED的算法。通过设置ButtonState标志位选择闪烁的LED对。 每次按下按钮,都会触发中断并置位ButtonState标志(参见章节2.3.2中断函数流程图)。主循环代码检测ButtonState标志,然后根据其值选择闪烁的LED对。 Delay()函数在LED点亮和熄灭状态之间产生一段延迟时间,以便我们可以看到它们闪烁。
下图显示了应用程序软件主循环的流程图。 图3. 主循环流程图
2.3.2 中断函数流程图 每次中断被置位时,一个特定的函数补充ButtonState标志位和主循环据此响应动作。 该函数: • 对于STM8S系列,是EXTI_PORTE_IRQhandler() • 对于STM8L系列,是EXTI_PORTG_IRQhandler()
下图显示了EXTI_PORTE_IRQhandler()和EXTI_PORTG_IRQhandler()中断函数的流程图。 图4. STM8S系列的EXTI_PORTE_IRQhandler()函数流程图GPIO
图5. STM8L系列的EXTI_PORTG_IRQhandler()函数流程图
3. 修订记录 表4. 文档修订历史记录 日期 | 版本 | 更改内容 | 2018年6月29日 | 1 | 首次发布。 |
|