STM32输入捕获频率和占空比proteus仿真失败

news2024/11/19 9:31:12

这次用了两天的时间来验证这个功能,虽然实验没有成功,但是也要记录一下,后面能解决了,回来再写上解决的办法:

这个程序最后的实验结果是读取到的CCR1和CCR2的值都是0,所以没有办法算出来频率和占空比。

还是说一下这个工程中开启输入捕获的方法吧:

第一步:RCC开启时钟,把GPIO和TIM的时钟打开

第二步:GPIO初始化,把GPIO配置成输入模式(上拉输入)

第三步:配置时基单元,让CNT计数器在内部时钟的驱动下自增运行

第四步:配置输入捕获单元(滤波器、极性、直连通道还是交叉通道、分频器这些参数)

第五步:选择从模式的触发源(TI1FP1)(一个函数)

第六步:选择触发之后执行的操作执行Reset操作(一个函数)

第七步:开启定时器

整个过程的思维框图:

第五步和第六步的思维框图:

整个工程的机构:

下面是IC.c的文件:

#include "stm32f10x.h"                  // Device header



void IC_Init(void)
	
{
	//第一步:RCC开启时钟,把GPIO和TIM的时钟打开
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	
	//第二步:GPIO初始化,把GPIO配置成输入模式(上拉输入)
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStruct);

	//第三步:配置时基单元,让CNT计数器在内部时钟的驱动下自增运行
	TIM_InternalClockConfig(TIM3);   // 选择内部时钟
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStruct.TIM_Period = 65536-1;  // ARR的值,设置成最大,防止溢出
	TIM_TimeBaseInitStruct.TIM_Prescaler = 72-1;   // PSC的值
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
	
	//第四步:配置输入捕获单元(滤波器、极性、直连通道还是交叉通道、分频器这些参数)
	TIM_ICInitTypeDef TIM_ICInitStruct;
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;                 //选择通道1
	TIM_ICInitStruct.TIM_ICFilter = 0XF;                           //滤波器值最大0XF
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;        //上升沿触发
	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;              //预分频器为1分频
	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;   //直连通道
	TIM_ICInit(TIM3, &TIM_ICInitStruct);
//	
//	TIM_ICInitStruct.TIM_Channel = TIM_Channel_2;                 //选择通道1
//	TIM_ICInitStruct.TIM_ICFilter = 0XF;                           //滤波器值最大0XF
//	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Falling;        //上升沿触发
//	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;              //预分频器为1分频
//	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_IndirectTI;   //交叉通道
//	TIM_ICInit(TIM3, &TIM_ICInitStruct);

	TIM_PWMIConfig(TIM3, &TIM_ICInitStruct);  // 这个函数和上面注释的7行效果一样。
	
	//第五步:选择从模式的触发源(TI1FP1)(一个函数)
	TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);      // 触发源选择
	
	//第六步:设置从模式为Reset
	TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);   // 从模式设置
	
	//第七步:开启定时器
	TIM_Cmd(TIM3, ENABLE);
}

uint32_t IC_GetFreq(void)
{
	return 1000000 / (TIM_GetCapture1(TIM3)+1);   // 1000000/CCR的值
}

uint32_t IC_GetDuty(void)
{
	return (TIM_GetCapture2(TIM3)+1)*100 / (TIM_GetCapture1(TIM3)+1);
}

IC.h的文件:

#ifndef __IC_H
#define __IC_H

void IC_Init(void);

uint32_t IC_GetFreq(void);

uint32_t IC_GetDuty(void);

#endif

主函数main.c的文件:

#include "stm32f10x.h"                  // Device header
#include "OLED.h"
#include "IC.h"

int main(void)
{
	OLED_Init();       //oled  屏幕初始化
	
	IC_Init();
	
	//OLED_ShowString(1,1, "Freq:        Hz");
	
	
	while(1)
	{
		OLED_ShowNum(1,2, IC_GetFreq(),8); 
		OLED_ShowNum(2,2, IC_GetDuty(),8);		
		OLED_ShowNum(3,1, TIM_GetCapture1(TIM3),16);
		OLED_ShowNum(4,1, TIM_GetCapture2(TIM3),16);
	}
}

由于总是显示不了正确的频率和占空比,特意把两个数都显示在OLED上,结果都是0

也许我是仿真的缘故吧!所以没有成功,回头我买来了硬件,再来学习一下,看看是不是能解决这个问题。如果能后面会更新的。.....

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能|机器学习——BIRCH聚类算法(层次聚类)

