STMCU小助手
发布时间:2022-1-30 01:00
|
在STM32 的定时器,除了 TIM6 和 TIM7,就是通过检测 TIMx_CHx 上的/ {$ o* k) M! F. S$ K$ U3 M' S 边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候, 将当时定时器& C0 O8 L* ^& e4 Z- d' g/ E 的值(TIMx_CNT) 存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,1 _2 n0 E: Y) H1 T: }/ f9 P 完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等。 " h& w( B9 X' w) q# E 1)开启 TIM5 时钟和 GPIOA 时钟, 配置 PA0 为下拉输入。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //使能 TIM5 时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能 GPIOA 时钟8 l3 ~& I+ _7 B8 r 2) 初始化 TIM5,设置 TIM5 的 ARR 和 PSC。5 e) D5 m5 k7 w) P TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;. n$ E( H2 h6 I, m1 [4 D$ ~ " a. G/ l5 Y3 r7 v" qTIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值* o+ y6 {' [+ F$ P! r5 i! X TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置预分频值% Z, Z$ m4 X& i: g8 P8 I3 \ TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数模式: e: r0 f4 G( X4 \ TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据指定的参数初始化 Tim5 3)设置 TIM5 的输入比较参数,开启输入捕获 void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);8 y8 Q7 i) a# `% H3 n" V TIM_ICInitTypeDef TIM5_ICInitStructure; TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; //选择输入端 IC1 映射到 TI1 上 TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获+ p j$ o0 y7 H0 ?1 j TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到 TI1 上; u/ v! r: k: S. B; i) Q TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频8 J* v. v0 N+ G. ~9 r3 i; z5 S6 b9 F TIM5_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波 TIM_ICInit(TIM5, &TIM5_ICInitStructure); 4)使能捕获和更新中断(设置 TIM5 的 DIER 寄存器) ( I3 t1 t# M3 p2 Q5 z5 zTIM_ITConfig( TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断和捕获中断 if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET){}//判断是否为更新中断 ; m4 a6 J8 J1 o2 z+ }8 bif (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET){}//判断是否发生捕获事件' [& R! o( X, m; O3 H6 q- Y5 f6 |* d TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update);//清除中断和捕获标志位 6)使能定时器(设置 TIM5 的 CR1 寄存器)* s6 f2 i% y, @2 ^- E6 B TIM_Cmd(TIM5,ENABLE ); //使能定时器 5
|
实战经验 | 基于STM32G0B1的全桥移相+同步整流PWM解决方案
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:逢7发帖赢大礼】8、基于STM32G070板子的Ymodem串口协议IAP Bootloader开发
【福利三:逢7发帖赢大礼】7、基于STM32G070板子TF卡的FATFS移植
【福利三:逢7发帖赢大礼】6、基于STM32G070板子spiflash的FATFS移植
【福利三:逢7发帖赢大礼】5、基于STM32G070板子IRDA红外遥控接收解码
【福利三:逢7发帖赢大礼】4、基于STM32G070板子SPI flash 移植SFUD库
【福利三:逢7发帖赢大礼】基于STM32G070板子的uart shell移植设计
【福利三:逢7发帖赢大礼】3、基于STM32G070板子的YModem串口协议通信
【福利三:逢7发帖赢大礼】2、基于STM32G070板子的OLED移植U8G2库
微信公众号
手机版