新手上路
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2019-6-20
- 在线时间
- 7 小时
|
15金钱
目的:
将SMT32G431片子系统时钟设置成170MHz。
时钟源:外部16M晶振,经PLL倍频,sysclk=170MHz
库:HAL库
工具:使用CubeMX生成时钟初始化代码
过程:
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST);
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; // 16MHz, 开发板是24MHz
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV4;//RCC_PLLM_DIV6; // 16/4=4MHz
RCC_OscInitStruct.PLL.PLLN = 85;//18;//85; // 4*85 = 340MHz
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // sys = 170MHz
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
// 外部时钟成功起振,OK
// PLL, ready
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
// 总线时钟分频设置
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
// 问题出在这里:设置时钟源,最后切换PLL作为系统时钟:
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_8) != HAL_OK)
{
Error_Handler();
}
程序单步运行到这里:直接复位了,调试器直接断开
MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, RCC_ClkInitStruct->SYSCLKSource);
|
最佳答案
查看完整内容[请看2#楼]
####破案了####
问题查出来了,也是很不应该的错误
硬件焊的VDDA虚焊了,导致高频下供电不稳定,致使片子复位。
分享一个相似案例:
https://mp.weixin.qq.com/s?__biz=MzA3OTIxMjQyNQ==&mid=2650948219&idx=1&sn=9b6c67705543e1d5c92f747bcf2fdb5d&chksm=8440189db337918b65122f858f518f1a4f55d7bc4fe0d583120f6d7a0b047b0efbb4c490b1fc&token=992402786&lang=zh_CN#rd
|