CH32V203/208的学习-TIM

1.TIM的库函数说明:

库函数说明表:

序 号

函数名称

功能描述

1

TIM_DeInit

将外设TIMx寄存器重设为缺省值

2

TIM_TimeBaseInit

根据TIM_TimeBaseInitStruct 中指定的参数,初始化TIMx的时间基数 单位

3

TIM_OClInit

根据TIM_OCInitStruct 中指定的参数,初始化外设TIMx通道1

4

TIM_OC2Init

根据 TIM_OCInitStruct 中指定的参数,初始化外设 TIMx通道 2

5

TIM_OC3Init

根据TIM_OCInitStruct 中指定的参数,初始化外设TIMx通道3

6

TIM OCAInit

根据 TIM OCntStruct中指定的参数,初始化外设T1M

7

TIM ICInit

根据TIMICInitStruet中指定的参数,初始化外设TIM

8

TIM_PWMIConfig

根棚 TIMICntSc中指定的壹数配量外设TM,的新 信号

9

TIM_BDTRConfig

配置中断特性、死区时间、锁定级别、OSSI/OSSR状态和AO

10

TIM TimeBaseStructInit

把TIM_TimeBaseStructInit中的每一个参数按缺省值填人

11

TIMOCStructInit

把TIM_OCInitStruct 中的每一个参数按缺省值填入

12

TIM_ICStructInit

把TIM ICInitStruct中的每一个参数按缺省值填入

13

TIMBDTRStructInit

把TIM BDTRInitStruct中的每一个参数按缺省值填入

14

TIM_ Cmd

使能或者失能TIMx外设

15

TIM_CtrlPWMOutputs

使能或者失能外设TIM的主要输出

16

TIM_ ITConfig

使能或者失能指定的 TIM 中断

17

TIM_GenerateEvent

设置TIMx事件由软件产生

18

TIM_DMAConfig

设置TIMx的DMA接口

19

TIM_DMACmd

使能或者失能指定的 TIMx的 DMA 请求

20

TIM_InternalClockConfig

设置TIMx的内部时钟

21

TIM_ITRxExternalClockConfig

设置TIMx的内部触发为外部时钟模式

22

TIM_ TIxExternalClockConfig

设置TIMx触发为外部时钟

23

TIM_ETRClockMode1Config

设置TIMx外部时钟模式1

24

TIM_ETRClockMode2Config

设置 TIMx外部时钟模式 2

25

TIM_ETRConfig

配置TIMx外部触发

26

TIM_PrescalerConfig

设置TIMx预分频

27

TIM_ CounterModeConfig

设置TIMx计数器模式

28

TIM_SelectInputTrigger

选择 TIMx输入触发源

29

TIM_EncoderInterfaceConfig

设置TIMx编码界面

30

TIM_ForcedOC1Config

置TIMx输出1为活动或者非活动电平

31

TIM_ForcedOC2Config

置TIMx输出2为活动或者非活动电平

32

TIM_ForcedOC3Config

置TIMx输出3为活动或者非活动电平

33

TIM_ForcedOC4Config

置TIMx输出4为活动或者非活动电平

34

TIM_ARRPreloadConfig

使能或者失能TIMx在ARR上的预装载寄存器

35

TIM_SelectCOM

选择外设 TIM 交换事件

36

TIM_SelectCCDMA

选择TIMx外设的捕获比较DMA源

37

TIM_CCPreloadControl

设置或重置TIM外设捕获比较预加载控制位

38

TIM_OC1PreloadConfig

使能或者失能TIMx在CCR1上的预装载寄存器

39

TIM_OC2PreloadConfig

便能或者失能TIMx在CCR2上的预装载寄存器

40

TIM_OC3PreloadConfig

便能或者失能TIMX在CCR3上的预装载寄存器

41

TIM_OC4PreloadConfig

使能或者失能TIMx在CCR4上的预装载寄存器

42

TIM_OClFastConfig

设置TIMx捕获/比较1快速特征

43

TIM_OC2FastConfig

设置TIMx捕获/比较2快速特征

44

TIM_OC3FastConfig

设置TIMx捕获/比较3快速特征

45

