1、在昨晚尝试自己编写外部中断实验,按照外部中断步骤写时,在配置NVIC(中断分组时),不知道通道怎么找,于是再次看了一遍视频,视频上说是从usart.c的stm32f4xx.h中找,我打开文件的时候,看到了typedef enum IRQn,不懂什么是enum,于是百度一波~
eunm:枚举类型。IRQn:枚举类型名。枚举元素不是变量,而是常数,因此枚举元素又称为枚举常量。
2、定时器
计数器模式:向上计数模式、向下计数模式。中央对齐模式。
除非APB1的分频系数是1,否则通用定时器的时钟等于APB1时钟的2倍。
计数器的时钟频率CK_CNT=fCK_PSC/(psc+1);
fCK_PSC:预分频器时钟的频率;psc:预分频器的值
常用库函数:stm32f4xx_time.c/.h
定时器中断实现步骤:
1)TIM3 时钟使能:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
2)初始化定时器参数,设置自动重装值,分频系数,计数方式等:
voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
3)设置 TIM3_DIER 允许更新中断
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
4)TIM3 中断优先级设置:
NVIC_Init();
5)允许 TIM3 工作,也就是使能 TIM3
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
即TIM_Cmd(TIM3, ENABLE);
6)编写中断服务函数
TIMx_IRQ Handler();
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t)
:读取中断状态寄存器的值判断中断类型
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT):
清除中断标志位.
Tout(溢出时间)=(arr+1)(psc+1)/Tclk