天南地北客
发表于: 2018-9-17 10:50:49 | 显示全部楼层

NUCLEO-8S208RB(基于STM8S208RBT6)和NUCLEO-8L152R8(基于STM8L152R8T6)开发板可用于评估所有STM8S系列和STM8L系列微控制器的主要特性。


本应用笔记演示了如何基于STM8 Nucleo-64开发板和LM235精密温度传感器制作一个简单的温度计。 STM8S208RBT6或STM8L152R8T6微控制器(取决于相应的开发板)读取温度值并通过UART接口传输。然后,PC通过RS232或FTDI电缆连接到UART接口,温度值显示在PC的终端窗口(可以是Windows超级终端)上。


一旦STM8 Nucleo-64通过连接到主机PC的USB电缆上电,终端窗口上会显示一条信息性消息,并提示用户输入最低和最高温度阈值。

当前温度每分钟显示在终端窗口上,并在温度超出范围时显示警告信息。

一小时内温度的最小值和最大值每小时记录在MCU的数据EEPROM中一次。可随时通过按下按钮显示它们。


1    前提条件

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

•     在PC上运行的终端窗口:终端仿真器软件可以是Windows HyperTerminalTeraTerm Pro或其他终端软件。

•     RS232零调制解调器电缆(发送线和接收线交叉)或USB TTL串行电缆。

•     USB A转至mini-B电缆。


2     应用说明

2.1     硬件要求

该应用使用STM8 Nucleo-64开发板的板载LED(LD2)及其相连的电阻(R1)。

应用程序所需的外部无源组件列于下表中。

表2.  无源组件列表

元件位号
名称
R2
2.2kΩ
上拉电阻
R3、R4(可选)
100Ω
限流电阻
C6、C7
100 nF
去抖滤波器
Button 1
-
标准按钮
Button 2
-
标准按钮
C2、C3
100 nF
电荷泵电容器
C1、C4
100 nF
输出电容
C5
100 nF
去耦电容

此外,该应用程序还使用了5 V供电的RS232驱动器/接收器ST232C。这个额外的元件必不可少,因为PC的COM端口使用标准的12 V电源供电。这个与STM8器件的UART输入/输出不兼容,其工作在5V。

该器件采用SO16封装,符合STM8 Nucleo-64板的尺寸。参考有关ST232C的更多信息,请参见相应的数据手册。

表3.  元件列表

元件型号
描述
封装
ST232C(订货代码ST232CN)
超高速超低功耗5V RS232驱动器/接收器,
用于UART 5/12 V电平转换器
SO16
LM235
精密温度传感器IC,工作温度范围为-40至-125
°C,初始精度为1°C。
SO8

2.2     应用原理图

下图显示了如何使用STM8 Nucleo-64开发板连接LM235温度传感器、驱动器/接收器ST232C和按钮。Button1和Button2(板载用户按钮)需要RC去抖滤波器以避免误触发多个中断。 Button1和Button2(板载用户按钮)的去抖过滤器由C7和C6电容加上I / O引脚内部的上拉电阻(约45KΩ)组成。

由于使用了I / O的内部上拉电阻,因此无需外部上拉电阻。

C2和C3是两个电荷泵外部电容,在ST232C中分别用作电压倍增器和电压逆变器。

流入LM235的V +引脚的电流必须由电阻调节。传感器由电源(VDD)5 V供电。传感器两端的击穿电压与绝对温度成正比,灵敏度为10mV /°K。由于环境温度约为300°K,击穿电压约为3 V,其中2 V电压施加在2.2kΩ电阻,以调节约1 mA的电流(用于确定数据手册中的典型值)。

有关实现的详细信息,请参阅STM8 Nucleo-64开发数据简介(DB3591)中提供的电路板原理图。

图1.   STM8L系列应用原理图

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

图2.   STM8S系列应用原理图

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


2.3   应用规则

在应用程序启动时,一些介绍消息显示在终端窗口上,并提示用户输入最低和最高温度阈值。

LM235可连续测量环境温度。模拟值由ADC2(STM8S系列)或ADC1(STM8L系列)在每个定时器中断每50 ms进行转换。为了改善温度测量可靠性,温度数据是通过对经过1秒钟后测量的前16个样本求平均得到的。

然后将得到的数据与当前的最小和最大温度阈值进行比较,如果需要可以修改。如果温度低于用户定义的最低阈值或超过最高阈值,则LD2点亮。

每分钟一次,最后计算的平均温度显示在终端窗口,同时当超过临界时,显示温度警告信息。

一小时内的最低和最高温度每小时记录在数据EEPROM中一次并显示在终端窗口上。


