资源简介
自己在别人的基础上修改的(之前不能修改占空比),既能够修改相位差也能修改占空比,看完之后你能理解这个思想就可以随便修改了
代码片段和文件信息
#include “tim.h“
#include “stm32f10x.h“
/*
1、同一个定时器的不同通道之间实现PWM输出不同的占空比和相位
可以利用修改PWM的输出模式为TIM_OCMode_Toggle,可以实现;
1)当比较寄存器的值一直不变化时,输出的占空比是50%,不变化;改变两个通道之间的相位的话,可以通过改变通道的输出极性和[一个通道比较值为0,另一个比较值设定既可实现]
2)当想要改变PWM的相位和占空比时,需要在该定时器的更新中断中,修改比较寄存器的值(设定两个比较值既可,在更新中断中轮训改变寄存器值)
3)在程序运行时,改变占空比的同时,也会改变相位。同时在改变的PWM第一拍,占空比的值是不对的。
*/
u16 Test_CH1Test_CH1_1Test_CH2 Test_CH2_1 Period1;
void TIM3_Config(uint16_t preuint16_t arr)
{
TIM_TimebaseInitTypeDef TIM_TimebaseInitStructure;
NVIC_InitTypeDef NVIC_InitHALLStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3ENABLE);
//这个函数就在一开始的时候使用切记
TIM_DeInit(TIM3);
//TIM
TIM_TimebaseInitStructure.TIM_Prescaler = pre;
TIM_TimebaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimebaseInitStructure.TIM_Period = arr;
TIM_TimebaseInitStructure.TIM_ClockDivision = 0;
TIM_TimebaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimebaseInit(TIM3&TIM_TimebaseInitStructure);
TIM_UpdateRequestConfig(TIM3 TIM_UpdateSource_Regular);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitHALLStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitHALLStructure.NVIC_IRQChannelPreemptionPriority = 1;//2
NVIC_InitHALLStructure.NVIC_IRQChannelSubPriority = 1;//0
NVIC_InitHALLStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitHALLStructure);
TIM_ITConfig(TIM3 TIM_IT_Update ENABLE);
//open periph
TIM_Cmd(TIM3ENABLE);
}
//TIM3 CH1 PA6 CH2 PA7
void PWM_Config(uint16_t pulseuint16_t degFunctionalState status)
{
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIOENABLE);
//GPIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA&GPIO_InitStructure);
//TIM OC
TIM_OC1PreloadConfig(TIM3TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;//TIM_OCMode_PWM1 TIM_OCMode_Toggle
if(status)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
}
else
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;
}
TIM_OCInitStructure.TIM_Pulse = TIMX_CH1_CCRx_First;//CH1---PA6
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
if(status)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
}
else
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;
}
TIM_OCInitStructure.TIM_Pulse = TIMX_CH2_CCRx_First;
//当小于等于180度的时候使用相反的极性
if(deg<=180)
{
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
}
//当大于的时候使用相同的极性
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-10-28 11:25 STM32 同一个定时输出不同的相位差和占空比\
文件 5626 2017-10-28 11:25 STM32 同一个定时输出不同的相位差和占空比\time.c
文件 461 2017-10-28 11:25 STM32 同一个定时输出不同的相位差和占空比\time.h
- 上一篇:16-16点阵字模生成软件 绿色版
- 下一篇:LZ77数据无损压缩算法,可以直接运行
相关资源
- 基于STM32F4x9的LCD显示
- VS1053B编解码器的VDR分布式声音采集卡
- stm32的DAC播放音乐文件
- STM32+TMC5160代码电路图.rar
- 基于STM32的深海钻机甲板控制系统
- stm32f103.SchDoc
- STM32F103 USART+DMA
- DMA+stm32 407.zip
- 4_USART串口通信(空闲中断+DMA.zip
- stm32f105-usart-DMA收发demo
- STM32F042F6P6 Uart12DMA;发送中断接收
- 基于ARM7 PWM定时器的图像传感器时序信
- 基于STM32的嵌入式双目图像采集系统设
- 基于STM32F103C8单片机的晶联讯电子JL
- 基于STM32的温湿度检测系统实现
- stm32F4+w5300
- 14284969_《STM32单片机应用与全案例实践
-
ST-li
nk-V2的SWD仿真使用方法.docx - 安富莱STM32开发板资料
- STM32F103实现OV7670摄像头显示
- STM32F207学习板例程
- 电力电子技术(第4版)_王兆安_带目
- STM32F103VCT6TR - High-density performance lin
- 基于FAN6754A的PWM反激式开关电源的设计
- 采用双闭环控制提高PWM的电源纹波抑
- STM32 SRAM启动的 KeiL 配置
- STM32的IAP-Bootloader程序
- STM32例程之Bootloader
- stm32f103 虚拟U盘,调试成功的
- 基于stm32F103vct6的SD卡FATFS文件系统移植
评论
共有 条评论