2024.1.30随堂笔记 方波输出和捕获,IO口中断和串口
Copyright (c) 2024 by Jsir2022, All Rights Reserved.
捕获的通路和原理
波形经过滤波和上升下降沿捕获,经过设置CNT捕获对波形中的上升沿
如果不对CNT清零,计数波形如下
若对CNT清零,并分频得到ts=1us,CCR1中保存的计数值就是delta t
单通道捕获
因为APB1和APB2总线都是150Mhz,就不用理会定时器究竟挂载在哪个总线上。
一般要改的是分配器PSC,设置为(150-1)就得到ts的一微秒,引脚PA15
而它的极性选择可以默认上升沿
记得打开中断,服务函数在hal_time.h找
找Input Capture的,带IT的start函数开启捕获
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
然后找它的回调函数,要懂英文。
想要读取值还需要这个函数
捕获频率的代码实现
双通道捕获
CH1直接捕获,CH2间接捕获。
注意通道一是上升沿,另一个是下降沿
CCR1测出周期,CCR2测出脉冲宽度,也就是占空比。单通道也可以做,先上升沿然后触发中断赶紧调成下降沿。
代码
哎呀上一张图的代码出错了,因为在一个周期内进入了两次中断(CH1和CH2的),导致得出的频率是两倍。于是做出修正,仅当是TIM3的CH1(完整周期)进来的才取数。
然后占空比计算不对,是因为两整数相除得整数,需要强制转换。
s_fDuty = ((float)_CCR2_Value / _CCR1_Value) * 100;
定时器既要输入又要输出
如图情况不推荐,就算CCR是独立的,但一个定时器共用CNT,你的捕获就得记录备份值而不是CNT清零(否则PWM输出会受影响)。
因此比赛过程中尽量分开定时器做功能,节约时间。
PWM输出的原理和应用
ARR(计数寄存器)控制周期,CRR(比较寄存器)控制脉宽。PSC控制计数频率,TIM2先前已设置为1us加一
启用PWM输出的函数
初始化ARR和CCR寄存器,ARR=250-1次相当于周期250us,CCR=25-1us相当于占空比10%。
第十四届省赛
要求频率均匀变化且占空比不变,需要计算变化率,然后改变ARR,为了占空比不变CCR要重新计算。
占空比变化只需更改CCR。
而前面的双通道测量可能要更改。
IO口EXIT中断(可能不常考)
原理是单片机IO口对波形上升沿或下降沿触发中断,相当于不用定时器计数。但如果想测出频率需要定时器定时一秒然后提取你定义的计数值。原理如图
设置好引脚为EXIT功能后,使能中断。
回调函数在hal_gpio.h
计数的变量自己定义然后++,注意是位与上GPIO_PIN
串口不定长接收字符串(先前没考,24年很可能考)
配置异步串口USART,网上有,去看板子原理图确认是与电脑通信的引脚就好。
找到使能串口接收中断函数,相当于上面模块的START
找接收数据回调函数
接收数据到Buffer,还实现了不定长功能。每进一次中断增加一个字节,然后重置RX_Time(超时时间)。不定长原理是超时后确认为发送完毕。(怎么感觉和按键有点像,都是等待波形结束)
然后用strcmp比较