STM32G4 比较器COMPx(寄存器开发)

目录

  • 1. 特性
    • 1.1 框图
    • 1.2 比较器输入信号SEL
    • 1.3 比较器滞回选择HYST
    • 1.4 比较器的输出
    • 1.5 LOCK机制
  • 2. 编程
    • 2.1 初始化步骤
    • 2.2 举例

STM内部的比较器是模拟量的比较器,其与APB2时钟同步,在RCC时钟控制器中没有COMx时钟使能标志位,其时钟的使能与复位与SYSCLK同步。

1. 特性

1.1 框图

模块框图

1.2 比较器输入信号SEL

比较器的输入端有正负极信号,正极INP通过INPSEL选择输入信号,负极通过INMSEL选择输入信号,其SEL引脚定义如下图表所示。

SEL定义

1.3 比较器滞回选择HYST

滞回英文 Hysteresis ,可以理解为施密特触发器,通过在CSR寄存器中配置HYST来选择滞回电压。

滞回电压配置

1.4 比较器的输出

根据框图可以看到,比较器的输出信号为VALUE。VALUE直接连接到 HRTIM(高分辨率定时器)外设;VALUE还通过POLARITY(CSR寄存器的POL配置)的极性选择(是否取反)连接到 COMPx_OUT(GPIO)EXTI总线TIMx定时器

1.5 LOCK机制

一旦将CSR寄存器的LOCK标志位置位,就不能清除LOCK标志位了,只有重新复位MCU才可清除。并且LOCK置位后,CSR寄存器变为只读,不能重新配置。

2. 编程

2.1 初始化步骤

  1. 使能SYSCLK时钟
  2. 初始化GPIO,将要使用到的comp引脚定义为模拟量模式(MODER=3)
  3. 配置CSR寄存器;使能比较器;锁定寄存器
  4. 配置中断

2.2 举例

下面以COMP1进行举例,分别使用PB1和PA4作为比较器输入的正负极,上下沿都产生中断。
测试代码如下。(已经提前打开GPIO、SYSCLK时钟)


#define MODER_IN												(0x00UL)	//输入
#define MODER_OUT												(0x01UL)	//输出
#define MODER_FUNC												(0x02UL)	//功能
#define MODER_ANA												(0x03UL)	//模拟
#define MODER_BIT												(0x03UL)	//

#define PUPDR_NO												(0x00UL)	//无上下拉
#define PUPDR_PU												(0x01UL)	//上拉
#define PUPDR_PD												(0x02UL)	//下拉
#define PUPDR_BIT												(0x03UL)	//


#define COMP_COMPx												COMP1
#define COMP_INP_GPIO											GPIOB
#define COMP_INP_PORT											1
#define COMP_INP_SEL											1 //<根据本文1.2的查表,PB1选择1
#define COMP_INM_GPIO											GPIOA
#define COMP_INM_PORT											4
#define COMP_INM_SEL											6 //<根据本文1.2的查表,PA4选择6

void COMP1_Init(void)
{
//步骤2:初始化GPIO,IO模式为模拟量
	COMP_INP_GPIO->MODER	&= ~(MODER_BIT	<< (COMP_INP_PORT << 1));
	COMP_INP_GPIO->MODER	|=  (MODER_ANA	<< (COMP_INP_PORT << 1));
	COMP_INP_GPIO->PUPDR	&= ~(PUPDR_BIT	<< (COMP_INP_PORT << 1));
	COMP_INP_GPIO->PUPDR	|=  (PUPDR_NO	<< (COMP_INP_PORT << 1));
	COMP_INM_GPIO->MODER	&= ~(MODER_BIT	<< (COMP_INM_PORT << 1));
	COMP_INM_GPIO->MODER	|=  (MODER_ANA	<< (COMP_INM_PORT << 1));
	COMP_INM_GPIO->PUPDR	&= ~(PUPDR_BIT	<< (COMP_INM_PORT << 1));
	COMP_INM_GPIO->PUPDR	|=  (PUPDR_NO	<< (COMP_INM_PORT << 1));

//步骤3:配置CSR寄存器;使能比较器;锁定寄存器
	COMP1->CSR = 0
				|COMP_CSR_LOCK						// 【1:寄存器只读】
				// COMP_CSR_VALUE					// 【只读,不经过机型选择器的value】
				// |COMP_CSR_SCALEN					// 【1:VREFINT分段使能(VREFINT/1/2/3有效)】
				// |COMP_CSR_BRGEN						// 【1:电阻桥使能】
				|(0 << COMP_CSR_BLANKING_Pos)		// 消隐信号选择   <暂时不用
				|(3 << COMP_CSR_HYST_Pos)			// 滞回电压选择
															// 0: No hysteresis 
															// 1: 10mV hysteresis 
															// 2: 20mv hysteresis 
															// 3: 30mV hysteresis <当前选择
															// 4: 40mV hysteresis
															// 5: 50mV hysteresis
															// 6: 60mV hysteresis
															// 7: 70mV hysteresis
				// |COMP_CSR_POLARITY					// 【1:极性反转】
				|(COMP_INP_SEL << COMP_CSR_INPSEL_Pos)			// 正极输入选择 <根据本文1.2的查表,PB1选择1
				|(COMP_INM_SEL << COMP_CSR_INMSEL_Pos)			// 负极输入选择 <根据本文1.2的查表,PA4选择6
				|COMP_CSR_EN						// 比较器使能
				;
//步骤4:配置中断

	EXTI->IMR1 |= BIT21;//COMP1 Output 中断屏蔽失效
	EXTI->RTSR1 |= BIT21;//COMP1 Output 上升沿触发
	EXTI->FTSR1 |= BIT21;//COMP1 Output 下降沿触发
}

