你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

CubeMX生成的SysClock问题

[复制链接]
zhjb1 提问时间:2017-3-31 16:06 /
新入手一块STM32F103C8的小板子,在测试LCD时,感觉速度很慢,ASCII码的清屏都有明显的刷屏视觉,其外置晶振为8MHz。不想再焊了,想用PLL将SysClock提高到允许的72MHz或更高试试。
用CubeMX生成的代码:
//System Clock Configuration
void SystemClock_Config(void){
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
//Initializes the CPU, AHB and APB busses clocks
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}
//Initializes the CPU, AHB and APB busses clocks
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){Error_Handler();}
//Configure the Systick interrupt time
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
//Configure the Systick
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
//SysTick_IRQn interrupt configuration
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

生成的代码中 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;这一句是不用PLL,当改成 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;就报错这一句。问题是,这一堆代码中只有这一行有PLL,其他的都没有,应该如何操作呢?在CubeMX中左边也找不到设置PLL的地方,无奈求助。
顺便说一下,CubeMX是首次使用,还是不太熟悉。
先谢谢了。
收藏 评论3 发布时间:2017-3-31 16:06

举报

3个回答
奏奏奏 回答时间:2017-3-31 16:14:31
请参考这个帖子解决:
关于STM32CubeMX 4.20.0版本时钟配置BUG的修复方案
https://www.stmcu.org.cn/module/ ... amp;fromuid=3319693
(出处: 意法半导体STM32/STM8技术社区)
zhjb1 回答时间:2017-3-31 16:32:30
奏奏奏 发表于 2017-3-31 16:14
请参考这个帖子解决:
关于STM32CubeMX 4.20.0版本时钟配置BUG的修复方案
https://www.stmcu.org.cn/module/for ...

谢谢,改了不报错,但速度没有变化。问一下:如果要是高SysClock需要改哪里呢?下边:
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;//RCC_SYSCLK_DIV1;RCC_SYSCLK_DIV16;RCC_SYSCLK_DIV128
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;//RCC_HCLK_DIV1;RCC_HCLK_DIV16;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;//RCC_HCLK_DIV1;RCC_HCLK_DIV16;
不行,采用DIV16后更慢了,还有两处有数值,一处=16,增大或减小都不变,另一处 /1000,增加或减少5倍,没有影响。其他就不知道改哪里可以改变SysClock了,先谢谢了
奏奏奏 回答时间:2017-3-31 21:24:13
zhjb1 发表于 2017-3-31 16:32
谢谢,改了不报错,但速度没有变化。问一下:如果要是高SysClock需要改哪里呢?下边:
RCC_ClkInitStruct ...

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
修改为:
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;

就应该能正常使用了

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版