天南地北客
发表于: 2018-9-14 22:57:19 | 显示全部楼层

本应用笔记描述了如何从在PC上运行的终端窗口控制STM8 Nucleo-64开发板,该终端通过RS232电缆连接到STM8S208RBT6(对于NUCLEO-8S208RB)或STM8L152R8T6(对于NUCLEO-8L152R8)的UART。


将所需组件添加到开发板并下载应用软件后,用户可以使用终端软件管理STM8S系列或STM8L系列的GPIO和TIM3定时器,并且可以配置蜂鸣器输出。


1    前提条件

运行STM8 Nucleo-64开发板终端演示应用程序所需的组件如下:

•    在PC上运行的终端窗口:终端仿真器软件可以是Windows HyperTerminalTeraTerm 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系列应用原理图

图1.   STM8S系列应用原理图.jpg


图2.   STM8L系列应用原理图

图2.   STM8L系列应用原理图.jpg


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.  主函数流程图

图3.  主函数流程图.jpg


4.3.2    App_menu函数

App_menu函数是主要的应用程序。 它在终端上显示一个菜单,可以配置GPIO、TIM3和BEEPER。 App_menu调用GetInputString、GetIntegerInputSerialPutString通过RS232接口发送和接收数据。

图4.   App_menu流程图

图4.   App_menu流程图.jpg


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函数流程图

图6. Get_key函数流程图.jpg


4.3.5   SerialPutString和SerialPutChar函数

SerialPutString函数用于通过UART发送字符串。 字符串字符通过SerialPutChar函数逐个发送,按照下面的流程图所述。

图7.   SerialPutString流程图

图7.   SerialPutString流程图.jpg

图8.   SerialPutChar流程图

图8.   SerialPutChar流程图.jpg


4.3.6   GetIntegerInput函数

GetIntegerInput函数用于检查传入数据是否对应于整数。 如果是,则数据存储在存储器中,否则提示用户输入新数据。

图9.   GetIntegerInput流程图

图9.   GetIntegerInput流程图.jpg


5.    修订记录

表5.  文档修订历史记录

日期
版本
更改内容
2018年6月29日
1
首次发布。

跳转到指定楼层
Ableson
发表于: 2020-4-15 16:49:50 | 显示全部楼层

:lol
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 10 | 回复: 18



手机版|

GMT+8, 2024-4-26 07:15 , Processed in 0.049957 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表