TIM_OC4FastConfig

设置TIMx捕获/比较4快速特征

46

TIM_ ClearOC1Ref

在一个外部事件时清除或者保持OCREF1信号

47

TIM_ClearOC2Ref

在一个外部事件时清除或者保持OCREF2信号

48

TIM_ClearOC3Ref

在一个外部事件时清除或者保持OCREF3信号

49

TIM_ClearOC4Ref

在一个外部事件时清除或者保持OCREF4 信号

50

TIM_OClPolarityConfig

设置TIMx通道1极性

51

TIM_OC1NPolarityConfig

设置TIMx通道1极性

52

TIM_OC2PolarityConfig

设置TIMx通道2极性

53

TIM_OC2NPolarityConfig

设置TIMx通道2极性

54

TIM_OC3PolarityConfig

设置TIMx通道3极性

55

TIM_OC3NPolarityConfig

设置TIMx通道3极性

56

TIM_OC4PolarityConfig

设置TIMx通道4极性

57

TIM_OC4NPolarityConfig

设置 TIMx通道 4 极性

58

TIM_CCxCmd

使能或者失能TIM捕获比较通道x

59

TIM_CCxNCmd

使能或者失能TIM捕获比较通道 xN

60

TIM_SelectOCxM

选择TIM输出比较模式

61

TIM_UpdateDisableConfig

使能或者失能TIMx更新事件

62

TIM_UpdateRequestConfig

设置TIMx更新请求源

63

TIM_SelectHallSensor

使能或者失能TIMx霍尔传感器接口

64

TIM_SelectOnePulseMode

设置 TIMx单脉冲模式

65

TIM_SelectOutputTrigger

设置TIMx触发输出模式

66

TIM_SelectSlaveMode

选择TIMx从模式

67

TIM_SelectMasterSlaveMode

设置或重置TIMx主/从模式

68

TIM_SetCounter

设置TIMx计数器寄存器值

69

TIM_SetAutoreload

设置TIMx自动重装载寄存器值

70

TIM_SetCompare1

设置TIMx捕获/比较1寄存器值

71

TIM_SetCompare2

设置TIMx捕获/比较2寄存器值

72

TIM_SetCompare3

设置TIMx捕获/比较3寄存器值

73

TIM_SetCompare4

设置TIMx捕获/比较4寄存器值

74

TIM_SetIC1Prescaler

设置TIMx输入捕获1预分频

75

TIM_SetIC2Prescaler

设置TIMx输入捕获2预分频

76

TIM_SetIC3Prescaler

设置TIMx输入捕获3预分频

77

TIM_SetIC4Prescaler

设置TIMx输入捕获4预分频

78

TIM_SetClockDivision

设置TIMx的时钟分割值

79

TIM_GetCapturel

获得TIMx输入捕获1的值

80

TIM_GetCapture2

获得TIMx输入捕获 2的值

81

TIM_GetCapture3

获得TIMx输入捕获3的值

82

TIM_GetCapture4

获得TIMx输入捕获4的值

83

TIM_GetCounter

获得 TIMx计数器的值

84

TIM_GetPrescaler

获得TIMx预分频值

85

TIM_GetFlagStatus

检查指定的TIM标志位设置与否

86

TIM_ClearFlag

清除TIMx的待处理标志位

87

TIM_GetITStatus

检查指定的TIM中断发生与否

88

TIM_ClearITPendingBit

清除TIMx的中断待处理位

89

TI1_Config

配置TI1作为输出

90

TI2_Config

配置TI2 作为输出

91

TI3_Config

配置TI3作为输出

92

TI4_Config

配置TI4作为输出

2.任务一:

设置TIM时钟和定时器中断,先占0,从3,每次中断改变LED灯状态。

改变状态用非或异或任选。

/*
 * Userpinmux.c
 *
 *  Created on: 2023年7月5日
 *      Author: 86195
 */

#ifndef USER_USERPINMUX_C_
#define USER_USERPINMUX_C_
#include "Userpinmux.h"
#include "debug.h"

