欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STM32 TIM3的全映射的通道三pwm波形輸出不對
[打印本頁]
作者:
查理九世
時間:
2019-7-29 22:55
標題:
STM32 TIM3的全映射的通道三pwm波形輸出不對
用32單片機的TIM3的全映射的通道三(PC8)和通道四(PC9)輸出兩路PWM波,程序如下,為什么用keil中的模擬只有PC8有PWM波形,PC9無呢,這是為什么?
time.C
void TIM3_CH3_PWM_Init(u16 arr,u16 psc) //通道3的初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定時器3時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外設和AFIO復用功能模塊時鐘
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2->PB5
//設置該引腳為復用輸出功能,輸出TIM3 CH2的PWM脈沖波形 GPIOC.8
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO
//初始化TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數的預分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位
//初始化TIM3 Channel2 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈沖寬度調制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
TIM_OC3Init(TIM3, &TIM_OCInitStructure); //根據T指定的參數初始化外設TIM3 OC3
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的預裝載寄存器
TIM_CtrlPWMOutputs(TIM3,ENABLE);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_Cmd(TIM3, ENABLE); //使能TIM3
}
void TIM3_CH4_PWM_Init(u16 arr,u16 psc) //通道4的初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定時器3時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外設和AFIO復用功能模塊時鐘
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2->PB5
// GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
//設置該引腳為復用輸出功能,輸出TIM3 CH3的PWM脈沖波形 GPIOC.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //TIM_CH4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO
//初始化TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數的預分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位
//初始化TIM3 Channel2 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈沖寬度調制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
TIM_OC4Init(TIM3, &TIM_OCInitStructure); //根據T指定的參數初始化外設TIM3 OC4
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_CtrlPWMOutputs(TIM3,ENABLE);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_Cmd(TIM3, ENABLE); //使能TIM3
}
復制代碼
部分主函數
int main(void)
{
u8 m1,m2;
u8 sumHD;
delay_init(); //延時函數初始化
LED_Init(); //初始化與LED連接的硬件接口
H_D_Init();
TIM3_CH3_PWM_Init(899,71);
TIM3_CH4_PWM_Init(899,71);
while(1)
{
}
復制代碼
11.png
(215.42 KB, 下載次數: 19)
下載附件
2019-7-29 22:54 上傳
作者:
yzwzfyz
時間:
2019-7-30 08:02
查一下手冊,看看PWM允許從哪些端口輸出。
作者:
aaaaaa。
時間:
2019-7-30 09:14
復用并不是外設引腳隨便配置,而指的是一個引腳有多個外設公用,但是任何一個時刻只能有一個外設使用它。你是不是還有別的地方用到了
作者:
aaaaaa。
時間:
2019-7-30 09:36
樓主,你的波怎么出來的,你沒有設置這兩路的占空比吧
我用了你的代碼,并在while中加了兩句
TIM_SetCompare3(TIM3,270);
TIM_SetCompare4(TIM3,270);
用示波器看過了兩路都有波。
要不你再while中也加上這兩句,如果PC9還沒波,而且你還沒有在別的地方用過這個引腳,那就是你的這個引腳壞了
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1