完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题,我先配置GPIOPD12后配置tiM4_CH1,但是通过监测发现没有PWM 输出,不知道是不是哪儿出问题了,定时器CNT仿真看到是正常的,但是就是没有PWM输出到gpio上,看GPIO的寄存器ISTAT也没有变化,看看哪位大神指导一下,或者我是那个寄存器没配置对?:程序如下:
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); GPIO_StructInit( GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;GPIO_Init(DI8_GPIO_PORT, GPIO_InitStructure);GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //NVIC_InitTypeDef NVIC_InitStructure; //NVICRCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); TIM_TimeBaseStructure.TIM_Period = 21000-1; //250usTIM_TimeBaseStructure.TIM_Prescaler =0;TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;TIM_TimeBaseInit(TIM4, TIM_TimeBaseStructure); TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);TIM_SelectOutputTrigger(TIM4, TIM_TRGOSource_OC1Ref);TIM_ARRPreloadConfig(TIM4, ENABLE); TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //TIM_OCNPolarity_High;TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;//TIM_OCNPolarity_High;TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;// TIM_OCIdleState_ResetTIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;// TIM_OCNIdleState_ResetTIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;TIM_OCInitStructure.TIM_Pulse = 10500+30;TIM_OC1Init(TIM4, TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Disable); |
|
相关推荐
2个回答
|
|
从你给出的配置上没看出明显导致PWM无输出的原因。
不知是否跟GPIO复用或时钟配置有关。 如果可能的话,尽量使用CubeMx进行配置, 基于它做配置实现PWM输出真是分分钟的事情。 硬件上注意整个硬件板可以正常工作了、别把管脚编号弄错了。 |
|
|
|
1. 确认GPIO和TIM的时钟已经使能。在配置GPIO之前,确保已经通过RCC_APB1PeriphClockCmd或RCC_APB2PeriphClockCmd使能了相应的时钟。
2. 确认GPIO的引脚配置正确。在配置GPIO时,需要将GPIO_Mode设置为GPIO_Mode_AF并设置GPIO_AF为正确的复用功能值。例如,如果TIM4_CH1的复用功能是AF2,则需要将GPIO_AF设置为GPIO_AF_TIM4。 3. 确认TIM的配置正确。在配置TIM4_CH1之前,需要确保TIM4已经使能并且计时器配置正确。可以参考以下代码片段: ```c // 使能TIM4时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); // 配置TIM4 TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period = 1000 - 1; // 设置周期为1000 TIM_TimeBaseStructure.TIM_Prescaler = 84 - 1; // 设置预分频为84 TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); // 配置TIM4_CH1的PWM模式 TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 500; // 设置占空比为50% TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM4, &TIM_OCInitStructure); // 使能TIM4_CH1的输出 TIM_CtrlPWMOutputs(TIM4, ENABLE); // 启动TIM4 TIM_Cmd(TIM4, ENABLE); ``` 4. 检查GPIO的上拉电阻配置。如果使用了开漏输出,则需要通过下面的代码使能上拉电阻: ```c GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; ``` 如果使用了推挽输出,则可以将GPIO_PuPd设置为GPIO_PuPd_NOPULL。 通过以上步骤确认配置无误后,如果仍然没有PWM输出,可能是硬件连接或者其他问题导致。可以检查电路连接、引脚映射正确性等。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
767 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
489 浏览 1 评论
329 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
271 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
648 浏览 2 评论
1406浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
61浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
109浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
77浏览 3评论
创建了两个task如果一个优先级高 一个优先级低,高优先级的那个一直在做,什么时候会调度到低优先级的呢?
104浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-16 17:00 , Processed in 1.012607 second(s), Total 85, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号