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);
}