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

用STM32CubeMX V4.25配置L432KC时钟,TM1与实际相差5倍?

[复制链接]
板子粉丝 提问时间:2018-4-18 09:22 /
本帖最后由 板子粉丝 于 2018-4-18 09:25 编辑

第一次用STM32CubeMX,生成MDK工程,感觉很好。外接8MHZ晶振,生成80MHZ系统时钟,现在就是生成的定时时钟与实际有差误,比正常少5倍,比如80MHZ,实际检测下来系统时钟只有16MHZ。



理论:TIM1:在 Parameter Settings 页配置预分频系数为 79,计数周期(自动加载值)为 332,
                     定时器溢出频率就是 80MHz/(79+1)/(332+1) = 3.003KHz约3K。
实际:TIM1:在 Parameter Settings 页配置预分频系数为 15,计数周期(自动加载值)为 332,
                     定时器溢出频率就是 16MHz/(15+1)/(332+1) = 3.003KHz约3K。


TIM6与TIM1一样情况!
请求帮助,谢谢!

L432KC

L432KC

时钟树配置

时钟树配置

TM1

TM1

TM6

TM6
<
收藏 评论18 发布时间:2018-4-18 09:22

举报

18个回答
板子粉丝 回答时间:2018-4-18 10:03:13
感觉好像是启用了HSI RC 16MHz
这就不明白了
回答时间:2018-4-18 10:17:50
用HAL_RCC_GetPCLK1Freq读取一下系统时钟到底是多少。

评分

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

查看全部评分

板子粉丝 回答时间:2018-4-18 10:27:15
读到的值是 15288
板子粉丝 回答时间:2018-4-18 10:27:32
HSE没工作
板子粉丝 回答时间:2018-4-18 10:42:09
  /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLN = 20;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
  RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

发现其中 RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; 是不是要改为RCC_HSE_ON
这都是自动产生的代码
板子粉丝 回答时间:2018-4-18 10:52:51
/** @defgroup RCC_HSE_Config HSE Config
  * @{
  */
#define RCC_HSE_OFF                    0x00000000U                    /*!< HSE clock deactivation */
#define RCC_HSE_ON                     RCC_CR_HSEON                   /*!< HSE clock activation */
#define RCC_HSE_BYPASS                 (RCC_CR_HSEBYP | RCC_CR_HSEON) /*!< External clock source for HSE clock */

定义开开启了
板子粉丝 回答时间:2018-4-18 11:15:05
我做了一下试验,用HSI RC 16 MHZ倍频到80MHZ可以的。HSE没成功过,是不是忽略了某个细节?
toofree 回答时间:2018-4-18 11:26:57
板子粉丝 发表于 2018-4-18 10:42
/**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_OscInitStruct.OscillatorType = RCC ...

有可能是外部HSE时钟,就没工作起来,如果有RCC_HSE_ON宏定义,那么就改一下试试。
因为如果选了HSE,但是没工作起来的话,还是会从内部HSI来跑或者如果不跑的话,就直接挂了。
从你Prescaler设置也说明了,的确跑的是16M时钟。

评分

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

查看全部评分

budaoweng 回答时间:2018-4-18 11:37:31
是不是外部晶振的原因呀?我之前遇到过类似的情况。晶振不起振自动切换成HSI

评分

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

查看全部评分

12下一页

所属标签

相似问题

官网相关资源

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