真的
每天都要写博客我已经要吐了
我快坚持不下去了
啊啊啊啊
难受
今日知识点
- 区别
&按位与
&&逻辑与 - 优先级关系
!>&&>|| - cl:互联型产品,stm32f105/107系列
vl:超值型产品,stm32f100系列
xl:超高密度产品,stm32f101/103系列
ld:低密度产品,FLASH小于64K
md:中等密度产品,FLASH=64 or 128
hd:高密度产品,FLASH大于128
工作流程
TI1接收到输入信号(此处可以考虑是否要滤除一些短暂的脉冲,毛刺),然后交给边沿监测(你可以设置检验上边沿还是下边沿),然后选择是否要映射(你可以将数据传到IC1,也可以映射到IC2;同理IC1通道里也有可能是来自TI2的边沿检测),最后那个分频器是指监测一次边沿信号触发一次中断还是检测两次触发一次中断。
好像蛮简单的。
细节部分
第一部分:
TIMx_CCMR1
这个寄存器控制MODE,也就是模式。1低八位控制通道1,高八位控制2;CCMR2控制通道三、四。
下面以通道一为例:
重点说下位7:4
fCK_INT根据前面的博客知道是72MHz
fDTS由72分频而来,这个设置在CR1寄存器设置。
以N=8为例讲解一下滤波:
监测到电平变化以后连续采样8次,如果每次都是高电平说明信号有效,传递给下面确定是上升沿。这样可以滤除那些高电平脉宽低于8 个采样周期的脉冲信号,从而达到滤波的效果。
第二部分:
TIMx_CCER
这里位0应该写错了,没想到官方中文还有错误
CC1P自己选择是检测上升沿还是下降沿。
第三部分:
通过CCMR
选择是否映射
第四部分:
通过CCMR寄存器
选择分频系数
通过CCER寄存器
选择是否使能
涉及到的寄存器
TIMx_ARR(自动重装载)
TIMx_PSC(预分频)
TIMx_CCMR1(见上第一部分)
TIMx_CCER(见上第二部分)
TIMx_DIER(使能中断)
TIMx_CR1(使能TIM)
TIMx_CCR1(储存)
涉及到的库函数
输入捕获通道初始化函数:
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);
typedef struct
{
uint16_t TIM_Channel; //捕获通道1-4
uint16_t TIM_ICPolarity; //捕获极性
uint16_t TIM_ICSelection; //映射关系
uint16_t TIM_ICPrescaler; //分频系数
uint16_t TIM_ICFilter; //滤波器
} TIM_ICInitTypeDef;
通道极性设置独立函数:
void TIM_OCxPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)