/********************************************************* *Copyright (C), 2015, Shanghai Eastsoft Microelectronics Co., Ltd. *文件名: lib_timer.c *作 者: AE Team *版 本: V1.01 *日 期: 2021/06/09 *描 述: Timer模块库函数 *备 注: 本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。 **********************************************************/ #include "lib_timer.h" /*************************************************************** 函数名:T16Nx_BaseInit 描 述:T16Nx基本初始化,初始化时钟选择,外部时钟同步,外部时钟计数边缘选择,工作模式。 输入值:T16Nx:可以是T16N0/1/2/3 、T16Nx_BaseInitStruct:初始化配置结构体地址 输出值:无 返回值:无 ***************************************************************/ void T16Nx_BaseInit(T16N_TypeDef *T16Nx, T16Nx_BaseInitStruType *T16Nx_BaseInitStruct) { T16Nx->CON0.CS = T16Nx_BaseInitStruct->T16Nx_ClkS; /* 计数时钟源选择 */ T16Nx->CON0.SYNC = T16Nx_BaseInitStruct->T16Nx_SYNC; /* 外部时钟同步使能 Disable:不同步外部时钟,为异步计数模式。Enable:通过PCLK对外部时钟同步,为同步计数模式,外部时钟的高低电平平均至少保持2个时钟周期 */ T16Nx->CON0.EDGE = T16Nx_BaseInitStruct->T16Nx_EDGE; /* 外部时钟计数边沿选择 */ T16Nx->CON0.MOD = T16Nx_BaseInitStruct->T16Nx_Mode; /* 工作模式选择 */ T16Nx->PREMAT.PREMAT = T16Nx_BaseInitStruct->T16Nx_PREMAT - 1; /* 预分频比设置,范围:1-256 */ T16Nx->CON2.REGBUF_EN = Disable; /* 配置缓冲寄存器禁止 */ } /*************************************************************** 函数名:T16Nx_CapInit 描 述:T16Nx捕捉初始化 输入值::T16Nx:可以是T16N0/1/2/3、 T16Nx_CapInitStruct:初始化配置结构体地址 输出值:无 返回值:无 ***************************************************************/ void T16Nx_CapInit(T16N_TypeDef *T16Nx, T16Nx_CapInitStruType *T16Nx_CapInitStruct) { T16Nx->CON1.CAPL0 = T16Nx_CapInitStruct->T16Nx_CAPCAPL0; /* 配置捕捉0重载计数器是否使能 */ T16Nx->CON1.CAPL1 = T16Nx_CapInitStruct->T16Nx_CAPCAPL1; /* 配置捕捉1重载计数器是否使能 */ T16Nx->CON1.CAPPE = T16Nx_CapInitStruct->T16Nx_CapRise; /* 配置上升沿输入捕捉是否使能 */ T16Nx->CON1.CAPNE = T16Nx_CapInitStruct->T16Nx_CapFall; /* 配置下降沿输入捕捉是否使能 */ T16Nx->CON1.CAPIS0 = T16Nx_CapInitStruct->T16Nx_CapIS0; /* 配置捕捉输入端口T16NxIN0是否使能 */ T16Nx->CON1.CAPIS1 = T16Nx_CapInitStruct->T16Nx_CapIS1; /* 配置捕捉输入端口T16NxIN1是否使能 */ T16Nx->CON1.CAPT = T16Nx_CapInitStruct->T16Nx_CapTime; /* 配置捕捉次数 */ } /*************************************************************** 函数名:T16Nx_PMWOutInit 描 述:T16NxPWM输出初始化 输入值::T16Nx:可以是T16N0/1/2/3、 T16Nx_PWMInitStruct:初始化配置结构体地址 输出值:无 返回值:无 ***************************************************************/ void T16Nx_PMWOutInit(T16N_TypeDef *T16Nx, T16Nx_PWMInitStruType *T16Nx_PWMInitStruct) { T16Nx->CON2.MOE0 = T16Nx_PWMInitStruct->T16Nx_MOE0; /* 配置输出端口0是否使能 */ T16Nx->CON2.MOE1 = T16Nx_PWMInitStruct->T16Nx_MOE1; /* 配置输出端口1是否使能 */ T16Nx->CON2.POL0 = T16Nx_PWMInitStruct->T16Nx_POL0; /* 配置T16NxOut0输出极性 */ T16Nx->CON2.POL1 = T16Nx_PWMInitStruct->T16Nx_POL1; /* 配置T16NxOut1输出极性 */ T16Nx->CON2.PWMMOD = T16Nx_PWMInitStruct->T16Nx_PWMMODE; /* 配置PWM模式选择 */ T16Nx->CON2.PWMDZE = T16Nx_PWMInitStruct->PWMDZE; /* 配置PWM互补模式死区是否使能 */ T16Nx->CON2.REGBUF_EN = T16Nx_PWMInitStruct->REGBUFEN; /* 配置PWM缓冲寄存器是否使能 */ } /*************************************************************** 函数名:T16Nx_PMWPDZ_Config 描 述:T16NxPWM互补模式死区宽度配置 输入值::T16Nx:可以是T16N0/1/2/3、 PWM_PDZ_data:死区周期配置1-256 输出值:无 返回值:无 ***************************************************************/ void T16Nx_PWMPDZ_Config(T16N_TypeDef *T16Nx, unsigned int PWM_PDZ_data) { T16Nx->PDZ.PDZ = PWM_PDZ_data - 1; } /*************************************************************** 函数名:T16Nx_MATxITConfig 描 述:T16Nx匹配后的工作模式配置 输入值:T16Nx:可以是T16N0/1/2/3、 Type:匹配后的工作模式 输出值:无 返回值:无 ***************************************************************/ void T16Nx_MAT0ITConfig(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATCON Type) { T16Nx->CON0.MAT0S = Type; } void T16Nx_MAT1ITConfig(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATCON Type) { T16Nx->CON0.MAT1S = Type; } void T16Nx_MAT2ITConfig(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATCON Type) { T16Nx->CON0.MAT2S = Type; } void T16Nx_MAT3ITConfig(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATCON Type) { T16Nx->CON0.MAT3S = Type; } /*************************************************************** 函数名:T16Nx_MATxOutxConfig 描 述:T16Nx匹配后的输出端口的模式配置 输入值:T16Nx:可以是T16N0/1/2/3 、 Type:匹配后端口的工作模式 输出值:无 返回值:无 ***************************************************************/ void T16Nx_MAT0Out0Config(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATOUT Type) { T16Nx->CON2.MOM0 = Type; } void T16Nx_MAT1Out0Config(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATOUT Type) { T16Nx->CON2.MOM1 = Type; } void T16Nx_MAT2Out1Config(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATOUT Type) { T16Nx->CON2.MOM2 = Type; } void T16Nx_MAT3Out1Config(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATOUT Type) { T16Nx->CON2.MOM3 = Type; } /*************************************************************** 函数名:T16Nx_ITConfig 描 述:T16N中断配置 输入值:T16Nx:可以是T16N0/1/2/3、 Type:中断类型 、 NewState:使能/失能 输出值:无 返回值:无 ***************************************************************/ void T16Nx_ITConfig(T16N_TypeDef *T16Nx, T16Nx_TYPE_IT Type, TYPE_FUNCEN NewState) { if (NewState != Disable) { T16Nx->IE.Word |= (uint32_t)Type; } else { T16Nx->IE.Word &= (~(uint32_t)Type); } } /*************************************************************** 函数名:FlagStatus T16Nx_GetITStatus(T16N_TypeDef *T16Nx, T16Nx_TYPE_IT T16Nx_Flag) 描 述:T16N用于判断T16N中断使能状态 输入值:T16Nx:可以是T16N0/1/2/3,T16Nx_Flag:中断类型 输出值:中断使能返回SET,否则返回RESET 返回值:无 ***************************************************************/ FlagStatus T16Nx_GetITStatus(T16N_TypeDef *T16Nx, T16Nx_TYPE_IT T16Nx_Flag) { FlagStatus bitstatus = RESET; if (T16Nx->IE.Word & T16Nx_Flag) bitstatus = SET; return bitstatus; } /*************************************************************** 函数名:T16Nx_SetCNT0 描 述:设置CNT0计数值 输入值:T16Nx:可以是T16N0/1/2/3、 Value:16位数值 输出值:无 返回值:无 ***************************************************************/ void T16Nx_SetCNT0(T16N_TypeDef *T16Nx, uint16_t Value) { T16Nx->CON0.ASYWEN = Disable; T16Nx->CNT0.CNT0 = Value; T16Nx->CON0.ASYWEN = Enable; } /*************************************************************** 函数名:T16Nx_SetCNT1 描 述:设置CNT1计数值 输入值:T16Nx:可以是T16N0/1/2/3、 Value:16位数值 输出值:无 返回值:无 ***************************************************************/ void T16Nx_SetCNT1(T16N_TypeDef *T16Nx, uint16_t Value) { T16Nx->CON0.ASYWEN = Disable; T16Nx->CNT1.CNT1 = Value; T16Nx->CON0.ASYWEN = Enable; } /*************************************************************** 函数名:T16Nx_SetPREMAT 描 述:设置预分频比 输入值:T16Nx:可以是T16N0/1/2/3、 Value:1-256 输出值:无 返回值:无 ***************************************************************/ void T16Nx_SetPREMAT(T16N_TypeDef *T16Nx, uint8_t Value) { T16Nx->PREMAT.PREMAT = Value - 1; } /*************************************************************** 函数名:T16Nx_SetPRECNT 描 述:设置预分频计数器 输入值:T16Nx:可以是T16N0/1/2/3、 Value:1-256 输出值:无 返回值:无 ***************************************************************/ void T16Nx_SetPRECNT(T16N_TypeDef *T16Nx, uint8_t Value) { T16Nx->CON0.ASYWEN = Disable; T16Nx->PRECNT.PRECNT = Value; T16Nx->CON0.ASYWEN = Enable; } /*************************************************************** 函数名:T16Nx_SetMATx 描 述:设置匹配寄存器 输入值:T16Nx:可以是T16N0/1/2/3、 MATx:可以是TIM_MAT0/1/2/3 、 Value:16位数值 输出值:无 返回值:无 ***************************************************************/ void T16Nx_SetMAT0(T16N_TypeDef *T16Nx, uint16_t Value) { T16Nx->MAT0.MAT0 = Value; } void T16Nx_SetMAT1(T16N_TypeDef *T16Nx, uint16_t Value) { T16Nx->MAT1.MAT1 = Value; } void T16Nx_SetMAT2(T16N_TypeDef *T16Nx, uint16_t Value) { T16Nx->MAT2.MAT2 = Value; } void T16Nx_SetMAT3(T16N_TypeDef *T16Nx, uint16_t Value) { T16Nx->MAT3.MAT3 = Value; } /*************************************************************** 函数名:T16Nx_SetMATx 描 述:设置匹配寄存器 输入值:T16Nx:可以是T16N0/1/2/3、 MATx:可以是TOP0/1 、 Value:16位数值 输出值:无 返回值:无 ***************************************************************/ void T16Nx_SetTOP0(T16N_TypeDef *T16Nx, uint16_t Value) { T16Nx->TOP0.TOP0 = Value; } void T16Nx_SetTOP1(T16N_TypeDef *T16Nx, uint16_t Value) { T16Nx->TOP1.TOP1 = Value; } /*************************************************************** 函数名:T16Nx_GetMATx 描 述:读取匹配寄存器值 输入值:T16Nx:可以是T16N0/1/2/3 MATx:可以是TIM_MAT0/1/2/3 输出值:无 返回值:16位数值 ***************************************************************/ uint16_t T16Nx_GetMAT0(T16N_TypeDef *T16Nx) { return (T16Nx->MAT0.MAT0) ; } uint16_t T16Nx_GetMAT1(T16N_TypeDef *T16Nx) { return (T16Nx->MAT1.MAT1) ; } uint16_t T16Nx_GetMAT2(T16N_TypeDef *T16Nx) { return (T16Nx->MAT2.MAT2) ; } uint16_t T16Nx_GetMAT3(T16N_TypeDef *T16Nx) { return (T16Nx->MAT3.MAT3) ; } /*************************************************************** 函数名:T16Nx_GetTOPx 描 述:读取匹配寄存器值 输入值:T16Nx:可以是T16N0/1/2/3 MATx:可以是TIM_TOP0/1 输出值:无 返回值:16位数值 ***************************************************************/ uint16_t T16Nx_GetTOP0(T16N_TypeDef *T16Nx) { return (T16Nx->TOP0.TOP0) ; } uint16_t T16Nx_GetTOP1(T16N_TypeDef *T16Nx) { return (T16Nx->TOP1.TOP1) ; } /*************************************************************** 函数名:T16Nx_GetCNTx 描 述:读取计数寄存器值 输入值:T16Nx:可以是T16N0/1/2/3、 返回值:16位数值 ***************************************************************/ uint16_t T16Nx_GetCNT0(T16N_TypeDef *T16Nx) { return (T16Nx->CNT0.CNT0) ; } uint16_t T16Nx_GetCNT1(T16N_TypeDef *T16Nx) { return (T16Nx->CNT1.CNT1) ; } /*************************************************************** 函数名:T16Nx_GetFlagStatus 描 述:读取指定标志位 输入值:T16Nx:可以是T16N0/1/2/3、 T16Nx_Flag:中断标志位 输出值:无 返回值:RESET/SET ***************************************************************/ FlagStatus T16Nx_GetFlagStatus(T16N_TypeDef *T16Nx, T16Nx_TYPE_IT T16Nx_Flag) { FlagStatus bitstatus = RESET; if ((T16Nx->IF.Word & (uint32_t)T16Nx_Flag) != (uint32_t)RESET) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } /*************************************************************** 函数名:T16Nx_ClearITPendingBit 描 述:清除指定的中断标志位 输入值:T16Nx:可以是T16N0/1/2/3、 T16Nx_Flag:中断标志位 输出值:无 返回值:无 ***************************************************************/ void T16Nx_ClearITPendingBit(T16N_TypeDef *T16Nx, T16Nx_TYPE_IT T16Nx_Flag) { T16Nx->IF.Word = (uint32_t)T16Nx_Flag; } /*************************************************************** 函数名:T16Nx_Enable 描 述:使能T16Nx 输入值:T16Nx:可以是T16N0/1/2/3 输出值:无 返回值:无 ***************************************************************/ void T16Nx_Enable(T16N_TypeDef *T16Nx) { T16Nx->CON0.EN = 1; } /*************************************************************** 函数名:T16Nx_Enable 描 述:禁止T16Nx 输入值:T16Nx:可以是T16N0/1/2/3 输出值:无 返回值:无 ***************************************************************/ void T16Nx_Disable(T16N_TypeDef *T16Nx) { T16Nx->CON0.EN = 0; } /*************************************************************** 函数名:T16Nx_PWMBK_Config 描 述:配置PWM刹车功能 输入值:T16Nx:可以是T16N0/1/2/3 ,Type 配置PWM刹车结构体 输出值:无 返回值:无 ***************************************************************/ void T16Nx_PWMBK_Config(T16N_TypeDef *T16Nx, T16Nx_PWMBK_Type *type) { T16Nx->CON2.PWMBKL0 = type->T16Nx_PWMBK_L0; /* PWM通道0刹车输出电平选择 */ T16Nx->CON2.PWMBKL1 = type->T16Nx_PWMBK_L1; /* PWM通道1刹车输出电平选择 */ T16Nx->CON2.PWMBKP0 = type->T16Nx_PWMBK_P0; /* PWM通道0刹车信号极性选择 */ T16Nx->CON2.PWMBKP1 = type->T16Nx_PWMBK_P1; /* PWM通道1刹车信号极性选择 */ T16Nx->CON2.PWMBKE0 = type->T16Nx_PWMBK_EN0; /* PWM通道0刹车使能 */ T16Nx->CON2.PWMBKE1 = type->T16Nx_PWMBK_EN1; /* PWM通道1刹车使能 */ } /*************************************************************** 函数名:T16Nx_GetPWMBKF 描 述:获取PWMBKF刹车标志位 输入值:T16Nx:可以是T16N0/1/2/3 输出值:PWMBKF标志位的值。SET:发生刹车事件,RESET:未发生刹车事件 返回值:无 ***************************************************************/ FlagStatus T16Nx_GetPWMBKF(T16N_TypeDef *T16Nx) { if (T16Nx->CON2.PWMBKF == 1) return SET; else return RESET; } /*************************************************************** 函数名:T16Nx_ResetPWMBKF 描 述: 清除PWMBKF标志,标志清除后PWM端口恢复正常shuc 输入值:T16Nx:可以是T16N0/1/2/3 输出值:无 返回值:无 ***************************************************************/ void T16Nx_ResetPWMBKF(T16N_TypeDef *T16Nx) { T16Nx->CON2.PWMBKF = 1; } /*************************************************************** 函数名:T16Nx_PTR_Config 描 述: 配置PWM调试模式ADC触发使能 输入值:T16Nx:可以是T16N0/1/2/3 输出值:无 返回值:无 ***************************************************************/ void T16Nx_PTR_Config(T16N_TypeDef *T16Nx, T16Nx_PWMTRE_type Type, TYPE_FUNCEN NewState) { if (NewState != Disable) { T16Nx->PTR.Word |= (uint32_t)Type; } else { T16Nx->PTR.Word &= (~(uint32_t)Type); } } /*************************************************************** 函数名:T32Nx_BaseInit 描 述:T32Nx基本初始化,初始化时钟选择,外部时钟同步,外部时钟计数边缘选择,工作模式。 输入值:T32Nx:可以是T32N0 、T32Nx_BaseInitStruct:初始化配置结构体地址 输出值:无 返回值:无 ***************************************************************/ void T32Nx_BaseInit(T32N_TypeDef *T32Nx, T32Nx_BaseInitStruType *T32Nx_BaseInitStruct) { T32Nx->CON0.CS = T32Nx_BaseInitStruct->T32Nx_ClkS; /* 计数时钟源选择 */ T32Nx->CON0.SYNC = T32Nx_BaseInitStruct->T32Nx_SYNC; /* 外部时钟同步使能 Disable:不同步外部时钟,为异步计数模式。Enable:通过PCLK对外部时钟同步,为同步计数模式,外部时钟的高低电平平均至少保持2个时钟周期 */ T32Nx->CON0.EDGE = T32Nx_BaseInitStruct->T32Nx_EDGE; /* 外部时钟计数边沿选择 */ T32Nx->CON0.MOD = T32Nx_BaseInitStruct->T32Nx_Mode; /* 工作模式选择 */ T32Nx->PREMAT.PREMAT = T32Nx_BaseInitStruct->T32Nx_PREMAT - 1; /* 预分频比设置,范围:1-256 */ } /*************************************************************** 函数名:T32Nx_CapInit 描 述:T32Nx捕捉初始化 输入值:T32Nx:可以是T32N0、 T32Nx_CapInitStruct:初始化配置结构体地址 输出值:无 返回值:无 ***************************************************************/ void T32Nx_CapInit(T32N_TypeDef *T32Nx, T32Nx_CapInitStruType *T32Nx_CapInitStruct) { T32Nx->CON1.CAPPE = T32Nx_CapInitStruct->T32Nx_CapRise; /* 配置上升沿输入捕捉是否使能 */ T32Nx->CON1.CAPNE = T32Nx_CapInitStruct->T32Nx_CapFall; /* 配置下降沿输入捕捉是否使能 */ T32Nx->CON1.CAPIS0 = T32Nx_CapInitStruct->T32Nx_CapIS0; /* 配置捕捉输入端口T32NxIN0是否使能 */ T32Nx->CON1.CAPIS1 = T32Nx_CapInitStruct->T32Nx_CapIS1; /* 配置捕捉输入端口T32NxIN1是否使能 */ T32Nx->CON1.CAPT = T32Nx_CapInitStruct->T32Nx_CapTime; /* 配置捕捉次数 */ T32Nx->CON1.CAPL0 = T32Nx_CapInitStruct->T32Nx_CAPCAPL0; /* 配置捕捉0重载计数器是否使能 */ T32Nx->CON1.CAPL1 = T32Nx_CapInitStruct->T32Nx_CAPCAPL1; /* 配置捕捉1重载计数器是否使能 */ } /*************************************************************** 函数名:T32Nx_PMWOutInit 描 述:T32NxPWM输出初始化 输入值::T32Nx:可以是T32N0、 T32Nx_PWMInitStruct:初始化配置结构体地址 输出值:无 返回值:无 ***************************************************************/ void T32Nx_PMWOutInit(T32N_TypeDef *T32Nx, T32Nx_PWMInitStruType *T32Nx_PWMInitStruct) { T32Nx->CON1.MOE0 = T32Nx_PWMInitStruct->T32Nx_MOE0; /* 配置输出端口0是否使能 */ T32Nx->CON1.MOE1 = T32Nx_PWMInitStruct->T32Nx_MOE1; /* 配置输出端口1是否使能 */ } /*************************************************************** 函数名:T32Nx_MATxITConfig 描 述:T32Nx匹配后的工作模式配置 输入值:T32Nx:可以是T32N0、 Type:匹配后的工作模式 输出值:无 返回值:无 ***************************************************************/ void T32Nx_MAT0ITConfig(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATCON Type) { T32Nx->CON0.MAT0S = Type; } void T32Nx_MAT1ITConfig(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATCON Type) { T32Nx->CON0.MAT1S = Type; } void T32Nx_MAT2ITConfig(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATCON Type) { T32Nx->CON0.MAT2S = Type; } void T32Nx_MAT3ITConfig(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATCON Type) { T32Nx->CON0.MAT3S = Type; } /*************************************************************** 函数名:T32Nx_MATxOutxConfig 描 述:T32Nx匹配后的输出端口的模式配置 输入值:T32Nx:可以是T32N0/1/2/3 、 Type:匹配后端口的工作模式 输出值:无 返回值:无 ***************************************************************/ void T32Nx_MAT0Out0Config(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATOUT Type) { T32Nx->CON1.MOM0 = Type; } void T32Nx_MAT1Out0Config(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATOUT Type) { T32Nx->CON1.MOM1 = Type; } void T32Nx_MAT2Out1Config(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATOUT Type) { T32Nx->CON1.MOM2 = Type; } void T32Nx_MAT3Out1Config(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATOUT Type) { T32Nx->CON1.MOM3 = Type; } /*************************************************************** 函数名:T32Nx_ITConfig 描 述:T32N中断配置 输入值:T32Nx:可以是T32N0、 Type:中断类型 、 NewState:使能/失能 输出值:无 返回值:无 ***************************************************************/ void T32Nx_ITConfig(T32N_TypeDef *T32Nx, T32Nx_TYPE_IT Type, TYPE_FUNCEN NewState) { if (NewState != Disable) { T32Nx->IE.Word |= (uint32_t)Type; } else { T32Nx->IE.Word &= (~(uint32_t)Type); } } /*************************************************************** 函数名:FlagStatus T32Nx_GetITStatus(T32N_TypeDef *T32Nx, T32Nx_TYPE_IT T32Nx_Flag) 描 述:T32N用于判断T32N中断使能状态 输入值:T32Nx:可以是T32N0,T32Nx_Flag:中断类型 输出值:中断使能返回SET,否则返回RESET 返回值:无 ***************************************************************/ FlagStatus T32Nx_GetITStatus(T32N_TypeDef *T32Nx, T32Nx_TYPE_IT T32Nx_Flag) { FlagStatus bitstatus = RESET; if (T32Nx->IE.Word & T32Nx_Flag) bitstatus = SET; return bitstatus; } /*************************************************************** 函数名:T32Nx_SetCNT0 描 述:设置CNT0计数值 输入值:T16Nx:可以是T32N0/1/2/3、 Value:32位数值 输出值:无 返回值:无 ***************************************************************/ void T32Nx_SetCNT(T32N_TypeDef *T32Nx, uint32_t Value) { T32Nx->CON0.ASYNC_WREN = Enable; T32Nx->CNT.CNT = Value; T32Nx->CON0.ASYNC_WREN = Disable; } /*************************************************************** 函数名:T32Nx_SetPREMAT 描 述:设置预分频比 输入值:T32Nx:可以是T32N0、 Value:1-256 输出值:无 返回值:无 ***************************************************************/ void T32Nx_SetPREMAT(T32N_TypeDef *T32Nx, uint8_t Value) { T32Nx->PREMAT.PREMAT = Value - 1; } /*************************************************************** 函数名:T32Nx_SetPRECNT 描 述:设置预分频计数器 输入值:T32Nx:可以是T32N0、 Value:1-256 输出值:无 返回值:无 ***************************************************************/ void T32Nx_SetPRECNT(T32N_TypeDef *T32Nx, uint8_t Value) { T32Nx->CON0.ASYNC_WREN = Enable; T32Nx->PRECNT.PRECNT = Value; T32Nx->CON0.ASYNC_WREN = Disable; } /*************************************************************** 函数名:T32Nx_SetMATx 描 述:设置匹配寄存器 输入值:T16Nx:可以是T32N0、 MATx:可以是TIM_MAT0/1/2/3 、 Value:32位数值 输出值:无 返回值:无 ***************************************************************/ void T32Nx_SetMAT0(T32N_TypeDef *T32Nx, uint32_t Value) { T32Nx->MAT0.MAT0 = Value; } void T32Nx_SetMAT1(T32N_TypeDef *T32Nx, uint32_t Value) { T32Nx->MAT1.MAT1 = Value; } void T32Nx_SetMAT2(T32N_TypeDef *T32Nx, uint32_t Value) { T32Nx->MAT2.MAT2 = Value; } void T32Nx_SetMAT3(T32N_TypeDef *T32Nx, uint32_t Value) { T32Nx->MAT3.MAT3 = Value; } /*************************************************************** 函数名:T32Nx_GetMATx 描 述:读取匹配寄存器值 输入值:T32Nx:可以是T32N0 MATx:可以是T32Nx_MAT0/1/2/3 输出值:无 返回值:32位数值 ***************************************************************/ uint32_t T32Nx_GetMAT0(T32N_TypeDef *T32Nx) { return (T32Nx->MAT0.MAT0) ; } uint32_t T32Nx_GetMAT1(T32N_TypeDef *T32Nx) { return (T32Nx->MAT1.MAT1) ; } uint32_t T32Nx_GetMAT2(T32N_TypeDef *T32Nx) { return (T32Nx->MAT2.MAT2) ; } uint32_t T32Nx_GetMAT3(T32N_TypeDef *T32Nx) { return (T32Nx->MAT3.MAT3) ; } /*************************************************************** 函数名:T32Nx_GetCNT 描 述:读取计数寄存器值 输入值:T32Nx:可以是T32N0/1/2/3、 返回值:32位数值 ***************************************************************/ uint32_t T32Nx_GetCNT(T32N_TypeDef *T32Nx) { return (T32Nx->CNT.CNT) ; } /*************************************************************** 函数名:T32Nx_GetFlagStatus 描 述:读取指定标志位 输入值:T32Nx:可以是T32N0、 T32Nx_Flag:中断标志位 输出值:无 返回值:RESET/SET ***************************************************************/ FlagStatus T32Nx_GetFlagStatus(T32N_TypeDef *T32Nx, T32Nx_TYPE_IT T32Nx_Flag) { FlagStatus bitstatus = RESET; if ((T32Nx->IF.Word & (uint32_t)T32Nx_Flag) != (uint32_t)RESET) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } /*************************************************************** 函数名:T32Nx_ClearITPendingBit 描 述:清除指定的中断标志位 输入值:T32Nx:可以是T16N0、 TIM_Flag:中断标志位 输出值:无 返回值:无 ***************************************************************/ void T32Nx_ClearITPendingBit(T32N_TypeDef *T32Nx, T32Nx_TYPE_IT TIM_Flag) { T32Nx->IF.Word = (uint32_t)TIM_Flag; } /*************************************************************** 函数名:T32Nx_Enable 描 述:使能T32Nx 输入值:T32Nx:可以是T32N0 输出值:无 返回值:无 ***************************************************************/ void T32Nx_Enable(T32N_TypeDef *T32Nx) { T32Nx->CON0.EN = 1; } /*************************************************************** 函数名:T32Nx_Enable 描 述:禁止T32Nx 输入值:T32Nx:可以是T32N0 输出值:无 返回值:无 ***************************************************************/ void T32Nx_Disable(T32N_TypeDef *T32Nx) { T32Nx->CON0.EN = 0; } /*************************************************************** 函数名:BUZC_Frequence 描 述:BUZ使能后,配置BUZ信号频率 输入值:Frequence : BUZ信号频率,sys_buz :是否使能 输出值:无 返回值:无 ***************************************************************/ void BUZC_Frequence(uint32_t Frequence, TYPE_FUNCEN sys_buz) { float tmp; if (sys_buz == Disable) /* 如果BUZC配置为禁止,则直接禁止BUZC,并返回 */ { GPIO->BUZC.BUZEN = 0; return; } tmp = SystemCoreClock / (Frequence * 2) - 1; GPIO->BUZC.BUZ_LOAD = (uint32_t)tmp; GPIO->BUZC.BUZEN = 1; }