打印
[单片机芯片]

沁恒微WCH32V003定时器中断

[复制链接]
1599|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-3-1 16:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式


         最近在做一个项目,用到的主控芯片是沁恒微的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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1931

主题

15611

帖子

11

粉丝