完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
第一次用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一样情况! 请求帮助,谢谢! |
|
相关推荐
15个回答
|
|
HSE没工作
|
|
|
|
/**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 这都是自动产生的代码 |
|
|
|
/** @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 */ 定义开开启了 |
|
|
|
我做了一下试验,用HSI RC 16 MHZ倍频到80MHZ可以的。HSE没成功过,是不是忽略了某个细节?
|
|
|
|
冷冷萧魂丶芮 发表于 2018-12-19 13:58 有可能是外部HSE时钟,就没工作起来,如果有RCC_HSE_ON宏定义,那么就改一下试试。 因为如果选了HSE,但是没工作起来的话,还是会从内部HSI来跑或者如果不跑的话,就直接挂了。 从你Prescaler设置也说明了,的确跑的是16M时钟。 |
|
|
|
是不是外部晶振的原因呀?我之前遇到过类似的情况。晶振不起振自动切换成HSI
|
|
|
|
|
|
|
|
仿真一下,看看开启外部晶振操作过程是否发生了失败。还是排查一下外部电路的问题。
|
|
|
|
|
|
|
|
首先可以用寄存器看看时钟源的设置,看完,是可以设置一个MCO输出,测一下就知道具体的频率了.记得设置MCO管脚为高速..
|
|
|
|
现在可以确定我的外部有源晶振被内部HSI RC接管了!是不是外接有源晶振还要注意什么问题
|
|
|
|
|
|
|
|
RCC用LL库就可以用外部时钟8MHz,倍频到80MHz。奇怪了!!!
|
|
|
|
|
|
|
|
经过今天的努力,发现是 PLL configuration register (RCC_PLLCFGR)寄存器HAL库配置不正确,我就做了一下修改
在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 */ 居然能用了 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2136 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1970 浏览 3 评论
4566 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2116 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2629 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 06:04 , Processed in 0.835078 second(s), Total 69, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号