本帖最后由 板子粉丝 于 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
æ¶éæ é ç½®
TM1
TM6
STM32CubeMX重新生成代码后对上次工程配置的影响?
STM32CubeMX MCU执行到SystemClock_Config时钟初始化死锁
关于STM32CubeMX配置的USB例程电脑无法识别问题
STM32CubeMX 5.4 TouchGFX
STM32CubeMX与STM32CubeIDE的区别
STM32CubeMX 在哪有下载的??
如何在STM32CubeMX配置中更改LwIP的版本?
STM32CubeMX 如何卸载
关于STM32ETH ETH 使用STM32CubeMX配置不成功
STM32CubeMX无法获取(如图),什么情况
在main.c里
/**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.PLLM = 1;
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;
------------------------------------------------------------
在stm32l4xx_hal_rcc.h 里
#if defined(RCC_PLLP_DIV_2_31_SUPPORT)
#define __HAL_RCC_PLL_CONFIG(__PLLSOURCE__, __PLLM__, __PLLN__, __PLLP__, __PLLQ__,__PLLR__ ) \
(RCC -> PLLCFGR = (uint32_t)(((__PLLM__) - 1U) << 4U) | (uint32_t)((__PLLN__) << 8U) | \
(__PLLSOURCE__) | (uint32_t)((((__PLLQ__) >> 1U) - 1U) << 21U) | (uint32_t)((((__PLLR__) >> 1U) - 1U) << 25U) | \
(uint32_t)(((__PLLP__) >> 4U ) << 17U) | (uint32_t)(1 << 24U))
#else
#define __HAL_RCC_PLL_CONFIG(__PLLSOURCE__, __PLLM__, __PLLN__, __PLLP__, __PLLQ__,__PLLR__ ) \
(RCC -> PLLCFGR = (uint32_t)(((__PLLM__) - 1U) << 4U) | (uint32_t)((__PLLN__) << 8U) | \
(uint32_t)(((__PLLP__) >> 4U ) << 17U) | \
(__PLLSOURCE__) | (uint32_t)((((__PLLQ__) >> 1U) - 1U) << 21U) | (uint32_t)((((__PLLR__) >> 1U) - 1U) << 25U))
#endif /* RCC_PLLP_DIV_2_31_SUPPORT */
居然能用了
评分
查看全部评分
*/
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
这都是自动产生的代码
* @{
*/
#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 */
定义开开启了
这就不明白了
评分
查看全部评分
有可能是外部HSE时钟,就没工作起来,如果有RCC_HSE_ON宏定义,那么就改一下试试。
因为如果选了HSE,但是没工作起来的话,还是会从内部HSI来跑或者如果不跑的话,就直接挂了。
从你Prescaler设置也说明了,的确跑的是16M时钟。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
寄存器貌似也对的
评分
查看全部评分