完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
(一) 先贴出能工作的PWM初始化程序,如下
void tiM14_Init() { RCC->AHBENR|=1<<17; //使能PORTA时钟 GPIOA->MODER = 0X68AAA6F5 ; //PA4/TIM14-CH1复用功能输出 GPIOA->OTYPER = 0X00000000; GPIOA->OSPEEDR = 0X00000000; GPIOA->PUPDR = 0X25000000; GPIOA->AFR[0] =0XFFF0FFFF;; //清除PA4原来的设置 GPIOA->AFR[0] |=1<<18; //设置PA4为AF4 RCC->APB1ENR|=1<<8; //TIM14时钟使能 TIM14->PSC=0; //预分频器1分频 TIM14->ARR=240; //设置频率(200K) TIM14->CCR1 =72; //设置占空比 TIM14->EGR |= 1; //产生一次更新事件 TIM14->CCMR1|=6<<4; //CH1 PWM1模式 TIM14->CCMR1|=1<<3; //CH1预装载使能 TIM14->CCER|=1<<0; //OC1输出使?高电平有效有效 TIM14->CR1=0x0080; //ARPE使能 TIM14->CR1|=0x01; //使能定时器14 } (二) 不能工作的第1路PWM(TIMI-CH1/PA8)初始化程序,如下 void TIM1_Init() { RCC->AHBENR|=1<<17; //使能PORTA时钟 GPIOA->MODER = 0X68AAA6F5 ; GPIOA->OTYPER = 0X00000000; GPIOA->OSPEEDR = 0X00000000; GPIOA->PUPDR = 0X25000000; GPIOA->AFR[0] =0XFFFFF0FF;; //清除PA8原来的设置 GPIOA->AFR[0] |=1<<9; //设置PA8为AF2 RCC->APB2ENR|=1<<11; //TIM1时钟使能 TIM1->PSC=47; //预分频器48分频 TIM1->ARR=1000; //设置频率 TIM1->CCR1 =500; //设置占空比 TIM1->CCMR1|=7<<4; //CH1 PWM2模式 TIM1->CCMR1|=1<<3; //CH1预装载使能 TIM1->CCER|=1<<0; //OC1输出使能 TIM1->CR1|=1<<7; //ARPE使能 TIM1->EGR |= 1; //产生一次更新事件 TIM1->CR1|=0x01; //使能定时器1 TIM1->BDTR |=1<<15; } (三) 不能工作的第2路PWM(TIM3-CH1/PB4)初始化程序,如下 void TIM3_Init() { RCC->APB1ENR|=1<<1; //TIM3时钟使能 RCC->AHBENR|=1<<18; //使能PORTB时钟 GPIOB->MODER = 0X55551655; //PB4复用功能输出 GPIOB->OTYPER = 0X00000000; //推挽输出 GPIOB->OSPEEDR = 0X00000000; //低速 GPIOB->PUPDR = 0X00004000; //除了PB7带上拉,其它脚则无上拉/下拉 GPIOB->AFR[0] =0XFFFFFF0F; //清除PB4原来的设置 GPIOB->AFR[0] |=1<<4; //设置PB4为AF1 TIM3->PSC=47; //预分频器48分频 TIM3->ARR=1000; //设置频率 TIM3->EGR |= 1; //产生一次更新事件 TIM3->CCR1 =500; //设置占空比 TIM3->CCMR1|=7<<4; //CH1 PWM2模式 TIM3->CCMR1|=1<<3; //CH1预装载使能 TIM3->CCER|=1<<0; //OC1输出使能,高电平有效 TIM3->CR1|=1<<7; //ARPE使能 TIM3->CR1|=0x01; //使能定时器3 } (三) 不能工作的第3路PWM(TIM16-CH1/PA6)初始化程序,如下 void TIM16_Init() { RCC->AHBENR|=1<<17; //使能PORTA时钟 GPIOA->MODER = 0X68AAA6F5 ; //PA6复用功能输出 GPIOA->OTYPER = 0X00000000; GPIOA->OSPEEDR = 0X00000000; GPIOA->PUPDR = 0X25000000; GPIOA->AFR[0] =0XFF0FFFFF;; //清除PA6原来的设置 GPIOA->AFR[0] |=1<<20; //设置PA6为AF5 GPIOA->AFR[0] |=1<<22; RCC->APB2ENR|=1<<17; //TIM16时钟使能 TIM16->PSC=47; //预分频器48分频 TIM16->ARR=1000; //设置频率 TIM16->CCR1 =170; //设置占空比 TIM16->EGR |= 1; //产生一次更新事件 TIM16->CCMR1|=6<<4; //CH1 PWM1模式 TIM16->CCMR1|=1<<3; //CH1预装载使能 TIM16->CCER|=1<<0; //OC1输出使能 TIM16->CR1=0x0080; //ARPE使能 TIM16->CR1|=0x01; //使能定时器16 } PCLK=HCLK=48MHZ. 查了很久,上面4路PWM设置内容几乎一样的,为何只有1路能功作,而其他3路则一直是低电平,没PWM波形输出,难道还有别的开关控制? |
|
相关推荐
1个回答
|
|
在STM32F030K6中,如果只有一路PWM正常工作,而其他三路没有PWM波形,可能有以下几个原因:
1. 定时器配置问题:请确保您为每个PWM通道配置了正确的定时器。在您的代码示例中,您只初始化了TIM14。请检查其他PWM通道是否也已正确配置。 2. GPIO配置问题:确保您为每个PWM通道配置了正确的GPIO。在您的代码示例中,GPIOA的MODER寄存器被设置为0X68AAA6F5。请检查其他PWM通道的GPIO配置是否正确。 3. PWM通道使能问题:确保您为每个PWM通道使能了输出。在您的代码示例中,没有显示如何使能PWM通道。通常,您需要设置定时器的CCER寄存器来使能PWM通道。 4. PWM占空比设置问题:请检查您的PWM占空比设置是否正确。如果占空比设置不正确,可能会导致PWM波形不正常。 5. 定时器时钟问题:请确保您的定时器时钟设置正确。如果时钟设置不正确,可能会导致PWM波形不正常。 为了解决这个问题,您可以尝试以下步骤: 1. 检查所有PWM通道的定时器配置,确保它们都已正确初始化。 2. 检查所有PWM通道的GPIO配置,确保它们都已正确设置。 3. 使能所有PWM通道的输出。例如,对于TIM14,您可以使用以下代码使能PWM通道: ```c TIM14->CCER |= TIM_CCER_CC1E; ``` 4. 设置正确的PWM占空比。例如,对于TIM14的通道1,您可以使用以下代码设置占空比: ```c TIM14->CCR1 = 1000; // 假设定时器时钟为1MHz,占空比为1ms ``` 5. 确保定时器时钟设置正确。您可以检查RCC配置代码,确保时钟设置正确。 通过以上步骤,您应该能够找到问题所在并解决它。如果问题仍然存在,请仔细检查您的硬件连接,以确保没有其他问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1932 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1705 浏览 1 评论
1185 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
785 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1750 浏览 2 评论
1992浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
827浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
279浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
637浏览 3评论
644浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-2 16:13 , Processed in 0.986747 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号