stm32系列--同一定时器双通道捕获

 

void TIM3_Cap_Init(u16 arr,u16 psc)//定时器3通道2输入捕获配置
{TIM_ICInitTypeDef  TIM_ICInitStructure; TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道被使能NVIC_Init(&NVIC_InitStructure);//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器//INIT_GPIO(RCC_APB2Periph_GPIOA,GPIOA,GPIO_Pin_6,GPIO_Mode_IPU); //初始化A06为上拉输入,用于输入捕捉
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);     //使能PA端口时钟
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;                      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;          //上拉输入GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //IO口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);    //初始化定时器4 TIM2     TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值 TIM_TimeBaseStructure.TIM_Prescaler =psc;     //预分频器   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
        TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;    //选择输入端,TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; //双沿捕获TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;   //配置输入分频,不分频TIM_ICInitStructure.TIM_ICFilter = 0x0;     //配置输入滤波器 不滤波  TIM_ICInit(TIM3, &TIM_ICInitStructure); //初始化参数
        TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;    //选择输入端,TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //双沿捕获  //TIM_ICPolarity_RisingTIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;   //配置输入分频,不分频TIM_ICInitStructure.TIM_ICFilter = 0x0;     //配置输入滤波器 不滤波  TIM_ICInit(TIM3, &TIM_ICInitStructure); //初始化参数
    TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2 ,ENABLE);TIM_Cmd(TIM3, ENABLE);      //使能定时器3
}void TIM3_IRQHandler(void)   //TIM3中断服务函数
{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)     {        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);             //清除中断标志位
        }if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET)            //捕获1发生捕获事件
        {    myt3.TIM3CH1_CAPTURE_VAL=TIM_GetCapture1(TIM3);TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);             //清除中断标志位 
        }    if (TIM_GetITStatus(TIM3, TIM_IT_CC2) != RESET){    myt3.TIM3CH2_CAPTURE_VAL=TIM_GetCapture2(TIM3);myt3.timout=5;myt3.handle_timout=5000;//不再有测量 5s后输出结果TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);             //清除中断标志位 
        }            
}
TIM3_Cap_Init
    TIM3_Cap_Init(0xffff,71); //PA6
