博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32F103 TIM1输出PWM设置
阅读量:7195 次
发布时间:2019-06-29

本文共 3017 字,大约阅读时间需要 10 分钟。

//TIM1 分频#define	TIM1_DIV1	  (1-1)#define	TIM1_DIV2	  (2-1)#define	TIM1_DIV4	  (4-1)#define	TIM1_DIV8	  (8-1)#define	TIM1_DIV9	  (9-1)#define	TIM1_DIV18	  (18-1)#define	TIM1_DIV72	  (72-1)#define		TIM1PinA_Enb  	 	TIM1->CCER |= 0X0001 //比较通道1输出到IO#define		TIM1PinB_Enb 	 	TIM1->CCER |= 0X0010 //比较通道2输出到IO#define		TIM1PinC_Enb  		TIM1->CCER |= 0X0100 //比较通道3输出到IO#define		TIM1PinA_Dis   		TIM1->CCER &= ~0X0001 //比较通道1禁止输出到IO#define		TIM1PinB_Dis  		TIM1->CCER &= ~0X0010 //比较通道2禁止输出到IO#define		TIM1PinC_Dis  		TIM1->CCER &= ~0X0100 //比较通道3禁止输出到IO#define		VT_PWM				1000 //PWM 计数最大值 频率8K//#define		VT_PWM				500 //PWM 计数最大值 频率16K//*************************************// 函数名称:TIM1_PWMMode_Init// 函数功能:TIM1 作PWM模式初始化	用作比较输出用// 入口参数:计数个数 分频数// 出口参数:无// 返回值  :无// 此设置适合用作BLDC驱动控制中驱动三对MOS//***************************************void TIM1_PWMMode_Init(int16_t Tcon,uint16_t psc){    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);    TIM_DeInit(TIM1);            //复位定时器	TIM1->ARR = Tcon ;	 //定时器重装载值 	TIM1->PSC = psc ;	//时钟预分频系数 	TIM1->CR1 &= ~(1<<4) ; //向上计数   	TIM1->CR1 |= (1<<7);  //使能自动重装载			 //清除更新中断  比较1234中断标志	TIM1->SR &= ~0X001F ;  //	通道1 2 3 配置为PWM1模式	TIM1->CCMR1 = 0X6868 ; //	TIM1->CCMR2 = 0X0068 ;// 不使能比较通道1 2 3输出到IO 且1电平为有效电平	TIM1->CCER  = 0X0000 ;//	TIM1->CCR1 = 0 ;	TIM1->CCR2 = 0 ;	TIM1->CCR3 = 0 ;	TIM1->CCR4 = 0 ;	//	关更新中断 比较1-4中断 	TIM1->DIER &= ~0X001F ;	//	TIM1->DIER |= 0X0002 ;	 //开比较1 中断    TIM1->BDTR |= (1<<15) ;	//主输出使能   !!!//清除更新事件标记位 并初始化所有寄存器	TIM1->EGR &= ~0X0001 ; 			     TIM1->CR1 |= 0X0001 ;            //开启时钟}//*************************************// 函数名称:ToPWM_Value// 函数功能:设置PWM占空比// 入口参数:计数个数 分频数// 出口参数:无// 返回值  :无//***************************************/void ToPWM_Value(uint16_t InValue){	TIM1->CCR1 = InValue ;	TIM1->CCR2 = InValue ;	TIM1->CCR3 = InValue ;	}//*************************************// 函数名称:BLDC_RUN_ONESTEP// 函数功能:电机六步走向// 入口参数:电机运行的当前步// 出口参数:无//***************************************/void BLDC_RUN_ONESTEP(uint32_t STEP){	switch(STEP)	{		case 1 : // AB			TIM1PinB_Dis ;			TIM1PinC_Dis ;			TIM1PinA_Enb ;			UdePinA_Off ;			UdePinC_Off ;			UdePinB_On ;						break ;		case 2 :	//AC			TIM1PinB_Dis ;			TIM1PinC_Dis ;			TIM1PinA_Enb ;			UdePinA_Off ;			UdePinB_Off ;			UdePinC_On ;								break ;		case 3 : //BC				TIM1PinA_Dis ;			TIM1PinC_Dis ;			TIM1PinB_Enb ;			UdePinA_Off ;			UdePinB_Off ;			UdePinC_On ;											break ;		case 4 ://BA				TIM1PinA_Dis ;			TIM1PinC_Dis ;			TIM1PinB_Enb ;			UdePinB_Off ;			UdePinC_Off ;			UdePinA_On ;							break ;		case 5 ://CA				TIM1PinA_Dis ;			TIM1PinB_Dis ;			TIM1PinC_Enb ;			UdePinB_Off ;			UdePinC_Off ;			UdePinA_On ;			break ;		case 6 :	//CB				TIM1PinA_Dis ;			TIM1PinB_Dis ;			TIM1PinC_Enb ;			UdePinA_Off ;			UdePinC_Off ;			UdePinB_On ;												break ;				default : 				break ;	}			}//----实例应用------	 //72M/(9) = 8M  pwm周期=(1/8)*1000=125U 	TIM1_PWMMode_Init(VT_PWM,TIM1_DIV9) ;  //PWM 频率设置初始化 频率F=8K	//	ToPWM_Value(500) ; //设置三相驱动的PWM占空比 500/1000 = 50%//	TIM1PinA_Enb ; //PWM输出到IO 此时可在IO上看到有PWM信号输出

 

 

转载地址:http://vemkm.baihongyu.com/

你可能感兴趣的文章
Android手机中的“秘码”
查看>>
使用Redis中hscan的坑
查看>>
quartz 使用 PostgreSQL抛错“不良的类型值: long : \x
查看>>
Python的getattr(),setattr(),delattr(),hasattr()
查看>>
linux命令学习——tar
查看>>
Go语言数据结构
查看>>
linux常用命令
查看>>
jQuery 1.6 中文API (适用jQuery 1.6和jQuery 1.6.1)
查看>>
PhoneGap架构基础及工作原理调研报告
查看>>
ubuntu丢失网卡的一个解决办法
查看>>
Android编译环境搭建
查看>>
HTTP-服务器端CooKie与浏览器端Cookie
查看>>
工作中的价值观问题思考
查看>>
UIWebView添加头视图
查看>>
关于Alipay支付宝接口(Java版)上
查看>>
iOS--UISwitch
查看>>
VS2013's udpate2 有重大缺陷
查看>>
SQL Profiler 无法连接 P6SPY 问题
查看>>
hibernate 调用存储过程
查看>>
mysql 1064错误
查看>>