网站建设方案设计心得,wordpress 查死链接,上海网络公司查询,网站建设与管理这门课程的介绍目录
1. OC#xff08;Output Compare#xff09;输出比较
2. PWM简介
3. 输出比较通道(高级)
4. 输出比较通道(通用)
5. PWM基本结构
6. 配置介绍
6.1 输出比较模块配置
6.2 给输出比较结构体赋一个默认值
6.3 配置强制输出模式
6.4 配置CRR寄存器的预装…
目录
1. OCOutput Compare输出比较
2. PWM简介
3. 输出比较通道(高级)
4. 输出比较通道(通用)
5. PWM基本结构
6. 配置介绍
6.1 输出比较模块配置
6.2 给输出比较结构体赋一个默认值
6.3 配置强制输出模式
6.4 配置CRR寄存器的预装功能
6.5 配置快速使能
6.6 清除手册有介绍
6.7 单独设置输出比较极性
6.8 单独修改输出使能
6.9 选择输出比较模式
6.10 单独更改CCR寄存器值
7. 程序配置
7.1 初始化结构体
7.2 给结构体赋初始值
7.3 输出比较模式
7.4 输出比较极性
7.5 输出状态使能还是失能
7.6 CCR值设定
7.7 整体配置 1. OCOutput Compare输出比较 输出比较可以通过比较CNT与CCR寄存器值的关系来对输出电平进行置1、置0或翻转的操作用于输出一定频率和占空比的PWM波形。 每个高级定时器和通用定时器都拥有4个输出比较通道 高级定时器的前3个通道额外拥有死区生成和互补输出的功能。
2. PWM简介
天下武功唯快不破增加频率频闪。
PWMPulse Width Modulation脉冲宽度调制 在具有惯性的系统中可以通过对一系列脉冲的宽度进行调制来等效地获得所需要的模拟参量常应用于电机控速等领域。 PWM参数 频率 1 / TS 占空比 TON / TS 分辨率 占空比变化步距 3. 输出比较通道(高级)
老规矩这个先放一放暂时不懂 4. 输出比较通道(通用)
整体流程 输出控制器的工作模式 5. PWM基本结构 以PWM模式1为例 CNTCCR时REF置有效电平高电平 CNT≥CCR时REF置无效电平低电平 根据上图我们就可以配置占空比 假如CCR的大一些REF高电平时间增多占空比增大 假如CCR的小一些REF高电平时间减少占空比变小 从图中我们可以看出CCR的值应该设计在0~ARR1这个范围内若是CRR大于ARR1则相当于Duty1,即占空比大于1也就是100%相当于占空比一直是100%。 ARR越大CCR的取值范围就越大分辨率就越大。
6. 配置介绍
6.1 输出比较模块配置
void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); TIM_TypeDef* TIMx选择定时器 TIM_OCInitTypeDef* TIM_OCInitStruct输出比较参数 6.2 给输出比较结构体赋一个默认值
void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct);
6.3 配置强制输出模式
void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
6.4 配置CRR寄存器的预装功能
void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
影子寄存器写入的值不会立即生效而是在更新事件才会生效
6.5 配置快速使能
void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
6.6 清除手册有介绍
void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
6.7 单独设置输出比较极性
void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
6.8 单独修改输出使能
void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx);
void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN);
6.9 选择输出比较模式
void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode);
6.10 单独更改CCR寄存器值
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);
7. 程序配置
7.1 初始化结构体 TIM_OCInitTypeDef TIM_OCInitStructure;TIM_OC1Init(TIM2, TIM_OCInitStructure);
7.2 给结构体赋初始值 TIM_OCStructInit(TIM_OCInitStructure);
7.3 输出比较模式
#define TIM_OCMode_Timing ((uint16_t)0x0000)//冻结模式
#define TIM_OCMode_Active ((uint16_t)0x0010)//相等时置有效电平
#define TIM_OCMode_Inactive ((uint16_t)0x0020)//相等时置无效电平
#define TIM_OCMode_Toggle ((uint16_t)0x0030)//相等时电平翻转
#define TIM_OCMode_PWM1 ((uint16_t)0x0060)//PWM模式1
#define TIM_OCMode_PWM2 ((uint16_t)0x0070)//PWM模式2
#define IS_TIM_OC_MODE(MODE) (((MODE) TIM_OCMode_Timing) || \((MODE) TIM_OCMode_Active) || \((MODE) TIM_OCMode_Inactive) || \((MODE) TIM_OCMode_Toggle)|| \((MODE) TIM_OCMode_PWM1) || \((MODE) TIM_OCMode_PWM2))
#define IS_TIM_OCM(MODE) (((MODE) TIM_OCMode_Timing) || \((MODE) TIM_OCMode_Active) || \((MODE) TIM_OCMode_Inactive) || \((MODE) TIM_OCMode_Toggle)|| \((MODE) TIM_OCMode_PWM1) || \((MODE) TIM_OCMode_PWM2) || \((MODE) TIM_ForcedAction_Active) || \((MODE) TIM_ForcedAction_InActive))
这里配置PWM1 TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1;//输出比较模式
7.4 输出比较极性
#define TIM_OCPolarity_High ((uint16_t)0x0000)
#define TIM_OCPolarity_Low ((uint16_t)0x0002)
#define IS_TIM_OC_POLARITY(POLARITY) (((POLARITY) TIM_OCPolarity_High) || \((POLARITY) TIM_OCPolarity_Low))
这里配置高极性 TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High;//高极性
7.5 输出状态使能还是失能
#define TIM_OutputState_Disable ((uint16_t)0x0000)
#define TIM_OutputState_Enable ((uint16_t)0x0001)
#define IS_TIM_OUTPUT_STATE(STATE) (((STATE) TIM_OutputState_Disable) || \((STATE) TIM_OutputState_Enable))
这里使能 TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable;
7.6 CCR值设定 TIM_OCInitStructure.TIM_Pulse 50; //CCR
需要更具ARR和PSC进行设定 7.7 整体配置
void PWM_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
// GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE);
// GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; //GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure);TIM_InternalClockConfig(TIM2);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_Period 100 - 1; //ARRTIM_TimeBaseInitStructure.TIM_Prescaler 720 - 1; //PSCTIM_TimeBaseInitStructure.TIM_RepetitionCounter 0;TIM_TimeBaseInit(TIM2, TIM_TimeBaseInitStructure);TIM_OCInitTypeDef TIM_OCInitStructure;TIM_OCStructInit(TIM_OCInitStructure);//给结构体赋初始值TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1;//输出比较模式TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High;//高极性TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse 50; //CCRTIM_OC1Init(TIM2, TIM_OCInitStructure);TIM_Cmd(TIM2, ENABLE);
} STM32F1中断NVIC-CSDN博客 STM32F1外部中断EXTI-CSDN博客 STM32F1定时器TIM-CSDN博客