按下Button1会提示用户输入新的温度阈值。

按下Button2(板载用户按钮)会触发在终端窗口上显示所有记录的存储在数据EEPROM中的最低和最高温度。 LD2指示灯熄灭。


下图显示了应用程序状态图。

图3.  应用程序状态机

图3.  应用程序状态机.jpg


下表描述了应用程序在每次转换时执行的操作。

表4.  应用程序典型行为应用

应用状态
LED状态
进入条件
动作
状态0:空闲 - 默认状态 每50ms转换LM235提供的模拟温度
状态1:配置 - 启动时或
按下Button1
终端窗口上显示的信息性消息。
第一次提示用户输入最小和最大温度阈值
或更新这些值。
状态2:读取 LD2熄灭 按下Button2 从数据EEPROM读取最小和最大温度值
并显示在终端窗口上。
状态3:正常 如果温度超过设定范围,LD2点亮。 每秒、每分、每小时每1秒:从16个样本计算平均温度。如果需要,更新当前的最小和最大温度值。
每1分钟:在终端窗口上显示当前温度值和临界温度、警告消息(如果需要)。
每1小时:前一小时的最低和最高温度记录在数据EEPROM中。

通过State_Machine()函数管理根据计时器和外部事件控制执行进度的算法(参见第3.3.3节状态机流程图)。


2.4  启动应用程序

要显示终端窗口,您可以运行基于Windows的预配置的超级终端HyperTerminal(COM1端口)。

在应用程序启动时,将提示用户输入最小和最大温度阈值。该温度阈值必须在-40到+125°C之间,并表示如下:

•  正温度值:“+ XXX”。 例如,输入“+025”表示25°C。

•  负温度值:“ - XXX”。 例如,输入“-005”表示-5°C。

图4.   启动时的STM8S终端窗口

图4.   启动时的STM8S终端窗口.jpg


图5.   启动时的STM8L终端窗口

图5.   启动时的STM8L终端窗口.jpg

跳转到指定楼层
天南地北客
发表于: 2018-9-17 12:00:37 | 显示全部楼层

3    软件说明

3.1     应用程序使用的STM8外设

温度计应用软件没有使用STM8S系列或STM8L系列标准固件库。而是包含一些优化的代码,通过使用直接访问寄存器来控制STM8S系列和STM8L系列通用外设,如下所述:

•  CLK:时钟控制器启用,并向CPU和外设提供准确的时钟频率。它将HSI时钟配置为16 MHz主时钟源,并且将CPU时钟预分频器系数配置为1。

•  GPIO:STM8S系列和STM8L系列GPIO用于点亮和熄灭LD2指示灯,以及使用以下配置连接按钮:

   - STM8S系列:PA3和PE4

   - STM8L系列:PG6和PG4

•  EXTI:外部中断灵敏度配置为每次下降沿触发中断,对于STM8S系列,在PA3或PA4上检测到下降沿,对于STM8L系列,在PG6或PG4上检测到下降沿。

•  闪存:一小时内的最小和最大温度值保存在数据EEPROM中,以进一步显示在终端窗口上。

•  U(S)ART:STM8系列使用UART3,STM8L系列使用USART3与PC终端软件进行通信。它的配置如下:

   - 波特率= 9600

   - 字长= 8位

   - 1位停止位

   - 无校验

   - 启用接收和发送

  注意:对于STM8L系列,必须禁用USART3 CLK。

    通过轮询UART3(STM8S系列)或USART3(STM8L系列)外设上的每次接收和发送操作来管理通信。

ADC:STM8S系列ADC2的通道2或STM8L系列ADC1的通道3用于将LM235发出的模拟数据转换为数字值,微控制器可以据此计算当前温度值。

Timer3(TIM3):该外设用于生成50 ms的时基,并每50 ms触发一次温度采集。


3.2  排除STM8S系列和STM8L系列标准固件库

由于此应用程序使用优化代码,因此必须修改对应的thestm8s.h和stm8l.h文件,而不包括STM8S系列标准固件库和STM8L系列标准固件库。使用以下define声明:

  1. #define USE_STDPERIPH_DRIVER
复制代码

3.3    应用软件流程图

本节概述了应用软件主循环、中断函数流程图和状态机流程图以及对终端通信函数的一些参考。


3.3.1  主循环流程图

主循环代码初始化所需的功能、解锁数据EEPROM编程并调用函数需要实现一般的应用程序算法。

为了最小化软件实时时钟的时间漂移​​(参见定时器触发采集),HSI时钟用作主时钟源。

