时钟24MHz,实现10us倍数延时
void Test_Etimx(ETIMx_Type* ETIMx, uint32_t xus)
{
ETIM_InitTypeDef init_para;
volatile uint8_t EtimNum;
EtimNum = (uint8_t)(((uint32_t)ETIMx - ETIMER1_BASE)>>5);
//信号源参数
init_para.sig_src_para.SIG1SEL = ETIMx_ETxINSEL_SIG1SEL_GROUP1; /* 内部信号1源选择GROUP1 */
switch(EtimNum)
{
case 0:
//信号源参数
init_para.sig_src_para.GRP1SEL = ETIMx_ETxINSEL_GRP1SEL_ET1_APBCLK; /* GROUP1 信号选择APBCLK */
//ET1时钟使能
RCC_PERCLK_SetableEx( ET1CLK, ENABLE );
//NVIC中断配置
NVIC_DisableIRQ(ETIM1_IRQn);
NVIC_SetPriority(ETIM1_IRQn,2);//中断优先级配置
NVIC_EnableIRQ(ETIM1_IRQn);
break;
case 1:
//信号源参数
init_para.sig_src_para.GRP1SEL = ETIMx_ETxINSEL_GRP1SEL_ET2_APBCLK; /* GROUP1 信号选择APBCLK */
//ET2时钟使能
RCC_PERCLK_SetableEx( ET2CLK, ENABLE );
//NVIC中断配置
NVIC_DisableIRQ(ETIM2_IRQn);
NVIC_SetPriority(ETIM2_IRQn,3);//中断优先级配置
NVIC_EnableIRQ(ETIM2_IRQn);
break;
case 2:
//信号源参数
init_para.sig_src_para.GRP1SEL = ETIMx_ETxINSEL_GRP1SEL_ET3_APBCLK; /* GROUP1 信号选择APBCLK */
//ET3时钟使能
RCC_PERCLK_SetableEx( ET3CLK, ENABLE );
//NVIC中断配置
NVIC_DisableIRQ(ETIM3_IRQn);
NVIC_SetPriority(ETIM3_IRQn,1);//中断优先级配置
NVIC_EnableIRQ(ETIM3_IRQn);
break;
case 3:
//信号源参数
init_para.sig_src_para.GRP1SEL = ETIMx_ETxINSEL_GRP1SEL_ET4_APBCLK; /* GROUP1 信号选择APBCLK */
//ET4时钟使能
RCC_PERCLK_SetableEx( ET4CLK, ENABLE );
//NVIC中断配置
NVIC_DisableIRQ(ETIM4_IRQn);
NVIC_SetPriority(ETIM4_IRQn,2);//中断优先级配置
NVIC_EnableIRQ(ETIM4_IRQn);
break;
default:
break;
}
init_para.sig_src_para.PRESCALE1 = 239; //240分频 /* ETx预分频寄存器1 */ 00表示1分频,FF表示256分频 24M, 100k
init_para.sig_src_para.PRESCALE2 = clkmode - 1; //1分频 /* ETx预分频寄存器2 */ 00表示1分频,FF表示256分频
//控制类参数
init_para.ctrl_para.EXFLT = ENABLE; /* 引脚输入数字滤波使能打开 */
init_para.ctrl_para.MOD = ETIMx_ETxCR_MOD_COUNTER; /* 工作模式选择计数模式 */
init_para.ctrl_para.CASEN = DISABLE; /* 扩展定时器级联关闭 */
init_para.ctrl_para.EDGESEL = ETIMx_ETxCR_EDGESEL_RISING; /* 计数模式采沿方式选择(计数时钟选择mcu_clk时该位无效,总是采用mcu_clk时钟上升沿计数) */
init_para.ctrl_para.CAPCLR = DISABLE; /* 带清零捕捉模式控制 */
init_para.ctrl_para.CMPIE = DISABLE; /* 扩展定时器比较中断使能 */
init_para.ctrl_para.CAPIE = DISABLE; /* 扩展定时器捕捉中断使能 */
init_para.ctrl_para.OVIE = DISABLE; /* 扩展定时器溢出中断使能 */
xus /= 10;
if(xus == 0)
{
xus = 1;
}
init_para.ctrl_para.INITVALUE = 0xffff - xus + 1; //计数初值,24000000/240/10 = 100us ; /* ETx初值寄存器 */
init_para.ctrl_para.CEN = DISABLE; /* 启动控制 */
//初始化ETIM
ETIMx_Init(ETIMx, &init_para);
}
void ETIM3_IRQHandler(void)
{
if(SET == ETIMx_ETxIF_OVIF_Chk(ETIM3))
{
ETIMx_ETxIF_OVIF_Clr(ETIM3);
}
}
Void Timer_Start(void)
{
ETIMx_ETxCR_CEN_Setable(ETIM3, ENABLE); //启动定时3定时功能
ETIMx_ETxIE_OVIE_Setable(ETIM3, ENABLE); //使能定时3溢出中断
}