main
void TIM4_IRQHandler(void)   //TIM3中断 1MS
{u8 st;if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 
    {      st= TIM_GetFlagStatus(TIM4, TIM_FLAG_Update);    if(st==SET){TIM_ClearFlag(TIM4, TIM_FLAG_Update);if(myusart.timout>0)//5MS 开始处理数据
            {if(--myusart.timout==0){myusart.reflag=1;  //收到一帧数据
}}if(myt3.timout>0)//5MS 开始处理数据
            {if(--myt3.timout==0){myt3.sum++;    myt3.TIM3CH1_CAPTURE_VAL += 400;myt3.TIM3RET=myt3.TIM3CH1_CAPTURE_VAL-myt3.TIM3CH2_CAPTURE_VAL;if(myt3.TIM3RET<2000 && myt3.TIM3RET>0)myt3.pass++;//                    if((myt3.k_num>=3) && (myt3.pass >= 3))
//                    {
//                        printf("pass\r\n");
//                        GPIO_SetBits(GPIOA,GPIO_Pin_0);;
//                    }
//                    printf("TIM3RET= %d\r\n",myt3.TIM3RET);
                }}if(myt3.judge_count++ >= 500)//没500MS 做一次判断;还是不行,会把测试通过的结果清除掉
            {myt3.judge_count=0;    if(myt3.finish_flag==0){if((myt3.pass >= myt3.sum/2) && (myt3.pass >= 3)){GPIO_SetBits(GPIOA,GPIO_Pin_0);myt3.finish_flag=1;}else{GPIO_ResetBits(GPIOA,GPIO_Pin_0);myt3.finish_flag=0;}}        }if(myt3.handle_timout>0)//5S 开始处理数据
            {if(--myt3.handle_timout==0){if((myt3.pass >= myt3.sum/2) && (myt3.pass >= 3)){printf("pass\r\n");GPIO_SetBits(GPIOA,GPIO_Pin_0);myt3.finish_flag=1;}else{printf("null\r\n");GPIO_ResetBits(GPIOA,GPIO_Pin_0);myt3.finish_flag=0;}myt3.pass=0;myt3.sum=0;}}            }    TIM_ClearITPendingBit(TIM4, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源 
    }
}
TIM4_IRQHandler

 

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

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

相关文章

赛博斗地主——使用大语言模型扮演Agent智能体玩牌类游戏。

通过大模型来实现多个智能体进行游戏对局这个想对已经比较成熟了无论是去年惊艳的斯坦福小镇还是比如metaGPT或者类似的框架都是使用智能体技术让大模型来操控,从而让大模型跳出自身“预测下一个token”的文字功能去探索更多的应用落地可能性。不过一直没有真正操作过,直到前…

Ollama,在centos7宿主机上,curl http://宿主机IP:11434 提示拒绝访问 ,但是curl http://localhost:11434 正常

Ollama,在centos7宿主机上,curl http://宿主机IP:11434 提示拒绝访问 ,但是curl http://localhost:11434 正常1.使用 netstat 或 ss 命令在宿主机上检查 11434 端口的状态[root@localhost ~]# netstat -tulnp | grep 11434 tcp 0 0 127.0.0.1:11434 0.…

NFS,smb和数据库文件

nfs的搭建网上有很多,可自行查看 Windows Server2012 R2搭建NFS服务器 - 知乎 (zhihu.com) 其中Windows10家庭版不支持NFS客户端,目前Windows上的协议是V3版本,防火墙上有NFS的选项,端口2049udp和tcp 在客户端上的访问和smb一样,都可映射网络驱动器,使用\\ip\目录方式访问…

JavaDoc生成文档

javaDoc命令是用来生成自己API文档的参数信息:@auchor:作者名 @version:版本号 @since:指明需要最早使用的jdk版本 @param:参数名 @return:返回值情况 @throws:异常抛出情况//主要生成的参数 如:/*** @author 林伟填* @version 1.0* @since 1.8*/public class doc {Str…

心诺安 x TapData:快速搭建云中数仓,助力电商企业实施“以用户为中心的”精细化运营

电商企业如何充分整合并利用自身数据资源,实现高效的数据管理和业务流程优化,迎接用户导向的电商精细化运营时代的挑战。使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量代替 OGG、DSG 等同步工具,「CDC + 流处理 + 数据集成」组合拳,加速仓内数据流转…

Docker安装使用教程

Docker安装使用教程Docker是什么Docker是一个容器化开源平台,它使开发者可以再容器中封装应用程序,以及其依赖的所有组件,包括操作系统、库文件、环境变量等,并以轻量级、可移植的方式进行交付和部署.Docker的三大核心概念是:镜像(Image):镜像是Docker的基本构建块,它是一…

未来5年,只有这种产品团队才能开启上帝视角【玩转IPD】

一家企业如何在波涛汹涌的市场浪潮中站稳脚跟?一个团队如何快速识别风险发现机遇,成为行业的标杆?一家企业如何在波涛汹涌的市场浪潮中站稳脚跟?一个团队如何快速识别风险发现机遇,成为行业的标杆?市场瞬息万变,如何准确地响应市场动向,紧跟用户需求?这些问题,已成为…

Linux 部署 MinIO(远程服务器)

1. 下载安装 进入 Linux 内# 我习惯放在local下 cd /usr/local/# 新建目录 mkdir minio # 进入目录 cd minio下载路径:# 下载地址 wget https://dl.min.io/server/minio/release/linux-amd64/minio授权:# 授权 chmod +x minio 2. 自定义配置 自定义账号与登录密码,直接在本…

STM32H743 ADC+DMA

1.** STM32CubeMX 配置如下:** ADC: 配置通道配置ADC的工作模式,这里用到了DMA使用ADC中断DMA2的通道4对应ADC2GPIO的配置,没有配置上下拉DMA配置:用STM32H743用DMA传输ADC的数据会有一个需要注意的点,需要将传输数据的buf配置在固定的某一段RAM中。 #define ADC_CONVERTE…

裁剪的3种方式,CSS 如何隐藏移动端的滚动条?

在移动端开发中,经常会碰到需要横向滚动的场景,例如这样的但很多时候是不需要展示这个滚动条的,也就是这样的效果,如下你可能想到直接设置滚动条样式就可以了,就像这样::-webkit-scrollbar {display: none; }目前来看好像没什么问题,但在某些版本的 iOS 上却无效(具体待…

golang使用OpenCC繁简转换

https://github.com/longbridgeapp/opencc main.go package mainimport ("fmt""log""github.com/longbridgeapp/opencc" )func main() {s2t, err := opencc.New("s2t")if err != nil {log.Fatal(err)}in := `我来测试一下简转繁`out, …

visual studio 插件开发 - 项目介绍

1.项目结构 创建步骤: 1.创建名为 xxxx 的 VSIX 项目。 可以通过搜索“vsix”在“新建项目”对话框中找到 VSIX 项目模板。2.项目打开时,添加名为 FirstCommand 的自定义命令项模板。创建好一个 vsix 项目后最简单的结构:XXXXPackage.cs 称为 Package 类。 Visual Studio 调…