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

阿波罗开发板使用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个回答
狂奔的蜗牛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
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

查看全部评分

wenyangzeng 回答时间:2018-1-30 11:23:14
本帖最后由 wenyangzeng 于 2018-1-30 11:45 编辑
狂奔的蜗牛soyoa 发表于 2018-1-30 10:48
void Stm32_Clock_Init(u32 plln,u32 pllm,u32 pllp,u32 pllq) //入参是:432,25,2,9
{
    HAL_StatusTy ...

按照楼主的配置试一下,这个
RCC_OscInitStructure.PLL.PLLQ=pllq;
pllq只能到2,CubeMX不接受 9
无标题.png
而且系统时钟频率是216MHZ而不是432MHZ,这个432只是PLLM倍频系数而已。


疯de_恒 回答时间: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  就是定时器计数时钟
狂奔的蜗牛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-2-1 16:12:15
本帖最后由 狂奔的蜗牛soyoa 于 2018-2-1 16:14 编辑
wenyangzeng 发表于 2018-1-30 11:23
按照楼主的配置试一下,这个
RCC_OscInitStructure.PLL.PLLQ=pllq;
pllq只能到2,CubeMX不接受 9

C:\Users\soyoa\Desktop\微信截图_20180201160954.png

432MHz  是VCO的频率,手册上PLLQ范围为2-15顺便看了下HAL库里面的写法  也没有提到有2的限制,可能是cube的限制吧

PLL

PLL
chrome777 回答时间:2018-2-2 17:20:56
wenyangzeng 发表于 2018-1-29 16:56
主频才216MHZ,哪来的432MHZ?而且示波器要显示432MHZ,也要很高带宽的示波器才够用。

为什么我配出来的time时钟是216M啊,怎么设置的。。。 TIM图片20180202171910.png

chrome777 回答时间:2018-2-2 17:27:17
本帖最后由 morphlings2014 于 2018-2-2 17:38 编辑

TIM14的时钟是挂在APB1的time clock上面的,如下图是216MHZ
TIM图片20180202171910.png
如下是我配置的TIM14为1K,和示波器捕获的值是一样的。
工程 project.rar (9.75 MB, 下载次数: 1)
TIM图片20180202172417.png

评分

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

查看全部评分

wenyangzeng 回答时间:2018-2-2 19:17:54
morphlings2014 发表于 2018-2-2 17:27
TIM14的时钟是挂在APB1的time clock上面的,如下图是216MHZ

如下是我配置的TIM14为1K,和示波器捕获的值是 ...

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