-
2021-01-17 16:33:29
【实例简介】
通过外部PB11口进行捕获上升沿来触发ADC捕获,欢迎大家下载
【实例截图】
【核心代码】
8f9ao1
└── 新建文件夹
├── HARDWARE
│ ├── adc
│ │ ├── adc.c
│ │ └── adc.h
│ ├── DMA
│ │ ├── dma.c
│ │ └── dma.h
│ ├── EXTI
│ │ ├── exti.c
│ │ └── exti.h
│ ├── KEY
│ │ ├── key.c
│ │ └── key.h
│ ├── LED
│ │ ├── led.c
│ │ └── led.h
│ ├── TIMER
│ │ ├── timer.c
│ │ └── timer.h
│ └── WDG
│ ├── wdg.c
│ └── wdg.h
├── keilkilll.bat
├── README.TXT
├── SYSTEM
│ ├── delay
│ │ ├── delay.c
│ │ └── delay.h
│ ├── sys
│ │ ├── sys.c
│ │ └── sys.h
│ └── usart
│ ├── usart.c
│ └── usart.h
└── USER
├── adc.crf
├── adc.d
├── adc.o
├── delay.crf
├── delay.d
├── delay.o
├── dma.crf
├── dma.d
├── dma.o
├── ExtDll.iex
├── exti.crf
├── exti.d
├── exti.o
├── JLinkLog.txt
├── JLinkSettings.ini
├── key.crf
├── key.d
├── key.o
├── led.crf
├── led.d
├── led.o
├── STM32F10x.d
├── STM32F10x.lst
├── STM32F10x.o
├── STM32F10x.s
├── sys.crf
├── sys.d
├── sys.o
├── TEST.axf
├── test.c
├── test.crf
├── test.d
├── TEST.hex
├── TEST.htm
├── TEST.lnp
├── TEST.map
├── test.o
├── TEST.plg
├── TEST.sct
├── TEST_sct.Bak
├── TEST_Target 1.dep
├── TEST.tra
├── TEST.uvgui.zhuminghui
├── TEST.uvopt
├── TEST_uvopt.bak
├── TEST.uvproj
├── TEST_uvproj.bak
├── timer.crf
├── timer.d
├── timer.o
├── usart.crf
├── usart.d
├── usart.o
├── wdg.crf
├── wdg.d
└── wdg.o
14 directories, 78 files
更多相关内容 -
stm32的定时器上升沿下降沿双触发
2019-12-18 13:24:16void TIM5_Configuration(unsigned short frequency) { //8000 NVIC_InitTypeDef NVIC_...if(GPIOA->IDR & 0x0001) //上升沿 { testcnt1++; } else { testcnt2++; } } }void TIM5_Configuration(unsigned short frequency)
{ //8000
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIOA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA0
GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5); //PA0复用位定时器5
TIM_DeInit(TIM5);
TIM_TimeBaseStructure.TIM_Period = frequency;
TIM_TimeBaseStructure.TIM_Prescaler = 1;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置计数器模式为向上计数模式
TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure); //将配置应用到TIM2中
TIM_ClearFlag(TIM5, TIM_FLAG_Update); //清除溢出中断标志
//初始化TIM5输入捕获参数
TIM5->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC1E); //捕获禁止
TIM5->CCMR1 |= 0x03; // IC1映射在TRC上
TIM5->SMCR |= (1 << 6); //TI1的边沿检测器
TIM5->SMCR &= ~((1 << 5) | (1 << 4));
TIM5->CCER |= ((uint16_t)TIM_CCER_CC1E); //捕获使能
NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断 ,允许CC1IE捕获中断
TIM_Cmd(TIM5, ENABLE);//DISABLE);
}
void TIM5_IRQHandler(void)
{
if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)//是更新中断
{
TIM_ClearITPendingBit(TIM5, TIM_IT_Update); //清除TIM3更新中断标志
}
if(TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
{
TIM_ClearITPendingBit(TIM5, TIM_IT_CC1); //清除TIM3更新中断标志
if(GPIOA->IDR & 0x0001) //上升沿
{
testcnt1++;
}
else
{
testcnt2++;
}
}
}
-
STM32(8):番外篇之“上升沿 vs. 下降沿”
2022-01-20 22:18:02而且建议尽量不要使用双沿触发,即对于时钟的触发最好同步设置为上升沿/下降沿触发。 双沿触发的场景 场景描述 下面使用两个D触发器来说明双沿触发问题,如下图所示是两个D触发器,其中D(ata)口用于接收数去,Q口...D触发器的约定
D触发器里面约定的时钟是上升沿敏感(postedge),reset(重置)是下降沿敏感(negedge);这种是约定俗称;如果时钟改成是下降沿敏感,就是反向D触发器;上升沿下降沿互换在绝大多数场景下是没有问题的,但是有些特殊场景是不建议使用的。而且建议尽量不要使用双沿触发,即对于时钟的触发最好同步设置为上升沿/下降沿触发。
双沿触发的场景
场景描述
下面使用两个D触发器来说明双沿触发问题,如下图所示是两个D触发器,其中D(ata)口用于接收数去,Q口用于输出数据,clk口用于接收时钟脉冲;下面是圈A、圈B两个D触发器,其中圈A的D口接收数据,通过圈A的Q口进行输出,输出到圈B的D口;A的时钟和B的时钟同步,不过A的时钟是上升沿敏感,B的时钟是下降沿敏感,reset可以忽略,和本次内容无关:
宽沿场景
A的端口用A_D,A_Q来表示,B的端口用B_D,B_Q来表示;他们的时序如下,描述的是
-
STM32用软件实现上升沿检测的方法
2021-06-10 21:21:28最后返回(Rtrig== 1) 代码实现 #define UNTRIGED 0 //未触发状态 #define TRIGED 1 //已触发状态 #define OTHER_STATE 2 //其他状态 #define u32 unsigned int #define ON 1 //Pin为高电平 #define OFF 0 //Pin为...基本思路
- 定义一个静态变量Rtrig初始化为0;
- 当按键按下时先适当延时进行滤波处理,再次判断按键的有效性;
- 如果按键有效则判断Rtrig的值,如果Rtrig的值为0,则将Rtrig赋值为1,否则将Rtrig赋值为2
- 如果按键无效则将Rtrig赋值为0;
- 最后返回(Rtrig== 1)
代码实现
#define UNTRIGED 0 //未触发状态 #define TRIGED 1 //已触发状态 #define OTHER_STATE 2 //其他状态 #define u32 unsigned int #define ON 1 //Pin为高电平 #define OFF 0 //Pin为低电平 void CheckRtrig(u32 PinValue){ //定义静态变量Rtrig取值范围(UNTRIGED:0; TRIGED:1;OTHER_STATE 2)来状态存储 //当前状态,并将其初始化为未触发状态(UNTRIGED) static u32 Rtrig = UNTRIGED; //检测Pin状态是否有效 if(PinValue == ON){ //延时滤波 Delay_ms(100); //再次检测Pin状态是否有效 if(PinValue == ON){ //如果当前状态为,未触发状态(UNTRIGED),则将其变更为触发状态(TRIGED) if(Rtrig == UNTRIGED ){ Rtrig = TRIGED; }else{ //如果当前状态为触发状态(UNTRIGED)或其他状态(OTHER_STATE),将当前状态 //变更为其他状态 Rtrig = OTHER_STATE; } } }else{//如果按键无效则将状态变更为未触发状态(UNTRIGED) Rtrig = UNTRIGED; } return (Rtrig == TRIGED) } void Delay_ms(u32 i){ u32 temp; //设置重装数值, 72MHZ时 SysTick->LOAD = 9000 * i; //使能,减到零是无动作,采用外部时钟源 SysTick->CTRL=0X01; //清零计数器 SysTick->VAL=0; do{ //读取当前倒计数值 temp=SysTick->CTRL; }while((temp & 0x01) && (!(temp & (1 << 16)))); //等待时间到达 //关闭计数器 SysTick->CTRL=0; //清空计数器 SysTick->VAL=0; }
-
STM32下降沿触发的外部中断频繁进入中断函数。
2022-02-12 12:24:03起初想用stm32做一个中断控制的4x4阵列键盘,利用的是PA0~PA7,八个I/O口。摁下按键对应的横(纵)线为接地为低电平。 识别方式为PA4~PA7设为上拉电阻输入,PA0~PA3设为推挽输出并将其复位(设为0)来保证无论... -
STM32实现一个定时器对多路进行上升沿采集
2021-06-17 18:35:48//上升沿捕获 TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI; TIM_ICInit(TIM4,&TIM_ICInitStructure); //配置TIM4 Channe2输入捕获 ... -
关于STM32F407一次事件触发两次中断
2021-01-03 22:29:49关于STM32F407一次事件触发两次中断问题描述“bug的提出”“bug的解决”功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格... -
STM32外部中断触发
2020-10-21 16:50:49最近在做一个关于USB PD快充的项目,在使用外部中断的时候遇到了一个奇怪的问题,一使能中断就直接触发了外部中断,进去...- 上升沿触发选择寄存器(EXTI_RTSR) - 下降沿触发选择寄存器(EXTI_FTSR) - 挂起寄存器(E -
stm32f4 PWM捕获 (上升沿/下降沿/高低电平时间)详解(含代码)
2022-06-02 10:14:36stm32f4 PWM捕获 (上升沿/下降沿/高低电平时间)详解(含代码) -
STM32F103 设置双边沿触发输入捕获中断(TIM3 CH1)
2021-08-13 16:15:31在STM32的配置中,有这么一个设置: 但是这其实是设置下降沿捕获,对应设置的寄存器为CCER, 可以看到这双沿触发就是下降沿触发。因为bit[3:2]都是保留的。 因此在仔细查看了各路大佬的博客后,发现双边沿触发... -
STM32学习记录3——中断
2021-02-18 23:00:56//改变C3小灯引脚的状态 } } 这里有个小插曲,在上升沿触发中断的时候容易被多次触发,所以尝试在回调函数中使用延时函数,延时20毫秒,想要在第一次上升沿触发中断以后,跳过在按键抬起后的震荡,但是程序运行了... -
STM32F407计数器测频(寄存器版本)
2020-09-20 10:46:49该程序是基于STM32F407计数器测频程序,寄存器版本,通过内部计数器来计数外部脉冲的上升沿个数,然后测出外部脉冲的频率 -
STM32按键总结(低电平有效及上升沿有效)
2021-02-07 09:42:28低电平有效的按键 #define KEY1 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)//读取按键0 #define KEY2 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)//读取按键1 #define KEY3 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_... -
STM32外部中断边沿触发存在延时问题
2020-05-31 16:20:56STM32外部中断时延问题 概括:通过软件调试,示波器观察的方式,来分析外部中断存在时延的...在调试模拟SPI接收的时候,想用外部中断检测上升沿的方式来捕捉SCK的上升沿却发现了外部中断存在时延的情况。 直接上图 ... -
STM8L151C8单片机学习例程(6)——外部中断上升沿触发,翻转LED
2020-02-05 11:38:31STM8L_6_EXIT: 1.User:工程及main文件 2.Hardware:EXIT,CLK,LED,Delay 3.STM8L15x_StdPeriph_Driver:STM8自带库...5.Function: 外部中断上升沿触发,翻转LED /** *****************************************... -
STM32F103RCT6配置浮空输入检测上升沿遇到中断误触发问题
2022-06-16 10:58:23浮空输入中断被误触发问题 -
使用STM32F3系列进行ADC外部事件触发采集
2020-09-05 14:36:18STM32F301x6/8的ADC具有高性能与低功耗的特征。 该ADC具有AHB从总线接口,允许快速数据处理;且ADC转换时间与AHB总线时钟频率无关,相互独立。也就是说,该系列的ADC可以拥有72MHz的时钟频率,12位精度在快速通道下... -
STM32定时器触发ADC的时序话题
2021-02-10 16:58:17在STM32芯片的ADC应用中,我们往往会利用定时器来触发ADC的启动转换,而能够触发ADC转换的定时器事件往往有多个,有时我们可能很关注这些定时器事件在触发ADC时有哪些时序上的差别。下... -
STM32F429外部触发AD采样的问题
2021-01-17 16:33:24void ADC_RegularChannelConfig(ADC_HandleTypeDef *AdcHandle, uint32_t Channel, uint32_t Rank, uint32_t SamplingTime){ADC_ChannelConfTypeDef ADC1_ChanConf;ADC1_ChanConf.Channel = Channel; ... -
外部中断之上升沿触发程序
2012-11-28 17:04:04由于外部中断只有下降沿触发,因此我想通过一个三极管来实现上升沿触发。这个是可以的,但是还有一个问题,每次一上电就会产生一个上升沿,造成误动作。因此用的时候要特别注意!!!!!!!!!!!!!! #... -
STM32中断触发和事件触发彻底理解
2020-07-12 21:15:39先拿一件生活中的事情打比方对上述三个概念做个基本的粗略理解,之后再分享一个STM32 GPIO外部中断配置案例。 比如一老师在教室里给学生们上课。课堂上的学生可能做出各种行为动作,比方做笔记、打哈气、翻书包、讲... -
STM32CUBEMX配置教程(十二)STM32的定时器触发的固定频率ADC采样(使用DMA)
2021-08-06 13:55:20STM32CUBEMX配置教程(十二)STM32的定时器触发的固定频率ADC采样(使用DMA) -
stm32f407进入两次中断的解决办法
2020-11-24 15:47:25刚开始的程序 结果 将清除标志位放在了前面 结果 -
捕获按键下降沿的值(基于STM32F10XRBT6)
2022-03-29 18:15:29输入捕获和按键前言一 按键二 输入捕获1 捕获2捕获事件3 代码实现 ...上升沿也是如此(0-1) 二 输入捕获 1 捕获 根据图上可以分析出来 比如 你要捕获下降沿的数据 捕获他是一种时间点的固定电平 下降沿捕获的 -
定时器捕获外部上升沿信号,DMA读取GPIO口数据的问题
2021-01-17 16:33:29小弟新手,最近在做STM32采集片外AD信号的程序现在用了Tim2的ch3捕获功能监控外部触发采样的信号,片外AD输出8位并行数据接GPIO口,当外部采样信号到来时,DMA读取GPIO口数据并保存到内存中我模仿网上例程an2548,在... -
【STM32】HAL库-定时器-外部时钟模式1-上升沿计数demo
2022-05-26 16:14:43采用STM32F103C8T6单片机,KeilMDK5.32版本 定时器时钟源为外部时钟1,由TI2FP2(PA1)提供,在TI2FP2的上升沿计数 当发生更新事件触发中断后,串口发送数据updata到上位机 -
利用STM32的外部中断和定时器测量频率
2020-12-25 10:12:32测量方案:在第一次外部中断(上升沿触发)到之时,开启定时器,同时计数器清零。然后等待第二次中断到来,在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,同时关闭计数器。因为知道了计数器计数一个数的... -
【STM32】HAL库-定时器-外部时钟模式2-上升沿计数demo
2022-05-26 16:53:15采用STM32F103C8T6单片机,KeilMDK5.32版本 定时器时钟源为外部时钟2,由ETP(PA0)提供,在ETP的上升沿计数 当发生更新事件触发中断后,串口发送数据(Updata)到上位机 -
【STM32】HAL库-使用一个定时器使能另一个定时器-主定时器触发模式demo
2022-05-28 22:01:14定时器2的使能信号被用于作为触发输出(TRGO),定时器2工作在触发模式下,TRGI来源输入捕获的上升沿信号。 定时器3工作在触发模式下,TRGI来源定时器的TRGO。 定时器2 计数周期1000ms 定时器3 计数周期500ms 开启...