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

阿波罗开发板使用STM32F767 TIM14时钟源问题

[复制链接]
狂奔的蜗牛soyoa 提问时间:2018-1-29 14:46 /
最近在使用正点原子的阿波罗开发板做 TIM14的PWM输出实验  要求输出30Hz的。对比手册,TIM14挂在APB1上,APB时钟为54MHz,可实际使用中发现TIM14的时钟源输出的是432MHz,查看代码,只有在系统时钟初始化时将PLL设为432MHz,代码如下:
GPIO_InitTypeDef GPIO_Initure;
TIM_HandleTypeDef  TIM14_Handle;
TIM_OC_InitTypeDef TIM14_CH1Handle;       
__HAL_RCC_GPIOF_CLK_ENABLE();               
__HAL_RCC_TIM14_CLK_ENABLE();                                                               
       
GPIO_Initure.Pin=GPIO_PIN_9;                             //PF9  Ï½µÑØ´¥·¢£¬ÉÏÀ­
GPIO_Initure.Mode=GPIO_MODE_AF_PP;     //¸´ÓÃÍÆÍì
GPIO_Initure.Pull=GPIO_PULLUP;                                //ÉÏÀ­
GPIO_Initure.Alternate = GPIO_AF9_TIM14;
HAL_GPIO_Init(GPIOF,&GPIO_Initure);
                 
//base sconfig
TIM14_Handle.Instance = TIM14;
TIM14_Handle.Init.Period = 100;
TIM14_Handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;
TIM14_Handle.Init.Prescaler = (36000 - 1);
TIM14_Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
TIM14_Handle.Init.RepetitionCounter = 0;  //ÂíÉϸüÐÂARR
HAL_TIM_Base_Init(&TIM14_Handle);
               
//OC config
TIM14_CH1Handle.OCMode=TIM_OCMODE_PWM1;
TIM14_CH1Handle.Pulse = 50;
TIM14_CH1Handle.OCPolarity=TIM_OCPOLARITY_HIGH;
HAL_TIM_PWM_ConfigChannel(&TIM14_Handle,&TIM14_CH1Handle,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&TIM14_Handle,TIM_CHANNEL_1);


432M/4/36000 = 3KHz  
计数100   刚好30Hz   示波器测量也是30Hz
收藏 评论17 发布时间:2018-1-29 14:46

举报

17个回答
す疯Ⅱ恒す 回答时间:2018-1-29 15:41:45
我没看错吧。F7能跑到400多Mhz?

评分

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

查看全部评分

wenyangzeng 回答时间:2018-1-29 16:09:25
楼主是否示波器地线断了测量出现误差?767主频无法跑到400MHZ,定时器则会更低的。432M如何得到的?

评分

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

查看全部评分

狂奔的蜗牛soyoa 回答时间:2018-1-29 16:25:34
wenyangzeng 发表于 2018-1-29 16:09
楼主是否示波器地线断了测量出现误差?767主频无法跑到400MHZ,定时器则会更低的。432M如何得到的? ...

示波器肯定没问题,432MHz  我是根据定时器的配置以及示波器实际测量频率推导出来的  我也很奇怪
狂奔的蜗牛soyoa 回答时间:2018-1-29 16:31:41
有网友说 TIM14_Handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;

这句时钟分频不是给时基单元用的,是这样么

我一直都是以为总线时钟/TIM_CLOCKDIVISION_DIVx/psc  就是定时器计数时钟
wenyangzeng 回答时间:2018-1-29 16:56:13
本帖最后由 wenyangzeng 于 2018-1-29 17:41 编辑
狂奔的蜗牛soyoa 发表于 2018-1-29 16:25
示波器肯定没问题,432MHz  我是根据定时器的配置以及示波器实际测量频率推导出来的  我也很奇怪 ...

主频才216MHZ,哪来的432MHZ?而且示波器要显示432MHZ,也要很高带宽的示波器才够用。

无标题.png

STM32 Cubemx配置:主频216MHZ,APB1是108MHZ

无标题1.png

评分

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

查看全部评分

狂奔的蜗牛soyoa 回答时间:2018-1-29 17:54:28
wenyangzeng 发表于 2018-1-29 16:56
主频才216MHZ,哪来的432MHZ?而且示波器要显示432MHZ,也要很高带宽的示波器才够用。

APB1总线被配置为54MHz, 当APB1分频数不为1时  TIM时钟要倍频  所以是108MHz
狂奔的蜗牛soyoa 回答时间:2018-1-29 17:55:00
wenyangzeng 发表于 2018-1-29 16:09
楼主是否示波器地线断了测量出现误差?767主频无法跑到400MHZ,定时器则会更低的。432M如何得到的? ...

APB1总线被配置为54MHz, 当APB1分频数不为1时  TIM时钟要倍频  所以TIM时钟为108MHz
wenyangzeng 回答时间:2018-1-29 18:03:50
狂奔的蜗牛soyoa 发表于 2018-1-29 17:55
APB1总线被配置为54MHz, 当APB1分频数不为1时  TIM时钟要倍频  所以TIM时钟为108MHz ...

那个432MHZ的配置能贴个图出来吗?
狂奔的蜗牛soyoa 回答时间:2018-1-30 10:48:55
wenyangzeng 发表于 2018-1-29 18:03
那个432MHZ的配置能贴个图出来吗?

void Stm32_Clock_Init(u32 plln,u32 pllm,u32 pllp,u32 pllq) //入参是:432,25,2,9
{
    HAL_StatusTypeDef ret = HAL_OK;
    RCC_OscInitTypeDef RCC_OscInitStructure;
    RCC_ClkInitTypeDef RCC_ClkInitStructure;
       
    __HAL_RCC_PWR_CLK_ENABLE();
    __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
   
    RCC_OscInitStructure.OscillatorType=RCC_OSCILLATORTYPE_HSE;   
    RCC_OscInitStructure.HSEState=RCC_HSE_ON;                     
    RCC_OscInitStructure.PLL.PLLState=RCC_PLL_ON;                                  
    RCC_OscInitStructure.PLL.PLLSource=RCC_PLLSOURCE_HSE;         
    RCC_OscInitStructure.PLL.PLLM=pllm;       
    RCC_OscInitStructure.PLL.PLLN=plln;
    RCC_OscInitStructure.PLL.PLLP=pllp;
    RCC_OscInitStructure.PLL.PLLQ=pllq;
    ret=HAL_RCC_OscConfig(&RCC_OscInitStructure);
    if(ret!=HAL_OK) while(1);
   
    ret=HAL_PWREx_EnableOverDrive();
    if(ret!=HAL_OK) while(1);
   
   
    RCC_ClkInitStructure.ClockType=(RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2);
    RCC_ClkInitStructure.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStructure.AHBCLKDivider=RCC_SYSCLK_DIV1;
    RCC_ClkInitStructure.APB1CLKDivider=RCC_HCLK_DIV4;
    RCC_ClkInitStructure.APB2CLKDivider=RCC_HCLK_DIV2;
   
    ret=HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_7);
    if(ret!=HAL_OK) while(1);
}

外部HSE 25MHz晶振,先25分频得到1MHz作为VCO的输入, 然后432倍频得到PLL时钟432MHz。
后面就是SysCLK = PLLCLK/2 = 216MHz  AHB = 216MHz  APB1 = 216/4 = 54MHz   APB2 = 216/2 = 108M  USB/SDIO CLK = PLLCLK/9 = 48MHz
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版