#if  cmd_status_board==2
void TIM3_IRQHandler(void)__attribute__((interrupt("WCH-Interrupt-fast")));
void TIM3_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_Init_2;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
    TIM_TimeBaseStructure.TIM_Period=arr;//寄存器值
    TIM_TimeBaseStructure.TIM_Prescaler=psc;//预分频
    TIM_TimeBaseStructure.TIM_ClockDivision=0;
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

    TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);

    NVIC_Init_2.NVIC_IRQChannel=TIM3_IRQn;
    NVIC_Init_2.NVIC_IRQChannelPreemptionPriority=0;
    NVIC_Init_2.NVIC_IRQChannelSubPriority=3;
    NVIC_Init_2.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_Init_2);
    TIM_Cmd(TIM3, ENABLE);
}
void TIM3_IRQHandler(void)
{
    static BitAction  status;
    if (TIM_GetITStatus(TIM3, TIM_IT_Update)!=RESET)
    {
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
        printf("time3\r\n");
        GPIO_WriteBit(GPIOB, GPIO_Pin_3, status);
        status^=SET;
        GPIO_WriteBit(GPIOB, GPIO_Pin_4, status);
    }
}
#endif
void pinmux_init(){
GPIO_InitTypeDef GPIO_INIT_1;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_INIT_1.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
GPIO_INIT_1.GPIO_Mode=GPIO_Mode_Out_PP;//设置成推挽输出
GPIO_INIT_1.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_INIT_1);
GPIO_SetBits(GPIOB, GPIO_Pin_5);
GPIO_SetBits(GPIOB,GPIO_Pin_4);
}
#endif /* USER_USERPINMUX_C_ */

3.任务二:

设置定时器重装值100,预分频7199,占空比50%,使能定时器通道1,产生频率确定占空比确定的信号:

参考例程程序:(来自沁恒的官网)

/********************************** (C) COPYRIGHT *******************************
 * File Name          : main.c
 * Author             : WCH
 * Version            : V1.0.0
 * Date               : 2021/06/06
 * Description        : Main program body.
*********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for 
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
*******************************************************************************/

/*
 *@Note
 PWM output routine:
 TIM1_CH1(PA8)
 This example demonstrates that the TIM_CH1(PA8) pin outputs PWM in PWM
 mode 1 and PWM mode 2.
 
*/

#include "debug.h"

/* PWM Output Mode Definition */
#define PWM_MODE1   0
#define PWM_MODE2   1

/* PWM Output Mode Selection */
//#define PWM_MODE PWM_MODE1
#define PWM_MODE PWM_MODE2

/*********************************************************************
 * @fn      TIM1_OutCompare_Init
 *
 * @brief   Initializes TIM1 output compare.
 *
 * @param   arr - the period value.
 *          psc - the prescaler value.
 *          ccp - the pulse value.
 *
 * @return  none
 */
void TIM1_PWMOut_Init(u16 arr, u16 psc, u16 ccp)
{
	GPIO_InitTypeDef GPIO_InitStructure={0};
	TIM_OCInitTypeDef TIM_OCInitStructure={0};
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure={0};

	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_TIM1, ENABLE );

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init( GPIOA, &GPIO_InitStructure );

	TIM_TimeBaseInitStructure.TIM_Period = arr;
	TIM_TimeBaseInitStructure.TIM_Prescaler = psc;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInit( TIM1, &TIM_TimeBaseInitStructure);

#if (PWM_MODE == PWM_MODE1)
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

#elif (PWM_MODE == PWM_MODE2)
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;

#endif

	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = ccp;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OC1Init( TIM1, &TIM_OCInitStructure );

	TIM_CtrlPWMOutputs(TIM1, ENABLE );
	TIM_OC1PreloadConfig( TIM1, TIM_OCPreload_Disable );
	TIM_ARRPreloadConfig( TIM1, ENABLE );
	TIM_Cmd( TIM1, ENABLE );
}
/*********************************************************************
 * @fn      main
 *
 * @brief   Main program.
 *
 * @return  none
 */
int main(void)
{
	USART_Printf_Init(115200);
	printf("SystemClk:%d\r\n",SystemCoreClock);

	TIM1_PWMOut_Init( 100, 48000-1, 50 );

	while(1);
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值