这里再来看看另外一种常见的聚类算法BIRCH。BIRCH算法比较适合于数据量大,类别数K也比较多的情况。它运行速度很快,只需要单遍扫描数据集就能进行聚类。 1.什么是流形学习 BIRCH的全称是利用层次方法的平衡迭代规约和聚类(Balanced Iterative…

应用程序性能监控(APM)的解决方案

随着技术的不断发展,APM 监控和可观测性的重要性怎么强调都不为过,应用程序已成为业务运营的支柱。随着组织越来越依赖数字解决方案来推动其流程并与用户互动,确保最佳性能和可用性变得至关重要。这超越了系统正常运行时间,深入研…

拼多多商品详情接口数据采集

拼多多商品详情接口数据采集是一个相对专业的任务,通常涉及到使用API接口或第三方采集工具等技术手段。以下是一些基本步骤和注意事项,供您参考: 请求示例,API接口接入Anzexi58 申请开发者账号:如果您打算使用API接口…

政务云安全风险分析与解决思路探讨

1.1概述 为了掌握某市政务网站的网络安全整体情况,在相关监管机构授权后,我们组织人员抽取了某市78个政务网站进行安全扫描,通过安全扫描,对该市政务网站的整体安全情况进行预估。 1.2工具扫描结果 本次利用漏洞扫描服务VSS共扫…

基于Springboot的集团门户网站(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的集团门户网站(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+纯verilog图像缩放+多路视频拼接,提供8套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收发送本方案的SDI接收图像缩放应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收OSD动态字符叠加输出应用本方案的SDI接收HLS多路视频融合叠加应用本方案的SDI接收GTX 8b/10b编解…

KeePass 密码库坚果云授权同步(免费)

前言介绍 KeePass是一款开源的密码管理工具,可以帮助你安全地存储和管理各种密码和敏感信息。 下载安装 下载KeePass:官网,下载KeePass的安装文件。根据你的操作系统选择适用的版本,比如Windows、macOS或Linux。 安装KeePass&a…

神经网络处理器优化设计(一)

神经网络处理器优化设计,涉及到一些特殊和通用处理流程,一是降低硬件成本,二是提高性能。 一 跨层流水线调度 这里主要针对深度可分离卷积,将Pointwise conv与Depthwise卷积并行处理,好处是,减小整体流水时…

开源生态与软件供应链研讨会

✦ 日程安排 开源生态与软件供应链研讨会 时间: 2024年3月12日(星期二)13:30 – 17:00 地点: 复旦大学江湾校区二号交叉学科楼E1021 联系人: 陈碧欢(bhchenfudan.edu.cn) 点击文末“阅读原文”或扫描下方二维码进入报名通…

cms垃圾回收

cms垃圾回收 CMS概述CMS收集器整体流程初始标记并发标记重新标记并发清除 CMS卡表什么是卡表(card table)什么是mod-union table CMS概述 CMS(Concurrent Mark Sweep)收集器是Java虚拟机中的一种老年代(old Generation)垃圾收集器,他主要目标是减少垃圾收集时的应用…

Redis实现分布式锁源码分析

为什么使用分布式锁 单机环境并发时,使用synchronized或lock接口可以保证线程安全,但它们是jvm层面的锁,分布式环境并发时,100个并发的线程可能来自10个服务节点,那就是跨jvm了。 简单分布式锁实现 SETNX 格式&…

k8s关于pod

目录 1、POD 的创建流程 kubectl 发起创建 Pod 请求: API Server 接收请求并处理: 写入 Etcd 数据库: Kubelet 监听并创建 Pod: Pod 状态更新和汇报: 2、POD 的状态解析 1. Pending Pod 2. Running Pod 3. S…

【PRIVGUARD-privguard-artifact-main】代码学习(parser部分)

privguard-artifact-main:parser部分简述 1.abstract_domain.py (1)简介 实现PrivGuard中的抽象域功能。PrivGuard是一个旨在确保Python程序符合特定隐私策略的工具。代码中定义了两种类型的抽象域:闭区间格(ClosedIn…

霹雳学习笔记——6.1.2 ResNeXt

相比于ResNet,更新了block 效果:错误率低于ResNet,并且计算量一样。 对比卷积和组卷积,参数个数会变成1/g倍,g是分成了g组 最终输出的channel与卷积核的个数相同。 (好像是。。。好像之前听过这个&#xff…

【LeetCode热题100】73. 矩阵置零(矩阵)

一.题目要求 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 二.题目难度 中等 三.输入样例 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0…

文字弹性跳动CSS3代码

文字弹性跳动CSS3代码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 下载地址 文字弹性跳动CSS3代码

Rust 构建开源 Pingora 框架可以与nginx媲美

一、概述 Cloudflare 为何弃用 Nginx,选择使用 Rust 重新构建新的代理 Pingora 框架。Cloudflare 成立于2010年,是一家领先的云服务提供商,专注于内容分发网络(CDN)和分布式域名解析。它提供一系列安全和性能优化服务…

4.MAC平台Python的下载、安装(含Python2.7+Python3.12双版本环境变量配置)——《跟老吕学Python编程》

4.MAC平台Python的下载、安装(含Python2.7Python3.12双版本环境变量配置)——《跟老吕学Python编程》)——跟老吕学Python编程 一、下载MAC版Python1.Python官网2.MAC版Python下载网址 二、在MAC安装Python1.在MAC安装Python2.阅读Python重要…

【Ubuntu-20.04】OpenCV-3.4.16的安装并对图片与视频处理

【Ubuntu-20.04】OpenCV-3.4.16的安装并对图片与视频处理 一、安装OpenCV-3.4.161.下载OpenCV-3.4.16安装包2.将安装包放到/home,并解压3.使用 cmake 安装 opencv4.配置环境5.查看 opencv 的版本信息 二、处理图片(一)创建文件夹 code &#…

【TB作品】MSP430,波形发生器,单片机,Proteus仿真

文章目录 题目效果梯形波100个点产生方法锯齿波100个点产生方法c代码和proteus仿真 题目 114 波形发生器的制作 设计要求 设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。设置5个开关K1~K5(从 上到下),分别对应正弦波、方波、三角波、梯形波、锯齿波,按一下…