资源简介
自己在别人的基础上修改的(之前不能修改占空比),既能够修改相位差也能修改占空比,看完之后你能理解这个思想就可以随便修改了

代码片段和文件信息
#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数据无损压缩算法,可以直接运行
相关资源
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- 51单片机PWM程序,占空比、周期可调整
- STM32基于rt_thread操作系统的SDHC卡文件
- NRF24L01实现51与STM32双向通讯
- SG3525频率PWM控制均可调模块
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- STM32F103 CC2500完整驱动(模拟SPI)
- AD7606采集程序
- stm32 用SPI 方式读写 SDHC
- stm32通过DMA方式采集ADC数据
- 意法半导体STM全系列微控制器STM32ST
- 基于STM32芯片的SX1278 驱动 LORA.rar
- STM32的PCB封装库,以及原理图库,48
- SX1280.rar
- STM32 DS3231驱动.zip
- STM32F103C8T6+NRF24l01无线通信
- 21天学会嵌入式开发STM32.zip
评论
共有 条评论