板子粉丝 发表于 2018-4-18 09:22:45

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

本帖最后由 板子粉丝 于 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一样情况!
请求帮助,谢谢!

板子粉丝 发表于 2018-4-18 10:03:13

感觉好像是启用了HSI RC 16MHz
这就不明白了

发表于 2018-4-18 10:17:50

用HAL_RCC_GetPCLK1Freq读取一下系统时钟到底是多少。

板子粉丝 发表于 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时钟。

budaoweng 发表于 2018-4-18 11:37:31

是不是外部晶振的原因呀?我之前遇到过类似的情况。晶振不起振自动切换成HSI
页: [1] 2
查看完整版本: 用STM32CubeMX V4.25配置L432KC时钟,TM1与实际相差5倍?