上述配置中断部分的 BIT21,是通过手册查表 Table 98: EXTI lines connections 来的(手册Page449)。

在这里插入图片描述

根据上图可以看到,line21就是COMP1output总线。

EXTI的 RTSR1 、FTSR1 寄存器分别是上升沿使能、下降沿使能寄存器。

配置完毕初始化后,就可以在中断函数中等待比较中断了。中断内部举例代码如下。

void COMP1_2_3_IRQHandler(void)
{
	EXTI->PR1 |= BIT21;//清除中断挂起标志位
	if(COMP1->CSR & COMP_CSR_VALUE)
		GPIOC->BSRR |= BIT13;//LED点亮(测试使用)
	else
		GPIOC->BSRR |= (BIT13 << 16);//LED关闭(测试使用)
}

当正极大于负极(算上滞回电压),VALUE为0,即比较器输出0;(我测试是这个结果)
当正极小于负极(算上滞回电压),VALUE为1,即比较器输出1。
VALUE值可以在 COMPx->CSR寄存器中读取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/24215.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RTOS专栏(一) —— rt-thread简单介绍和qemu使用

本期主题&#xff1a; 简单介绍rt-thread介绍qemu和rt-thread怎么配合使用qemu的简单例子 rt-thread & qemu 1.rt-thread介绍2.qemu介绍3.搭建rt-thread和qemu开发环境4.简单例子 1.rt-thread介绍 RT-Thread 是一款完全由国内团队开发维护的嵌入式实时操作系统&#xff0…

JAVA POI excel 添加下拉字典的方式与案例 以及图文详解及个人理解

场景 原有的Excel 某一个 sheet 页中某些列需要添加指定的字典下拉&#xff0c;而这些字典的值又是确认的。 有两种思路&#xff1a; 一、如果给定的下拉字典值是确定的而且关联原有列的位置也不会变&#xff0c;那么这些数据可以固定写死在代码中&#xff0c;也是最简单的一…

北邮22信通:利用BF算法解决实际问题:题目实战(超详解)设计函数 char *locatesubstr(char *str1,char *str2)

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 获取更多文章 请访问专栏~ 北邮22信通_青山如墨雨如画的博客-CSDN博客 目录 题干描述 解析 1.string库函数 2.使用KMP算法思想 注解1 注解2 注解3 题…

学懂缓存雪崩,缓存击穿,缓存穿透仅需一篇,基于Redis讲解

在了解缓存雪崩、击穿、穿透这三个问题前&#xff0c;我们需要知道为什么我们需要缓存。在了解这三个问题后&#xff0c;我们也必须知道使用Redis时&#xff0c;如何解决这些问题。 所以我将按照"为什么我们需要缓存"、"什么是缓存雪崩、击穿、穿透"、&qu…

​字创未来 方正字库第十二届“方正奖”设计大赛正式来袭

传承汉字文化精髓&#xff0c;方正字库在字体行业不断探索深耕。方正字库一直致力于弘扬中华汉字文化&#xff0c;不断促进行业字体设计创新发展。于2001年在行业最艰难的时候&#xff0c;怀揣着对字体设计未来的美好向往&#xff0c;首届“北大方正奖”印刷字体设计大赛&#…

家政服务预约APP的系统设计与实现

摘 要&#xff1a;针对家政行业蓬勃发展&#xff0c;老套的家政服务方式已经跟不上互联网时代的步伐这个问题。基于Android移动平台的分析和设计过程、C/S模式、Eclipse平台&#xff0c;采用Java语言进行开发设计&#xff0c;设计了基于MVC架构的实现方案。安卓客户端与服务器…

Flume系列:Flume通道拓扑结构

