【stm32-5】输入捕获模式测频率PWMI模式测频率占空比

1.输入捕获模式测频率

(1)main.c

#include "Device/Include/stm32f10x.h"   // Device header
#include "pwm.h"
#include "delay.h"
#include "OLED.h"
#include "IC.h"
uint8_t i;
int main(void)
{
//PWM模块将待测信号输出到PA0,PA0通过导线,输入到PA6(TIM3的通道1):通过输入捕获模块,测量得到频率OLED_Init();PWM_Init();IC_Init();OLED_ShowString(1,1,"Freq:00000HZ");PWM_SetPrescaler(720-1);		//Freq=72M/(PSC+1)/(ARR+1)改变频率PWM_setcompare1(50);			//Duty=CCR/100改变通道1占空比//PA0口输出频率为Freq=72M/(PSC+1)/(ARR+1)=1000HZ//PA0口输出一个频率1000HZ,占空比为50%的待测信号while(1){OLED_ShowNum(1,6,IC_GetFreq(),5);}
}

(2) pwm.c

#include "Device/Include/stm32f10x.h"   // Device header
void PWM_Init(void)
{
//根据PWM基本结构框图,时基单元初始化、输出比较单元选择(TIM1通道初始化)RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);	//打开时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;	//复用推挽输出(输出控制权转移给片上外设)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);TIM_InternalClockConfig(TIM2);	//选择内部时钟TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstructure;	//初始化时基单元TIM_TimeBaseInitstructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitstructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitstructure.TIM_Period=100-1;//定时器周期,实际就是ARR的值。CCR的值直接就是占空比(分辨率为1%),若ARR为1000,分辨率为0.1%TIM_TimeBaseInitstructure.TIM_Prescaler=720-1;//通过改变PSC来改变PWM频率TIM_TimeBaseInitstructure.TIM_RepetitionCounter=0;//重复计数器,高级控制寄存器专用寄存器位,这里不用设置TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitstructure);//初始化定时器TIM_OCInitTypeDef TIM_OCInitstructure;TIM_OCStructInit(&TIM_OCInitstructure);	//结构体赋初始值TIM_OCInitstructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitstructure.TIM_OCPolarity=TIM_OCPolarity_High;TIM_OCInitstructure.TIM_OutputState=TIM_OutputState_Enable;	//输出状态TIM_OCInitstructure.TIM_Pulse=0;	//CCR的值TIM_OC1Init(TIM2,&TIM_OCInitstructure);	//使用PA0口,对应第一个通道,使用OC1Init函数//TIM1通道初始化TIM_Cmd(TIM2,ENABLE);//计数器使能,启动定时器
}
void PWM_setcompare1(uint16_t compare)
{TIM_SetCompare1(TIM2,compare);//CCR的值
}
void PWM_SetPrescaler(uint16_t Prescaler)
{TIM_PrescalerConfig(TIM2,Prescaler,TIM_PSCReloadMode_Immediate);//写入PSC//立刻生效
}

(3) IC.c

