STM8单片机ADC模拟看门狗功能实现
看门狗的功能大家都知道,而这个模拟看门狗又是什么东西呢?
简单的说就是这个模拟看门狗可以实时监控ADC采样的数据,当采样的数据值小于设置的最小值或者大于设置的最大值时,单片机就会触发ADC中断。这个在温度监控中非常实用,比如现在要监控设备的温度值,当温度值不在设置范围内的时候,就会自动触发中断,而不需要程序一直去采集ADC通道的值,然后使用软件来判断当前的温度值是否超出正常范围。
官方介绍如下:
下面直接通过代码来演示一下这个模拟看门狗的功能:
#include "adc.h"
#include "main.h"u16 DATAH = 0; //ADC转换值高8位
u16 DATAL = 0; //ADC转换值低8位
_Bool ADC_flag = 0; //ADC转换成功标志//AD通道引脚初始化
void ADC_GPIO_Init( void )
{PD_DDR &= ~( 1 << 3 ); //PD3 设置为输入 电流PD_CR1 &= ~( 1 << 3 ); //PD3 设置为悬空输入
}
void ADC_CH_Init( u8 ch )
{char l = 0;ADC_CR1 = 0x00; //fADC = fMASTER/2, 8Mhz 单次转换,禁止转换ADC_CSR |= ch ; //控制状态寄存器 选择要 AD输入通道 如:PD2(AIN3)ADC_CR2 = 0x00; //默认左对齐 读数据时先读高在读低ADC_TDRL = ( 1 << ch ); //禁止相应通道 施密特触发功能 1左移ch+1位ADC_CR1 |= 0x01; //使能ADC并开始转换//设置上限门槛值ADC_HTRH = ( u8 )( 800 >> ( u8 )2 ); //存放10位数据的高8位ADC_HTRL = ( u8 )800; //存放10位数据的低8位//设置下限门槛值ADC_LTRH = ( u8 )( 300 >> ( u8 )2 ); //存放10位数据的高8位ADC_LTRL = ( u8 )300; //存放10位数据的低8位ADC_CSR |= 0x10; // 使能看门狗中断for( l = 0; l < 100; l++ ); //延时,保证ADC模块的上电完成 至少7usADC_CR1 = ADC_CR1 | 0x01; //再次将CR1寄存器的最低位置1 使能ADC 并开始转换
}//采集PD2电压值
u16 ReadVol_CH3( void )
{u16 voltage = 0;while( ( ADC_CSR & 0x80 ) == 0 ); //等待转换结束if( ADC_CSR & 0x80 ){DATAH = ADC_DRH; // 读出ADC结果的高8位DATAL = ADC_DRL; // 读出ADC结果的低8位voltage = ( DATAH << 2 ) + DATAL ; //得到十位精度的数据 0--1024ADC_CR1 = ADC_CR1 | 0x01; //再次将CR1寄存器的最低位置1 启动下一次转换ADC_CSR &= 0x7F;};return voltage;
}//AD中断服务函数 中断号22
#pragma vector = 24 // IAR中的中断号,要在STVD中的中断号上加2
__interrupt void ADC_Handle( void )
{ADC_CSR &= ~0x40;//处理温度异常事件
}
ADC使用单次触发模式,然后设置ADC_HTR寄存器为上限报警值,这里设置为800,ADC_LTRL设置下限报警值,这里设置为300,也就是说当ADC的采样值大于800或者小于300的时候,ADC就会产生中断,然后将ADC_CSR寄存器的第4位,也就是AWDIE位设置为1,开启模拟看门狗中断。接下来在主函数中循环读取ADC采样值。
主程序代码如下:
#include "iostm8s103f3.h"
#include "led.h"
#include "adc.h"void SysClkInit( void )
{CLK_SWR = 0xe1; //HSI为主时钟源 16MHz CPU时钟频率CLK_CKDIVR = 0x00; //CPU时钟0分频,系统时钟0分频
}u16 val1 = 0;
void main( void )
{SysClkInit();__asm( "sim" ); //禁止中断LED_GPIO_Init();ADC_CH_Init( 3 );__asm( "rim" ); //开启中断while( 1 ){LED = !LED; //采样val1 = ReadVol_CH3();}
}
val1为采样的电压值,全速运行程序,在观察窗口中观察采样值:
当采样电压值在300到800之内时,ADC中断函数不会触发。
当电压值低于300时,ADC中断触发,ADC_CSR寄存器的第6位置位,说明产生了一次模拟看门狗中断。
当采样值大于800时,同样可以产生中断
产生中断后,需要在中断中手动清除AWD标志位。
在这里要特别注意一个问题,就是在设置模拟看门狗的上下限值时,高位寄存器存储的是10位值的高8位,低位寄存器存储的是10位值的低2位。
这里要参考英文手册中的寄存器设置,中文参考手册中这4个寄存器介绍是错误的。如果按照中文手册中的方法设置,模拟看门狗就会永远在中断中出不来。一定要注意。
中文手册中这几个寄存器介绍是错误的
这里的中文参考手册都是在ST官网上下载的,不知道是官方人员疏忽些写错了,还是翻译的时候搞错了。在使用模拟看门狗时一定要注意这个四个寄存器的设置。
STM8单片机ADC模拟看门狗功能实现相关推荐
- STM8单片机 ADC模拟看门狗中文资料错误
在调试stm8单片机的adc模拟看门狗功能时,不管怎么设置ADC_HTR和ADC_LTR寄存器的值,然后通过IAR软件单步调试时观察这两个寄存器的值都不对. 根据中文手册上看,高位寄存器存储的 ...
- 【干货】STM32通过ADC模拟看门狗实现掉电保存
1.前言 很多时候我们需要将程序中的一些参数.数据等存储在EEPROM或者Flash中,达到掉电保存的目的.但有些情况下,程序需要频繁的修改这些参数,如果每次修改参数都进行一次保存,那将大大降低存储器 ...
- 模拟看门狗如何实现?
关注.星标公众号,不错过精彩内容 作者:逸珺 转自:STM32 对于看门狗大家或许不陌生,但对于模拟看门狗有的朋友可能就不甚了解了.本文来聊聊模拟看门狗,旨在梳理相应的概念,理解模拟看门狗原理.与常规 ...
- [STM32F1官方例程讲解2] 模拟看门狗Analog Watchdog
[STM32F1官方例程讲解2] 模拟看门狗 第一章 模拟看门狗简介 第二章 STM32F1模拟看门狗相关配置函数介绍 第三章 电路原理图与库函数配置 3.1 程序逻辑 3.2 硬件原理(LED灯) ...
- c语言看门狗的作用,51单片机 c语言看门狗程序怎么写
51单片机 c语言看门狗程序怎么写 51单片机 c语言看门狗程序怎么写 看门狗在51单片机电路里的作用是防止程序 "跑飞"."死机"后,系统不动作,而采取复位的 ...
- (29)基于FPGA实现看门狗功能(FPGA不积跬步101)
1 引言 微处理(ARM.单片机)在特殊的环境下,运行代码或程序会跑到非预期状态,也就是说系统可能会进入死循环,这种情况微处理器无法进行自我恢复,只能通过复位或者重启进行解决.看门狗就是解决这种情况 ...
- Python 看门狗功能实现
前言: 用 python 实时实现监控一个文件夹功能,将监控到的 Excel(笔者目前用于解析excel文件)解析写到 mysql 中,起功能和 sparkStreaming 中的 textFileS ...
- HC32F460开发之看门狗功能
文章目录 前言 一.看门狗是什么? 二.看门狗的使用 1.简介 2.启动 3.刷新看门狗计数器 总结 前言 在一些设备需要长时间稳定运行的场合中,看门狗功能可以说是必不可少的.但在一些低功耗设备中,硬 ...
- c语言看门狗指令pic,PIC单片机的窗口看门狗定时器.PDF
PIC单片机的窗口看门狗定时器 TB3123 PIC® 单片机的窗口看门狗定时器 作者: Ashutosh Tiwari Microchip Technology Inc. 简介 窗口看门狗定时器(W ...
最新文章
- R语言scan函数读取文件为向量或者列表格式实战
- Bash: Removing leading zeroes from a variable
- 数据分析处理库Pandas——merge操作
- redis 哨兵_Redis哨兵配置
- 在SQLSERVER EXPRESS 2005中安装northwind和pubs数据库。
- mysql buffer size_mysql中join_buffer_size的建议最大值是多少?
- 文华软件登录显示请选择服务器,文华财经提示先登录云服务器
- JavaWeb --第三章 HTTP协议详解
- Antd Mobile Design输入框组件InputItem错误显示方式封装
- 20145322 Exp5 MS08_067漏洞测试
- CSS动态绑定背景图片
- 我的世界minecraft最新版1.16.5服务器及其Python开发环境搭建
- 安装oracle12f 闪退,安装oracle ,调用图形界面java卡死,
- 计算机二级基础知识点全部讲解,计算机二级基础知识点整理
- Android Studio实现内容丰富的安卓小说阅读平台
- 笔记本电脑性能分析记
- boost库用property_tree读xml文件
- android设备显示电脑内容,安卓手机怎样用电脑查看记事本内容
- Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven...
- IntelliJ IDEA中文网