你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F107,PWM频率理论与实际差4.6倍

[复制链接]
小水湾 提问时间:2018-5-16 16:17 /
本帖最后由 小水湾 于 2018-5-16 16:20 编辑

static void PWM_GPIO_Config ( void )
{
  GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
        
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
        
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
        
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void PWM_Config (uint16_t ARR ,uint16_t CCR)
{        
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3|RCC_APB1Periph_TIM4,ENABLE);
        
        TIM_DeInit(TIM3);
        TIM_DeInit(TIM4);
        TIM_TimeBaseStructure.TIM_Period=ARR;        
        TIM_TimeBaseStructure.TIM_Prescaler= 7199;        //PSC
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;               
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;               
        TIM_TimeBaseStructure.TIM_RepetitionCounter=0;        
        
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
        TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
        
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        
        TIM_OCInitStructure.TIM_Pulse = CCR;
        
        TIM_OC3Init(TIM3, &TIM_OCInitStructure);        
        TIM_OC4Init(TIM3, &TIM_OCInitStructure);        
        TIM_OC1Init(TIM4, &TIM_OCInitStructure);
        TIM_OC2Init(TIM4, &TIM_OCInitStructure);
        
        TIM_Cmd(TIM3, ENABLE);
        TIM_CtrlPWMOutputs(TIM3, ENABLE);
        TIM_Cmd(TIM4, ENABLE);
        TIM_CtrlPWMOutputs(TIM4, ENABLE);
}PWM_Config(1,1);
理论上PWM周期为100us,实际示波器量出来的是460us,
更改参数
PWM_Config(9999,5000);
理论上PWM周期为1s,实际示波器量出来的是2.3s,求解原因???
示波器量串口波特率38400bps是准的。


收藏 评论7 发布时间:2018-5-16 16:17

举报

7个回答
wenyangzeng 回答时间:2018-5-16 17:00:09
应该是系统时钟频率没有配置正确所致。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

hungchieh1029 回答时间:2018-5-16 17:14:44
請去確認看看,板子上接的XTAL頻率,是否跟你程式代碼#define的數值是一樣的

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

toofree 回答时间:2018-5-16 17:50:48
请参考 ,标准固件库工程 “STM32F10x_StdPeriph_Lib_V3.1.2\Project\STM32F10x_StdPeriph_Examples\TIM\PWM_Output”,用的TIM3
3.5.0库下也有类似工程。

系统时钟、晶振、定时器时钟源,有问题的可能性大。


TIM3_4PWMout.rar (339.25 KB, 下载次数: 0)

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

STM129 回答时间:2018-5-16 23:12:44
103rb换re后SPI触摸失效。107吃灰后部分IO无输出

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

feixiang20 回答时间:2018-5-17 00:12:35
你可以尝试把PWM频率经验设置为最大频率的N倍来观测,你所做的更改参数可以多调试几次看看

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

潘川鄂 回答时间:2018-5-17 10:04:43
应该不会吧
Angel_YY 回答时间:2018-5-17 11:02:50
首先查看晶振的频率是否与代码中设置的一致。用示波器测量一下实际晶振频率。其次检查主频配置是否正确,总线频率配置是否正确,外设频率是否正确。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版