北京西路做网站的公司,广告最多的网站,那里建设网站,seo优化找行者seoCC表示的意思位捕获比较#xff0c;CCR表示的是捕获比较寄存器 占空比等效于PWM模拟出来的电压的多少#xff0c;占空比越大等效出的模拟电压越趋近于高电平#xff0c;占空比越小等效出来的模拟电压越趋近于低电平#xff0c;分辨率表示的是占空比变化的精细程度#xf…
CC表示的意思位捕获比较CCR表示的是捕获比较寄存器 占空比等效于PWM模拟出来的电压的多少占空比越大等效出的模拟电压越趋近于高电平占空比越小等效出来的模拟电压越趋近于低电平分辨率表示的是占空比变化的精细程度按照实际项目的需求使用PWM波形可以在数字系统等效输出模拟量可以实现LED控制亮度和控制电机的速度等操作 输出模式控制器是如何工作的 可以理解为配置有效的电平就是设置高电平配置无效的电平就是设置的低电平 舵机简介 电机驱动模块的硬件电路 接线图PWM驱动呼吸灯 // 配置输出比较模块 //第一个参数的意思是选择定时器第二个参数的意思是配置结构体 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); void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct); // 给输出比较结构体赋值一个默认值 // 配置强制输出模式 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); //配置CCR寄存器的预装功能 void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState); 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); // 配置快速使能 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); 这个不是重点内容 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); // 单独设置输出比较的极性 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); // 单独修改使能输出参数 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); // 选择输出比较模式 void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode); **// 单独更改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); PWM的C语言文件 使用PWM实现呼吸灯的效果
#include stm32f10x.h // Device headervoid PWM_Init(void){// 开启时钟这里TIM2是通用寄存器RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);// GPIO初始化代码/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟// GPIO引脚重映射表示重映射和引脚之间的关系RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;// 使用复用开漏推挽输出模式GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); //将PA1和PA2引脚初始化为推挽输出// 选择时基单元的时钟,选择内部时钟的模式,定时器默认使用的是内部单元的时钟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; // 表示ARR自动重装器的值这两个参数的取值都要在0-65535之间TIM_TimeBaseInitStructure.TIM_Prescaler 720-1; // PSC预分频器的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter 0; // 重复计数器的值// 初始化结构体并将结构体的地址放置在init函数中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 ;//设置CCR,设置ccr寄存器的值TIM_OCInitStructure.TIM_Pulse 0; // CCRTIM_OC1Init(TIM2, TIM_OCInitStructure);// 启动定时器TIM_Cmd(TIM2, ENABLE);
}
void PWM_SetCompare1(uint16_t Compare){TIM_SetCompare1(TIM2,Compare);
}
PWM头文件 #ifndef __PWM_H_
#define __PWM_H_
void PWM_Init(void);
void PWM_SetCompare1(uint16_t Compare);
#endif
main主函数文件 #include stm32f10x.h // Device header
#include Delay.h
#include OLED.h
#include PWM.h
uint8_t i;
int main(void)
{// 初始化oledOLED_Init();PWM_Init();while (1){for(i 0; i 100; i){// 这个函数是设置CCR寄存器的值不直接是占空比PWM_SetCompare1(i);Delay_ms(10);}for(i 0; i 100; i){PWM_SetCompare1(100 - i);Delay_ms(10);}}
}