資源簡介
自己在別人的基礎上修改的(之前不能修改占空比),既能夠修改相位差也能修改占空比,看完之后你能理解這個思想就可以隨便修改了

代碼片段和文件信息
#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數據無損壓縮算法,可以直接運行
評論
共有 條評論