本应用笔记描述了如何从在PC上运行的终端窗口控制STM8 Nucleo-64开发板,该终端通过RS232电缆连接到STM8S208RBT6(对于NUCLEO-8S208RB)或STM8L152R8T6(对于NUCLEO-8L152R8)的UART。
将所需组件添加到开发板并下载应用软件后,用户可以使用终端软件管理STM8S系列或STM8L系列的GPIO和TIM3定时器,并且可以配置蜂鸣器输出。
1 前提条件 运行STM8 Nucleo-64开发板终端演示应用程序所需的组件如下: • 在PC上运行的终端窗口:终端仿真器软件可以是Windows HyperTerminal、TeraTerm Pro或其他终端软件。 • RS232零调制解调器电缆(发送线和接收线交叉连接)。
2 配置NUCLEO-8S208RB开发板 在运行应用程序之前,NUCLEO-8S208RB开发板(基于STM8S208RBT6器件)必须配置为启用蜂鸣器输出。蜂鸣器输出是STM8S208RBT6复用功能。通过将OPT2选项字节中的复用功能重映射选项位AFR7设置为“1”启用该功能。 注意:NUCLEO-8L152R8开发板(基于STM8L152R8T6器件)不要求用户检查或激活复用功能或蜂鸣器。
3 应用说明 3.1 硬件要求 该应用使用STM8 Nucleo-64板载的LED(LD2)及其相连的电阻(R1)。应用程序所需的外部无源组件列于下表中。 表2. 无源组件列表 元件 | 值 | B1蜂鸣器 | - | C1、C2、C3、C4、C5电容 | 100 nF | DB9连接器 | - |
该应用还使用一个5V供电的RS232驱动器/接收器ST232B (更多详细信息,请参见下表)。这个额外的元件必不可少,因为PC的COM端口使用标准的12 V电源供电。这个与STM8S系列或STM8L系列器件的UART输入/输出不兼容,其工作在5V。该器件采用SO16封装,符合STM8 Nucleo-64开发板的封装。更多有关ST232B的信息,请参阅ST232B数据手册。 表3. 元件列表 型号 | 元件描述 | 封装 | ST232B | 超高速超低功耗5V RS232驱动器/接收器, 用于UART 5/12 V电平转换器 | SO16 |
3.2 应用原理图 下图显示了应用电气原理图。 如果RS232电缆不是零调制解调器电缆(发送线和接收线未交叉),请将U1引脚14连接到DB9的引脚2和将U1引脚13连接至DB9引脚3。 图1. STM8S系列应用原理图
图2. STM8L系列应用原理图
3.3 应用规则 此应用程序在STM8S208RBT6或STM8L152R8T6微控制器和在PC上运行的终端窗口之间建立一个标准的通信连接。通过STM8器件的UART使用RS232协议进行通信。必须将终端窗口和UART两者配置成同样的方式。 本文档仅介绍STM8 Nucleo-64开发板UART端的通信和数据处理。有关Windows HyperTerminal或类似软件的详细信息,请参阅Microsoft帮助或供应商网页。
3.3.1 运行应用程序 要运行该应用程序,请执行以下步骤: 1. 在PC上启动并配置终端窗口(参见章节B:配置终端窗口,本例使用Windows HyperTerminal)。 2. 使用ST Visual Develop(STVD)或其他工具链编译并运行应用程序固件。 3. 通过RS232电缆将PC连接到STM8 Nucleo-64开发板。 4. 应用程序启动后,Windows HyperTerminal上会显示一个菜单。这个菜单允许用户: - 点亮或熄灭LD2指示灯。 - 将LD2设置为闪烁模式。 - 启用/禁用蜂鸣器并选择蜂鸣声频率。 此菜单上显示的所有信息均由STM8S系列或STM8L系列微控制器发送。在HyperTerminal上输入一个按键时,会发送相应的ASCII值到微控制器,然后解码。
3.3.2 STM8 Nucleo-64开发板与终端之间的通信顺序 1. STM8S系列或STM8L系列微控制器将字符串“Enter your choice”发送到PC终端模拟器软件。 2. 终端显示字符串“Enter your choice”。 3. 用户敲击键盘上的“2”键。 4. 终端模拟器软件将相应的ASCII代码(0x52)发送回微控制器(参见附录A:标准ASCII字符代码)。 5. 微控制器对接收到的数据进行解码,回传代码0x52,以便在终端上显示,并将值“2”存储在内存中。 6. 终端模拟器软件接收代码0x52并显示“2”。 7. 用户敲击“Return”键。 8. 终端模拟器软件发回与回车相对应的代码0x0D(参见附录A:标准ASCII字符代码)。 9. STM8S系列或STM8L系列微控制器对接收的数据进行解码,发回代码0x0D,以便将其显示在终端上,并执行与选项2相关的操作。
4 软件说明 4.1 应用程序使用的STM8S系列和STM8L系列外设 此应用示例使用STM8S系列和STM8L系列标准固件库来控制通用功能。此应用程序使用以下外围设备: • STM8S系列的UART3或STM8L系列的USART3:用于与在PC上运行的终端窗口通信。它需要配置如下: - 波特率= 960 - 字长= 8位 - 1位停止位 - 无校验 - 启用接收和发送 注意:如果使用STM8L系列,则必须禁用USART3时钟。 通过轮询每个接收和发送操作来管理通信。 注意:终端窗口和STM8器件UART外设必须配置相同的波特率、字节长度、停止位数和奇偶校验。 • Timer3(TIM3):TIM3定时器配置为时基,启用中断以控制LD2闪烁速度。 • GPIOS:GPIO用于将MCU与外部硬件连接。STM8系列的端口PC5或STM8L系列的端口PB5配置为推挽输出以驱动LD2。 • BEEPER:为了驱动蜂鸣器,BEEPER外设在BEEP输出引脚上输出1、2或4 KHz的信号。
4.2 STM8标准固件库配置 4.2.1 STM8S系列标准固件库 STM8S系列标准固件库的stm8s_conf.h文件允许通过配置库来启用应用程序使用的外设功能。 需要声明以下define语句: • #define _GPIO 1启用GPIO • #define _TIM3 1启用TIM3 • #define _BEEPER 1启用BEEPER • #define _UART3 1启用UART3
4.2.2 STM8L系列标准固件库 STM8L系列标准固件库的stm8l_conf.h文件允许通过配置库启用应用程序使用的外设功能。 需要声明以下include语句: • #include“stm8l15x_gpio.h” • #include“stm8l15x_tim2.h” • #include“stm8l15x_tim3.h” • #include“stm8l15x_beep.h” • #include“stm8l15x_usart.h”
4.3 应用软件流程图 本节介绍应用软件主循环和控制数据接收/发送从/到终端窗口的函数: • App_Menu 该函数用于在终端上显示菜单,并管理用户输入的信息。 • SerialPutString 该函数用于将字符串发送到终端。 • SerialPutChar 该函数用于将字符发送到终端。 • GetInputString 该函数用于从终端接收字符串。 • GetIntegerInput 该函数用于从终端接收整数。 • Get_Key 当敲击一个按键时,该函数返回相应的十六进制代码。
4.3.1 应用程序主函数 应用程序主函数配置STM8S系列或STM8L系列外设,并启用应用程序使用的所有外设的标准中断。初始化完成后,主程序在终端窗口上显示应用程序菜单。 图3. 主函数流程图
4.3.2 App_menu函数 App_menu函数是主要的应用程序。 它在终端上显示一个菜单,可以配置GPIO、TIM3和BEEPER。 App_menu调用GetInputString、GetIntegerInput和SerialPutString通过RS232接口发送和接收数据。 图4. App_menu流程图
4.3.3 GetInputString函数 GetInputString函数用于接收和存储通过终端窗口发送的字符串。此函数依赖于Get_key函数来获取和解码每个字符(请参阅附录部分)。可以根据字符ASCII码的值执行不同的操作: • 如果ASCII码='\ b' 终端已发送一个退格。如果字符串不为空,则删除字符串的最后一个字符。 • 如果ASCII码属于{0 ... 1或... Z} 字符被存储。 • 如果ASCII码='\ r' GetInputString函数在字符串的末尾存储“字符串结束”值'\ 0'。已达到buffP [bytes_read]缓冲区中存储的最多ASCII码数。软件擦除记录的字符串,然后等待终端的另一个输入。有关ASCII代码的更多信息,请参阅附录A节:标准ASCII字符代码。 图5. GetInputstring流程图
4.3.4 Get_key函数 Get_key函数用于通过轮询UART RXNE标志来检测终端上的按键输入。 该函数返回收到的值。 图6. Get_key函数流程图
4.3.5 SerialPutString和SerialPutChar函数 SerialPutString函数用于通过UART发送字符串。 字符串字符通过SerialPutChar函数逐个发送,按照下面的流程图所述。 图7. SerialPutString流程图
图8. SerialPutChar流程图
4.3.6 GetIntegerInput函数 GetIntegerInput函数用于检查传入数据是否对应于整数。 如果是,则数据存储在存储器中,否则提示用户输入新数据。 图9. GetIntegerInput流程图
5. 修订记录 表5. 文档修订历史记录 日期 | 版本 | 更改内容 | 2018年6月29日 | 1 | 首次发布。 |
|