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

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

这个程序最后的实验结果是读取到的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.mfbz.cn/a/455066.html

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

相关文章

FPGA - 单总线协议(one-wire)

1,简介 单总线(one-wire)是美国 DALLAS 公司推出的外围串行扩展总线技术,与 SPI、I2C 等串行数据通信方式不同,它采用单根信号线,既传输时钟又传输数据,而且数据传输是双向的。它具有节省 I/O口…

数据结构中的平衡搜索树 --- 红黑树 (如何旋转与变色)

目录 红黑树的概念 红黑树的性质 红黑树节点的定义 红黑树的插入 1. 按照二叉搜索的树规则插入新节点 2. 检测新节点插入后,红黑树的性质是否造到破坏 红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统(深度学习模型+UI界面+训练数据集)

摘要:开发农作物害虫检测系统对于提高农业生产效率和作物产量具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个农作物害虫检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5&#xff0…

Linux——多线程

目录 线程概念 线程控制 线程创建 进程 vs 线程 线程异常 线程等待 线程终止 pthread_cancel 进程替换 线程分离 线程互斥 mutex mutex接口 mutex的理解 互斥锁的实现 可重入和线程安全 死锁 什么是死锁 死锁产生的必要条件 避免死锁 线程同步 概念 条件…

论坛管理系统|基于Spring Boot+ Mysql+Java+B/S架构的论坛管理系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 目录 前台功能效果图 管理员功能登录前台功能效果图 用户功能模块 系统功能设计 数据库E-R图设计 l…

webpack面试题

1、webpack是干什么的 Webpack是一个现代的JavaScript应用程序的静态模块打包工具。当webpack处理应用程序时,它会在内部构建一个依赖图,此依赖图对应映射到项目所需的每个模块,然后将所有这些模块打包成一个或多个bundle。Webpack的主要功能…

Java初阶数据结构队列的实现

1.队列的概念 1.队列就是相当于排队打饭 2.在排队的时候就有一个队头一个队尾。 3.从队尾进对头出 4.所以他的特点就是先进先出 所以我们可以用链表来实现 单链表实现要队尾进队头出{要有last 尾插头删} 双向链表实现效率高:不管从哪个地方当作队列都是可以的&…

HttpContext请求接收上下文模块设计与实现(http模块四)

目录 类功能 类定义 类实现 编译测试 类功能 类定义 // HttpContext接收请求上下文模块功能设计 typedef enum {RECV_HTTP_ERROR,RECV_HTTP_LINE,RECV_HTTP_HEAD,RECV_HTTP_BODY,RECV_HTTP_OVER } HttpRecvStatu;class HttpContext { private:int _resp_statu; …

Games101笔记-变换

Scale Reflection Shear Rotate 没有额外提示默认绕原点旋转 线性变换 Transiation 不属于线性变换,仿射变换 齐次坐标 二维的点和向量增加一个维度 点加点等于两个点的中点 所有的仿射变换都可以写成齐次坐标的形式 在表示二维情况下的仿射变换时&#…

Linux驱动分离与分层的简介

一. 简介 我们在前面几章编写的设备驱动都非常的简单,都是对 IO 进行最简单的读写操作。 像 I2C 、SPI 、 LCD 等这些复杂外设的驱动就不能这么去写了, Linux 系统要考虑到驱动的可重用性,因 此,提出了驱动的分离与分层这样的软…

Maven: There are test failures.(已解决)

问题解决办法 进行package打包时报错如下: 然后这些并不能看出是测试的哪里的问题,可以点击上一级进行查看更详细的错误,越向上日志越详细,可以看到是52行出了错误, 52对应代码如下: 原因是存在注册的测…

基于FPGA的图像锐化算法(USM)设计

免费获取源码请关注微信号《FPGA学习笔记册》! 1.图像锐化算法说明 图像锐化算法在实际的图像处理应用很广泛,例如:医学成像、工业检测和军事领域等;它的作用就是将模糊的图像变的更加清晰。常用的图像锐化算法有拉普拉斯算子、s…

记录一下在Pycharm中虚拟环境的创建

如果在Pycharm中要新建一个虚拟环境,那你可以在Terminal中选择Command Prompt,在这里面执行相关命令 一、安装了Anaconda,创建虚拟环境 当你使用解释器是Anaconda提供的时,你可以使用conda命令执行,见以下操作&#x…

Acwing.4261 孤独的照片(贡献法)

题目 Farmer John 最近购入了 N 头新的奶牛,每头奶牛的品种是更赛牛(Guernsey)或荷斯坦牛(Holstein)之一。 奶牛目前排成一排,Farmer John 想要为每个连续不少于三头奶牛的序列拍摄一张照片。 然而&…

华为组网:核心交换机旁挂防火墙,基于ACL重定向配置实验

如图所示,由于业务需要,用户有访问Internet的需求。 用户通过接入层交换机SwitchB和核心层交换机SwitchA以及接入网关Router与Internet进行通信。为了保证数据和网络的安全性,用户希望保证Internet到服务器全部流量的安全性,配置重…

Flask开发类似jenkins构建自动化测试任务工具

1、自动化 某一天你入职了一家高大上的科技公司,开心的做着软件测试的工作,每天点点点,下班就走,晚上陪女朋友玩王者,生活很惬意。 但是美好时光一般不长,这种生活很快被女主管打破。为了提升公司测试效率…

如何“使用Docker快速安装Jenkins,在CentOS7”?

1、运行 docker run -d --namejenkins -p 8080:8080 jenkins/jenkins 2、查看日志 ,使用 "docker logs -f jenkins",可以持续刷新日志 docker logs jenkins 3、通过命令查看密码 docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminP…

用云服务器构建gpt和stable-diffusion大模型

用云服务器构建gpt和stable-diffusion大模型 一、前置知识二、用云端属于自己的聊天chatGLM3step1、项目配置step2、环境配置1、前置知识2、环境配置流程 step3、创建镜像1、前置知识2、创建镜像流程 step4、通过 Gradio 创建ChatGLM交互界面1、前置知识2、创建ChatGLM交互界面…

YOLOv8改进 | 图像去雾 | 特征融合注意网络FFA-Net增强YOLOv8对于模糊图片检测能力(北大和北航联合提出)

一、本文介绍 本文给大家带来的改进机制是由北大和北航联合提出的FFA-net: Feature Fusion Attention Network for Single Image Dehazing图像增强去雾网络,该网络的主要思想是利用特征融合注意力网络(Feature Fusion Attention Network)直接…

基于单片机的Buck型变换器控制

摘要:对于电子产品而言,必不可少的供电电源,随着人们对电子产品的安全性能要求越来越高,变相的对供电电源提出了新的机遇和挑战。Buck型变换器控制的研究一直是该领域重要的一方面,对于直流斩波电路而言,研…