在初始化阶段完成并且在终端窗口上显示信息性消息之后,用户系统会提示您输入最低和最高温度阈值。因此,第一次调用State_Machine()函数,它直接进入配置模式(state = 1,参见3.3.3节状态机流程图)。

下图显示了应用程序软件主循环的流程图。

图6.  主循环流程图


3.3.2    中断函数流程图

STM8L系列的按钮采集

每次按下Button1或Button2(板载用户按钮),就会触发一个中断并且调用PORTG_IRQhandler()函数。 PORTG_IRQhandler()函数通过测试端口G输入寄存器确定哪个按钮被按下,然后置位ButtonPressed1或ButtonPressed2标志位(参见第3.3.3节状态机流程图)。 这些标志位触发应用程序状态机中的状态更改。


下图显示了PORTG_IRQhandler()函数的流程图。

图7.   STM8L系列:PORTG_IRQhandler()函数流程图

图7.   STM8L系列:PORTG_IRQhandler()函数流程图.jpg


STM8S系列的按钮采集

每次按下Button1,就会触发一个中断并调用PORTA_IRQhandler()函数。 每次按下Button2(板载用户按钮),就会触发一次中断,并调用PORTE_IRQhandler()函数。函数相应地断置位ButtonPressed1或ButtonPressed2标志位。 这些标志位触发更改应用程序状态机中的状态。

下图显示了STM8S系列的PORTA_IRQhandler()和PORTE_IRQhandler()函数的流程图

图8.  STM8S系列:PORTA_IRQhandler()和PORTE_IRQhandler()函数流程图

图8.  STM8S系列:PORTA_IRQhandler()和PORTE_IRQhandler()函数流程图.jpg


定时器触发采集

TIMER3配置为每50 ms产生一次中断以触发温度采集。每次转换ADC2通道2(STM8S系列)或ADC1通道3(STM8L系列)后,数字值存储在缓冲器数组中以进行进一步计算,然后ADC断电。在缓冲区数组中最多保存16个样本。当计算一秒钟内的平均温度,可以通过除以2的幂实现简单的右移。

TIM3_IRQHandler()调用模拟实时时钟的TRtc_CntUpdate()函数。它置位表示秒、分钟和小时。此RTC函数基于TIM3外设50 ms时基。状态机每秒自动切换到状态3(正常模式)(参见章节3.3.3状态机流程图)。

下图显示了TIM3_IRQhandler()函数的流程图。

图9. TIM3_Init()函数流程图

图9. TIM3_Init()函数流程图.jpg


3.3.3状态机流程图

State_Machine函数实现根据计时器和外部事件控制应用程序执行进度的算法。状态变量的不同值表示应用程序模式:

•    state = 0:空闲模式

     这是状态机的默认状态。 每50毫秒执行一次LM235提供的模拟温度转换。按下Button1或Button2(板载用户按钮)退出此状态。

•    状态1 =配置模式

在状态机配置模式下,终端消息提示用户输入最小和最大温度阈值。这些值从终端窗口读取并以十进制格式记录。在启动时或按下Button1时进入此状态。

•    状态2 =读取模式

在状态机读取模式下,应用程序将从数据EEPROM读取最小和最大温度,并在终端窗口上同一些介绍文件显示它们。同时熄灭LD2指示灯。只能通过按下Button2进入此状态。

•    状态3 =正常模式

每秒进入状态机正常模式。它由TRtc_CntUpdate()函数触发,该函数监视已过去的应用程序时间。每次进入此状态时,平均温度为从保存在缓冲区数组中的16个样本计算得出。如果此温度值超过高阈值或低于最小阈值,点亮LD2。


当前温度每分钟一次显示在终端窗口上,并当该温度是关键消息时还会附加特定信息。每一小时在数据EEPROM中记录一组最大和最小测量温度。 EEPROM中最多可存储10组。这意味着可以保存十个小时的测量记录。写入第11小时数据会重置EEPROM地址指针并覆盖以前的数据。前十个小时的数据通过这样依次覆盖。

进入状态1和2时,TIM3计数器在退出正常模式,并且禁用。退出这些时状态时,重新分配定时器寄存器,并且恢复默认执行模式时再次启用计数器。

请参见下面State_Machine()函数的流程图。

图10. State_Machine函数流程图


3.3.4  终端通信函数

有关终端通信函数的详细说明,请参阅A部分配置终端窗口。


4.    修订记录

表5.  文档修订历史记录

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

使用道具 举报

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

本版积分规则

主题 10 | 回复: 18



手机版|

GMT+8, 2024-11-21 20:05 , Processed in 0.052455 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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