目录 Apache Hadoop生态-目录汇总-持续更新 1: 基础架构 2&#xff1a;简单串联 3&#xff1a;复制(Replicating)和多路复用(Multiplexing) 4&#xff1a;负载均衡和故障转移 5&#xff1a;聚合 Apache Hadoop生态-目录汇总-持续更新 系统环境&#xff1a;centos7 Java环境…

IDEA 创建 Springmvc 项目

一、概述 在18年的时候就开始接触 SpringBoot &#xff0c;然后就一直在使用它。众所周知 SpringBoot 内嵌 Tomcat&#xff0c;后续再也没有单独新建过Web 项目。作为IDEA 的用户&#xff0c;总想要用它来建一个Web 项目自己跑一跑&#xff0c;但建项目不是我最终目的~~ &…

好用的自动化框架-Allure

概述 报告主要包含总览、类别、测试套件、图表、时间刻度、功能、包等7大部分&#xff0c;支持自定义诸多信息&#xff0c;包括附件添加、缺陷链接、案例链接、测试步骤、Epic、Feature、Story、Title、案例级别等&#xff0c;相当强大。 allure与pytest的结合使用可以呈现完…

ProtoBuf 语法(一)

系列文章 ProtoBuf 语法&#xff08;二&#xff09; ProtoBuf 语法&#xff08;三&#xff09; 文章目录 前言一、字段规则二、消息类型的定义与使用2.1 定义2.2 使用 三、enum 类型3.1 定义规则3.2 注意事项 四、any 类型4.1 类型说明4.2 类型使用 五、oneof 类型六、map 类型…

【Vue】二:Vue核心处理---计算属性 监视属性

文章目录 1.计算属性示例2. 监听属性3.补充 1.计算属性示例 实际上计算属性与methods中定义方法基本上没有什么区别&#xff0c;只是计算属性基于响应式依赖缓存&#xff0c;只要数据没有发生改变&#xff0c;计算属性从缓存中取值&#xff0c;只有当数据发送改变&#xff0c;才…

安卓中集成高德地图

安卓中集成高德地图 1.高德地图的优缺点 高德开放平台 | 高德地图API 高德地图优点&#xff1a; 1、领先的地图渲染技术&#xff1a;性能提升10倍&#xff0c;所占空间降低80&#xff05;&#xff0c;比传统地图软件节省流量超过90&#xff05; 2、专业在线导航功能&#x…

idea模板配置

idea版本&#xff1a;2023.1 未设置模板的idea&#xff0c;新建类会自动生成类注释 格式如下&#xff1a; /*** author user* date 2023/5/20 0020 14:25*/ public class User {} 其中&#xff0c;user为当前用户名 这里&#xff0c;如果希望将类注释改写成如下&#xff0…

档案馆空气质量在线3D监控系统温湿度方案

档案馆库房八防温湿度空气质量一体化解决方案 档案库房是档案事业发展的基石&#xff0c;其主要任务是集中保管国家机构及个人等在各种形式下形成的具有一定价值和保存价值的各种载体档案&#xff0c;主要包括文书档案、科技档案、会计档案、人事档案、实物档案等。随着我国经济…

X2000 freeRTOS usb_bulk通信

例程 官方例程..\freertos\example\usb\device\gadget_generic_bulk.c&#xff0c;代码如下&#xff1a; #include <common.h> #include <usb/gadget_bulk.h> #include <os.h>static const struct gadget_id bulk_id {.vendor_id 0x1CBE,.product_id 0x…

【数据生成】——Semantic Image Synthesis via Diffusion Models语义分割数据集生成论文浅读

语义分割&#xff0c;数据生成 摘要 Denoising Diffusion Probabilistic Models (DDPMs) 在各种图像生成任务中取得了显著的成功&#xff0c;相比之下&#xff0c;生成对抗网络 (GANs) 的表现不尽如人意。最近的语义图像合成工作主要遵循事实上的基于 GAN 的方法&#xff0c;…

直流电机 PID 控制系统仿真研究(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

python+vue高校网上跳蚤二手市场的设计与实现

商品信息是卖家供应用户必不可少的一个部分。在跳蚤市场发展的整个过程中&#xff0c;商品担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类管理系统程序也在不断改进。本课题所设计的普通高校网上跳蚤市场&#xff0c;使用Django框架&#xff0c;Python语言…

【信号变化检测】使用新颖的短时间条件局部峰值速率特征进行信号变化/事件/异常检测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

网络安全复习

目录 低层协议安全性 IP协议 ARP协议 TCP协议 NAT协议 单钥加密体制 DES算法 课后习题 双钥加密体制 &#x1f407;怎么说 欧几里得算法求逆 RSA算法 椭圆曲线加密 Diffie- Hellman 密钥交换算法 ElGamal签名机制 Schnorr签名机制 DSS签名算法——DSA 低层协…