赢一个双肩背包
有多难?
戳一下试试看!
→_→
长摁识别今天继续查找问题原因,使用十六进制查看串口收到的数据,根本不是ASCII码,根据之前的思路,开始查找时钟配置:首先发现一个以前没有注意的问题,Nucleo-144 的晶振X3没有焊接,使用的是ST-Link的MCO输出的时钟(8MHz),所以 HSE需要设置为BYPASS模式; 修改之后发现还是不对,然后进行单步调试系统时钟竟然是这样子的:
很明显不对!最大216MHz怎么就变这么大!!
继续单步跟踪发现:
居然是这里出错了,这个pllvco是根据HSE_VALUE这个宏计算出来的:
1
2
3
4
5
if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLCFGR_PLLSRC_HSI)
{
/* HSE used as PLL clock source */
pllvco = ((HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> POSITION_VAL(RCC_PLLCFGR_PLLN)));
}
跟踪HSE_VALUE,找到罪魁祸首:
1
2
3
4
5
6
7
8
9
/* ########################## HSE/HSI Values adaptation ##################### */
/**
* @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
* This value is used by the RCC HAL module to compute the system frequency
* (when HSE is used as system clock source, directly or through the PLL).
*/
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)25000000U) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
于是乎,有点不解,在MDK中设置的晶振频率不起作用么?
一不做二不休,直接修改宏:
1
2
3
4
5
6
7
8
9
/* ########################## HSE/HSI Values adaptation ##################### */
/**
* @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
* This value is used by the RCC HAL module to compute the system frequency
* (when HSE is used as system clock source, directly or through the PLL).
*/
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000U)
#endif /* HSE_VALUE */
编译、下载:
正确显示!好吧,今天先这样!感谢正点原子提供这么多资料供学习。关于晶振频率在MDK中的设置为什么没有起作用的问题希望有了解的网友指点一下!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。