最近在做一个项目,用到的主控芯片是沁恒微的WCH32v003,其中一个功能是定时器中断,在编写代码的时候想找官方的库函数文件,但是找了很久都没有找到,官网只有一个数据手册和应用手册,而应用手册一般是分为库函数应用手册和寄存器应用手册,但是官网上的应用手册是只有寄存器的,而官方的库又用了大量的封装,所以看起来特别的痛苦,于是我结合网上的资料和自己的理解总结了一下,希望可以帮助到大家。
1.1、void TIM_DeInit(TIM_TypeDef* TIMx)
功 能:将TIMx外围寄存器初始化为其默认重置值。
输 入:无
1.2、void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
功 能:根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx时基单元外围设备。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TimeBaseInitStruct:指向TIM_TimeBaseInitTypeDef结构的指针。
1.3、void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
功 能:根据TIM_OCInitStruct中指定的参数初始化TIMx Channel1。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_OCInitStruct:指向TIM_OCInitTypeDef结构的指针。
1.4、void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)
功 能:根据TIM_ICInitStruct中指定的参数初始化TIM外围设备。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_ICInitStruct:指向TIM_ICInitTypeDef结构的指针。
1.5、void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)
功 能:根据TIM结构中的指定参数配置TIM外围设备,以测量外部PWM信号。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_ICInitStruct:指向TIM_ICInitTypeDef结构的指针。
1.6、void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct)
功 能:配置:中断特性、死区时间、锁定级别、OSSI、OSSR状态和AOE(自动输出启用)。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_BDTRInitStruct:指向TIM_BDTRInitTypeDef结构的指针。
1.7、void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
功 能:用默认值填充每个TIM_TimeBaseInitStruct成员。
输 入:TimeBaseInitStruct:指向TIM_TimeBaseInitTypeDef结构的指针。
1.8、void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct)
功 能:用默认值填充每个TIM_OCInitStruct成员。
输 入:TIM_OCInitStruct:指向TIM_OCInitTypeDef结构的指针。
1.9、void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct)
功 能:用其默认值填充每个TIM_ICInitStruct成员。
输 入:TIM_ICInitStruct:指向TIM_ICInitTypeDef结构的指针。
1.10、void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct)
功 能:用默认值填充每个TIM_BDTRInitStruct成员。
输 入:TIM_BDTRInitStruct:指向TIM_BDTRInitTypeDef结构的指针。
1.11、void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)
功 能:启用或禁用指定的TIM外围设备。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;NewState:启用或禁用。
1.12、void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState)
功 能:启用或禁用TIM外围设备主输出。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;NewState:启用或禁用。
1.13、void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
功 能:启用或禁用指定的TIM中断。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_IT:指定要启用或禁用的TIM中断源;NewState:启用或禁用。
1.14、void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource)
功 能:将TIMx外围寄存器初始化为其默认重置值。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_EventSource:指定事件源。
1.15、void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength)
功 能:配置TIMx的DMA接口。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_DMABase:DMA基址;TIM_DMABurstLength:DMA突发长度。
1.16、void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState)
功 能:启用或禁用TIMx的DMA请求。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_DMASource:指定DMA请求源;NewState:启用或禁用。
1.17、void TIM_InternalClockConfig(TIM_TypeDef* TIMx)
功 能:配置TIMx内部时钟。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备。
1.18、void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource)
功 能:将TIMx内部触发器配置为外部时钟。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_InputTriggerSource:触发源。
1.19、void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,uint16_t TIM_ICPolarity, uint16_t ICFilter)
功 能:将TIMx触发器配置为外部时钟。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_TIxExternalCLKSource: 触发器源;ICFilter:指定过滤器值。此参数的值必须介于0x0和0xF之间。
1.20、void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter)
功 能:配置外部时钟模式1。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_ExtTRGPrescaler:外部触发预分频器;TIM_ExtTRGPolarity:外部触发极性;ExtTRGFilter:外部触发器筛选器。
1.21、void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter)
功 能:配置TIMx外部触发器(ETR)。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_ExtTRGPrescaler:外部触发预分频器;TIM_ExtTRGPolarity:外部触发极性;ExtTRGFilter:外部触发器筛选器。
1.22、void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode)
功 能:配置TIMx预分频器。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;Prescaler:指定预分频器寄存器值;TIM_PSCReloadMode:指定TIM预分频器重新加载模式。
1.23、void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode)
功 能:指定要使用的TIMx计数器模式。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_CounterMode:指定要使用的计数器模式。
1.24、void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource)
功 能:选择输入触发源。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_InputTriggerSource:输入触发源。
1.25、void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity)
功 能:配置TIMx编码器接口。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_EncoderMode:指定TIMx编码器模式;TIM_IC1Polarity:指定IC1极性;TIM_IC2Polarity:指定IC2极性。
1.26、void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
功 能:强制TIMx输出1波形为激活或非激活电平。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_ForcedAction:指定要设置为输出波形的强制操作。
1.27、void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
功 能:在ARR上启用或禁用TIMx外设预加载寄存器。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;NewState:启用或禁用。
1.28、void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState)
功 能:选择TIM外围换向事件。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;NewState:启用或禁用。
1.29、void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState)
功 能:选择TIMx外围捕获比较DMA源。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;NewState:启用或禁用。
1.30、void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState)
功 能:设置或重置TIM外围捕获比较预加载控制位。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;NewState:启用或禁用。
1.31、void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
功 能:启用或禁用CCR1上的TIMx外围预加载寄存器。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_OCPreload:TIMx外围预加载寄存器的新状态。
1.32、void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
功 能:配置TIMx输出比较1快速功能。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_OCFast:输出比较快速启用位的新状态。
1.33、void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
功 能:清除或保护外部事件上的OCREF1信号。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_OCClear:输出比较清除启用位的新状态。
1.34、void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
功 能:配置TIMx通道1极性。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_OCPolarity:指定OC1极性。
1.35、void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity)
功 能:配置TIMx通道1极性。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_OCNPolarity:指定OC1N极性。
1.36、void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx)
功 能:启用或禁用TIM捕获比较通道x。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_Channel:指定TIM通道;TIM_CCx:指定TIM信道CCxE位的新状态。
1.37、void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN)
功 能:启用或禁用TIM捕获比较通道xN。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_Channel:指定TIM通道;TIM_CCxN:指定TIM信道CCxNE位的新状态。
1.38、void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode)
功 能:选择TIM输出比较模式。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_Channel:指定TIM通道;TIM_OCMODE:指定TIM输出比较模式。
1.39、void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
功 能:启用或禁用TIMx更新事件。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;NewState:启用或禁用。
1.40、void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource)
功 能:配置TIMx更新请求中断源。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_UpdateSource:指定更新源。
1.41、void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState)
功 能:启用或禁用TIMx的霍尔传感器接口。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;NewState:启用或禁用。
1.42、void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode)
功 能:选择TIMx的单脉冲模式。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_OPMode:指定要使用的OPM模式。
1.43、void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource)
功 能:选择TIMx触发器输出模式。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_TRGOSource:指定触发器输出源。
1.44、void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode)
功 能:选择TIMx从机模式。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_SlaveMode:指定定时器从模式。
1.45、void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode)
功 能:设置或重置TIMx主/从模式。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_MasterSlaveMode:指定定时器主从模式。
1.46、void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter)
功 能:设置TIMx计数器寄存器值。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;Counter:指定计数器寄存器的新值。
1.47、void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload)
功 能:设置TIMx自动重新加载寄存器值。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;Autoreload:指定Autoreload寄存器的新值。
1.48、void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)
功 能:设置TIMx捕获比较1寄存器值。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;Compare1:指定捕获Compare1寄存器的新值。
1.49、void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
功 能:设置TIMx输入捕捉1预分频器。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_ICPSC:指定输入Capture1预分频器的新值。
1.50、void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD)
功 能:设置TIMx时钟刻度值。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_CKD:指定时钟分频值。
1.51、uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx)
功 能:获取TIMx输入捕获1的值。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备。
1.52、uint16_t TIM_GetCounter(TIM_TypeDef* TIMx)
功 能:获取TIMx计数器值。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备。
1.53、uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx)
功 能:获取TIMx预分频器值。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备。
1.54、FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
功 能:检查是否设置了指定的TIM标志。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_FLAG:指定要检查的标志。
1.55、void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
功 能:清除TIMx的挂起标志。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_FLAG:指定要清除的标志位。
1.56、ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)
功 能:检查TIM中断是否发生。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_IT:指定要检查的TIM中断源。
1.57、void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)
功 能:清除TIMx的中断挂起的位。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_IT:指定要清除的挂起位。
1.58、static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,uint16_t TIM_ICFilter)
功 能:将TI1配置为输入。
输 入:TIMx:其中x可以是1到4来选择TIM外围设备;TIM_ICPolarity:输入极性;TIM_ICSelection:指定要使用的输入;TIM_ICFilter:指定输入捕获筛选器。
原文链接:七、CH32V103应用教程——定时器中断 - RISC-V技术及应用论坛,开源指令集架构(ISA)论坛 - 21ic电子技术开**坛
下面是代码部分,实测可用,v003是定时器2
main.c
#include "debug.h"
void TIM2_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void TIM2_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能TIM2时钟
TIM_TimeBaseStructure.TIM_Period = arr; //指定下次更新事件时要加载到活动自动重新加载寄存器中的周期值。
TIM_TimeBaseStructure.TIM_Prescaler =psc; //指定用于划分TIM时钟的预分频器值。
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分频因子
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM计数模式,向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //使能TIM2中断,允许更新中断
//初始化TIM NVIC,设置中断优先级分组
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM2中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //设置抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //设置响应优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能通道1中断
NVIC_Init(&NVIC_InitStructure); //初始化NVIC
TIM_Cmd(TIM2, ENABLE); //TIM2使能
}
/*********************************************************************
* @fn main
*
* @brief Main program.
*
* @return none
*/
int main(void)
{
u16 i;
SystemCoreClockUpdate();
Delay_Init();
#if (SDI_PRINT == SDI_PR_OPEN)
SDI_Printf_Enable();
#else
USART_Printf_Init(115200);
#endif
printf("SystemClk:%d\r\n", SystemCoreClock);
printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
TIM2_Int_Init(4999,7199);
while(1)
{
}
}
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查TIM2中断是否发生。
{
TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除TIM2的中断挂起位。
printf("1\n");
}
}
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/abc565846881/article/details/135939081
|
|