#include "Device/Include/stm32f10x.h"   // Device header
void IC_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);	//打开时钟选择PA6.TIM3_CH1RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;	//上拉输入,定时器TIM2345引脚,输入捕获通道GPIO应使用浮空输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);TIM_InternalClockConfig(TIM3);	//选择内部时钟TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstructure;	//初始化时基单元TIM_TimeBaseInitstructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitstructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitstructure.TIM_Period=65536-1;//防止计数溢出//定时器周期,实际就是ARR的值。CCR的值直接就是占空比(分辨率为1%),若ARR为1000,分辨率为0.1%TIM_TimeBaseInitstructure.TIM_Prescaler=72-1;//决定了测周法的标准频率Fc//通过改变PSC来改变PWM频率TIM_TimeBaseInitstructure.TIM_RepetitionCounter=0;//重复计数器,高级控制寄存器专用寄存器位,这里不用设置TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitstructure);//初始化定时器TIM_ICInitTypeDef TIM_ICInitstructure;TIM_ICInitstructure.TIM_Channel=TIM_Channel_1;//TIM_ICInitstructure.TIM_ICFilter=0xf;//选择输入比较滤波器,在0x0-0xf之间TIM_ICInitstructure.TIM_ICPolarity=TIM_ICPolarity_Rising;TIM_ICInitstructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;//??????????TIM_ICInitstructure.TIM_ICSelection=TIM_ICSelection_DirectTI;//不分频TIM_ICInit(TIM3,&TIM_ICInitstructure);//初始化TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1);//触发源选择TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);//选择从模式TIM_Cmd(TIM3,ENABLE);//开启定时器}
uint32_t IC_GetFreq(void)
{return 1000000/(TIM_GetCapture1(TIM3)+1);//fx=fc/N(HZ);}

 2.PWMI模式测频率占空比

(1)main.c

#include "Device/Include/stm32f10x.h"   // Device header
#include "pwm.h"
#include "delay.h"
#include "OLED.h"
#include "IC.h"
uint8_t i;
int main(void)
{
//PWM模块将待测信号输出到PA0,PA0通过导线,输入到PA6(TIM3的通道1):通过输入捕获模块,测量得到频率OLED_Init();PWM_Init();IC_Init();OLED_ShowString(1,1,"Freq:00000HZ");OLED_ShowString(2,1,"Duty:00%");PWM_SetPrescaler(720-1);		//Freq=72M/(PSC+1)/(ARR+1)PWM_setcompare1(50);			//Duty=CCR/100while(1){OLED_ShowNum(1,6,IC_GetFreq(),5);OLED_ShowNum(2,6,IC_GetDuty(),2);}
}

(2)IC.c

#include "Device/Include/stm32f10x.h"   // Device header
void IC_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);	//打开时钟选择PA6.TIM3_CH1RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;	//上拉输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);TIM_InternalClockConfig(TIM3);	//选择内部时钟TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstructure;	//初始化时基单元TIM_TimeBaseInitstructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitstructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitstructure.TIM_Period=65536-1;//防止计数溢出//定时器周期,实际就是ARR的值。CCR的值直接就是占空比(分辨率为1%),若ARR为1000,分辨率为0.1%TIM_TimeBaseInitstructure.TIM_Prescaler=72-1;//通过改变PSC来改变PWM频率TIM_TimeBaseInitstructure.TIM_RepetitionCounter=0;//重复计数器,高级控制寄存器专用寄存器位,这里不用设置TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitstructure);//初始化定时器TIM_ICInitTypeDef TIM_ICInitstructure;TIM_ICInitstructure.TIM_Channel=TIM_Channel_1;TIM_ICInitstructure.TIM_ICFilter=0x0;TIM_ICInitstructure.TIM_ICPolarity=TIM_ICPolarity_Rising;TIM_ICInitstructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;TIM_ICInitstructure.TIM_ICSelection=TIM_ICSelection_DirectTI;//TIM_ICInit(TIM3,&TIM_ICInitstructure);TIM_PWMIConfig(TIM3,&TIM_ICInitstructure);//PWMI基本结构TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1);//触发源选择TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);//选择从模式TIM_Cmd(TIM3,ENABLE);}
uint32_t IC_GetFreq(void)
{return 1000000/(TIM_GetCapture1(TIM3)+1);//fx=fc/N(HZ);}
uint32_t IC_GetDuty(void)
{return (TIM_GetCapture2(TIM3)+1)*100/(TIM_GetCapture1(TIM3)+1);
}

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

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

相关文章

202103青少年软件编程(Python)等级考试试卷(二级)

第 1 题 【单选题】 对于字典 infor {“name”:“tom”, “age”:13, “sex”:“male”}, 删除"age":13 键值对的操作正确的是?( ) A :del infor[‘age’] B :del infor[“age”:13] C : del infor D : infor.cle…

OceanBase 分布式数据库【信创/国产化】- OceanBase 并行执行

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 并行执行前言OceanBase 数据更新架构并行执行概念什么场景适用并行执行什么场景不适用并行执行OceanBase 并行执行硬件要求并行执行工作原理生产者-消费者流水线模型通过均衡负载来优化性能Oc…

idea连接远程仓库

git ->克隆。 url为远程仓库的地址,输入好后,选择项目存放目录,再点击克隆 点击新窗口打开。 切换到对应分支

使用Xshell工具连接ubuntu-方便快捷

使用Xshell连接ubuntu 在命令行输入 “sudo apt-get install openssh-server”安装openssh-server 开启 ssh-server,在命令行输入 “service ssh start”,然后输入密码即可

人情世故学不完

人情世故学不完: 1、跟太熟的人,少说谢谢,不用急着还人情,真朋友反而不在意这些,坦然,讨喜。 2、跟不熟悉的人,不开玩笑,不说反话,简单直接,减少麻烦。 3、不要当着外…

【代码随想录】day52

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、300最长递增子序列二、674最长连续递增序列三、718最长重复子数组 一、300最长递增子序列 class Solution { public:int lengthOfLIS(vector<int>& …

Spring Boot | Spring Boot 整合“ 邮件任务“ 实现

目录: Spring Boot 整合" 邮件任务" 实现 :一、发送 "纯文本邮件" :(1) 添加 "邮件服务" 依赖启动器(2) 添加 "邮件服务" 配置信息(3) 定制 "邮件发送服务"(4) "纯文本" 邮件发送 测试效果 二、发送 带 "附件…

使用 Flutter 实现 MVVM 架构

文章目录 什么是 MVVM 架构&#xff1f;MVVM 架构设计代码案例ModelViewModelView 扩展 MVVM 架构1. 引入服务层2. 使用依赖注入3. 状态管理4. 遵循最佳实践 实战案例&#xff1a;待办事项应用Model服务层ViewModelView 结论 在本文中&#xff0c;我们将探讨如何在 Flutter 应用…

进程和计划任务管理

查看系统进程信息 静态查看系统进程信息之ps命令 &#xff08;每五秒刷新一次数据&#xff09; 方法一&#xff1a;ps aux //显示所有进程 a&#xff1a;显示现行终端下的所有进程&#xff0c;包括其它用户的进程。u&#xff1a;显示进程的归属用户及内存的使用情况。x…

【qt】动态属性

这里写目录标题 一.属性1.属性的好处2.添加属性3.使用属性 二.只读属性 一.属性 1.属性的好处 说到属性&#xff08;property&#xff09;&#xff0c;你们会想到什么&#xff1f;我会联想到特点&#xff0c;就是一类对象所特有的&#xff0c;在C中&#xff0c;成员数据就是这…

2.3 Spark运行架构与原理

Spark运行架构由SparkContext、Cluster Manager和Worker构成。在集群模式下&#xff0c;Driver进程初始化SparkContext并向Cluster Manager申请资源&#xff0c;后者根据算法在Worker节点上启动Executor。Executor负责任务执行&#xff0c;反馈状态给Cluster Manager。任务由Ta…

MyBatis-Plus核心功能详解:条件构造器、自定义SQL与Service接口

在Java的Web开发中&#xff0c;MyBatis-Plus作为MyBatis的增强工具&#xff0c;提供了许多实用的功能&#xff0c;极大地简化了数据库操作的开发过程。下面&#xff0c;我们将详细探讨MyBatis-Plus的三大核心功能&#xff1a;条件构造器、自定义SQL以及Service接口。 一、条件…

FBX Python SDK 入门教程

安装 1. 下载 FBX Python SDK 官网地址&#xff0c;根据你的操作系统&#xff0c;下载相应的 FBX SDK 2020.3.4 Python exe 文件。 2. 安装 执行下载的文件 fbx202034_fbxpythonsdk_win.exe&#xff0c;安装完的程序路径我的是 D:\Program Files\Autodesk\FBX\FBX Python SDK\…

构建滴滴业务中台:系统架构设计探索

在当今数字化时代&#xff0c;滴滴作为中国领先的出行平台&#xff0c;承载着数亿用户的出行需求&#xff0c;业务规模庞大且复杂多样。为了更好地支撑业务发展和提升服务质量&#xff0c;滴滴不断探索和构建业务中台&#xff0c;以实现业务的快速响应、灵活运营和持续创新。在…

【vivado】debug相关时钟及其约束关系

一、前言 在xilinx fpga的degug过程中&#xff0c;经常出现由于时钟不对而导致的观测波形失败&#xff0c;要想能够解决这些问题需要了解其debug的组成环境以及之间的数据流。本文主要介绍debug过程中需要的时钟及各时钟之间的关系。 二、debug相关时钟 Vivado 硬件管理器使…

【NodeMCU实时天气时钟温湿度项目 6】解析天气信息JSON数据并显示在 TFT 屏幕上(心知天气版)

今天是第六专题&#xff0c;主要内容是&#xff1a;导入ArduinoJson功能库&#xff0c;借助该库解析从【心知天气】官网返回的JSON数据&#xff0c;并显示在 TFT 屏幕上。 如您需要了解其它专题的内容&#xff0c;请点击下面的链接。 第一专题内容&#xff0c;请参考&a…

Spring MVC 拦截器编程开以及常见问题

写在前面&#xff1a;最近在对一个微服务增减接口拦截器的时候&#xff0c;定义的拦截器未能生效&#xff0c;并且未报任何异常&#xff0c;swagger的ui也无法正常访问。经查明原因&#xff1a;prehandler方法最后返回的布尔值是false&#xff0c;拦截器定义部分是从其他服务拷…

商城小程序系统与C#.net商城小程序系统源码_OctShop

在移动互联网与电商的时代&#xff0c;商城小程序系统已经成为了众多企业和商家开展电商业务的重要工具。OctShop将以商城小程序系统、C#商城小程序系统源码和.net 商城小程序系统为主题&#xff0c;探讨这些系统的特点和优势。 一、商城小程序系统是什么 商城小程序系统是一种…

Python实战开发及案例分析(20)—— 宽度优先

宽度优先搜索&#xff08;Breadth-First Search, BFS&#xff09;是一种遍历图或树的算法。它从根节点开始&#xff0c;探索所有邻近节点&#xff0c;然后再按顺序访问每个邻近节点的邻居&#xff0c;直到所有节点都被访问为止。在图中&#xff0c;为了避免访问同一个节点多次&…

建筑乙级资质延期中的政策变化与应对策略

在建筑乙级资质延期过程中&#xff0c;政策的变化可能会对企业的运营和策略产生重大影响。为了应对这些变化&#xff0c;企业需要密切关注政策动态&#xff0c;灵活调整自身的经营策略。以下是一些可能的政策变化及相应的应对策略&#xff1a; 一、政策变化 资质延期条件调整&a…